# nsx.yml

The app manifest. Names the app, the boards it supports, the toolchain and the modules it depends on directly.

## Fields

| Field | Type | Default | Meaning |
| --- | --- | --- | --- |
| schema_version | int (2), required |  | Manifest schema version. NSX refuses a manifest it does not recognize. |
| project.name | string, required |  | App name. Used for the CMake project and the default build directory. |
| targets.default | string |  | Board built when --board is not given. |
| targets.supported | list of string, or map of board to overrides |  | Boards this app may be built for. The map form accepts per-board soc, profile and toolchain overrides. |
| target.board | string |  | Single-board shorthand, superseded by targets. |
| toolchain | string | arm-none-eabi-gcc | Default toolchain for every board unless a board overrides it. |
| channel | string |  | Registry channel the app tracks. |
| modules | list of module entries |  | Direct dependencies. A string is shorthand for a map with only name set. |
| modules[].name | string, required |  | Module name as it appears in the registry. |
| modules[].project | string |  | Registry project that provides the module, when it is ambiguous. |
| modules[].revision | string |  | Tag, branch or commit constraint for this module. |
| modules[].boards | list of string |  | Restrict the dependency to a subset of targets.supported. |
| modules[].local | bool |  | Mirror the module from an external path on every sync. |
| modules[].source | map |  | Exactly one of path (external directory), vendored (true, committed in this repo) or git (URL, with optional rev). |
| module_registry.projects | map |  | App-local project overrides keyed by project name, each with url, revision, path or local_path. |
| module_registry.modules | map |  | App-local module overrides keyed by module name, each with project, revision and optional metadata. |
| tooling | map |  | Tool settings passed through to the generated build. Keys are preserved as written. |
| features | map |  | Feature flags passed through to the generated build. |
| profile | string |  | Starter profile the app was created from. |
| profile_status | string |  | Maturity recorded for the starter profile. |
| baseline | string (none) |  | Set to none to skip the board's baseline module set. |

## Example

```yaml
schema_version: 2
project:
  name: hello_world
targets:
  default: apollo510_evb
  supported:
    - apollo510_evb
    - apollo4p_blue_kxr_evb
toolchain: arm-none-eabi-gcc
channel: stable
features: {}
```

## How it is read

NSX reads `nsx.yml` through `neuralspotx.project_config.load_project_config`, which raises `NSXConfigError` when the document is invalid. The supported `schema_version` is `2`.

**Unknown keys:** Kept. Unrecognized top-level keys are preserved rather than rejected, so a newer NSX can read a manifest an older one wrote.
