# nsx create-app

Create a new standalone NSX app project

## Usage

```text
nsx create-app [-h] [--board BOARD] [--soc SOC] [--force]
                      [--no-bootstrap] [--template {default,npu-tflm}]
                      app_dir
```

## Arguments

| Option | Value | Default | Description |
| --- | --- | --- | --- |
| app_dir | value | required | App directory to create |

## Options

| Option | Value | Default | Description |
| --- | --- | --- | --- |
| --board BOARD | value | apollo510_evb | Target board package suffix |
| --soc SOC | value | optional | Target SoC package suffix (default inferred from board) |
| --force | flag | optional | Allow writing into a non-empty app directory |
| --no-bootstrap | flag | optional | Create the app without initializing starter modules |
| --template TEMPLATE | default \| npu-tflm | default | App template (default: Minimal hello-world app (SWO printf loop); npu-tflm: TFLite Micro inference on the Ethos-U85 NPU (Vela model harness, heliaRT ethos-u dispatch)) |

## Notes

`--soc` is normally inferred from `--board`. By default NSX bootstraps the starter module
set for the selected board; `--no-bootstrap` creates the app shell without vendoring any
starter modules.

The `--template` choices scaffold different apps:

- `default` is a minimal hello-world app built around an SWO printf loop.
- `npu-tflm` runs TFLite Micro inference on the Ethos-U85 NPU with a Vela model harness
  and heliaRT ethos-u dispatch. It seeds `nsx-helia-rt` and `nsx-npu` as direct
  dependencies and only accepts NPU boards (SoC `atomiq110`).

A template that targets specific SoCs is refused for other boards before any files are
written or modules fetched. Use `--template default` or an NPU board.

```bash
nsx create-app hello_ap510 --board apollo510_evb
nsx create-app npu_demo --board atomiq110_fpga_turbo --template npu-tflm
```

`-v/--verbose`, `-q/--quiet` are parsed by `nsx` itself, so they go before the command name, as `nsx -v create-app`.
