Create your first app
nsx create-app writes a standalone app directory and, unless you tell it not to, clones
the starter modules that board needs into it. Nothing else on your machine changes.
Captured on macOS 26 with an Apollo510 EVB target configuration. The app path is
replaced by /home/you/hello_ap510, and Git advisory output is omitted for clarity.
The CLI prints your own absolute path.
--board defaults to apollo510_evb, so you can leave it off for that target. Run
nsx board list for the 17 packaged boards, or read the
board matrix for each board’s SoC, tier, provider and
declared toolchains.
What it wrote
Section titled “What it wrote”hello_ap510/├── .gitignore├── CMakeLists.txt├── README.md├── boards/│ └── apollo510_evb/├── cmake/│ ├── nsx/│ └── presets/├── modules/├── nsx.yml└── src/ └── main.c| Path | What it is |
|---|---|
nsx.yml |
The app manifest: board and SoC target, toolchain, release channel, starter profile and the module list. This is the file you edit. |
CMakeLists.txt |
An ordinary top-level CMake file. It declares cmake_minimum_required(VERSION 3.24), includes the packaged NSX support, and links your executable against nsx::board_apollo510_evb and nsx::runtime_core. |
src/main.c |
The generated application. |
cmake/nsx/ |
Packaged CMake support: module wiring, the three toolchain files, the SEGGER flash and reset templates. Regenerated by NSX rather than hand-edited. |
cmake/presets/ |
CMakePresets.json, so editors and IDEs can open the project directly. |
boards/apollo510_evb/ |
The vendored board module: board.yaml, plus the board, BSP, SoC, memory and debug CMake fragments. |
modules/ |
Where vendored modules land. After a default create-app it holds the starter set, here nsx-ambiq-sdk and nsx-pmu-armv8m. Gitignored. |
README.md |
A short readme for the generated app, including the build and flash sequence. |
There is no nsx.lock and no build/ yet. Both appear when you run
nsx configure.
The generated src/main.c is a one-second SWO heartbeat:
#include "nsx_core.h"
int main(void){ nsx_core_config_t cfg = { .api = &nsx_core_V1_0_0, }; (void)nsx_core_init(&cfg);
nsx_itm_printf_enable();
while (1) { nsx_printf("nsx hello from generated app\r\n"); nsx_delay_us(1000000); }}Choosing a template
Section titled “Choosing a template”--template picks the scaffold flavor.
| Template | What you get |
|---|---|
default |
The minimal app above: a SWO printf loop. |
npu-tflm |
TFLite Micro inference on the Ethos-U85 NPU. It seeds nsx-helia-rt and nsx-npu, turns on heliaRT’s Ethos-U dispatch, and ships a Vela model harness plus a tools/tflite_to_header.py converter. The generated README covers the offline Vela compilation step. |
The NPU template targets boards whose SoC NSX registers as carrying an Ethos-U85 NPU,
which today is atomiq110_fpga_turbo:
nsx create-app pd_npu --board atomiq110_fpga_turbo --template npu-tflmScaffolding without the starter modules
Section titled “Scaffolding without the starter modules”--no-bootstrap writes the app but skips the clones, which is what you want when you plan
to pick modules yourself or when you have no network. The app then has no boards/
directory and an empty modules/, and nsx.yml records baseline: none. NSX tells you
what to do next:
Created app 'my_app' at: /home/you/my_appStarter modules were not bootstrapped (--no-bootstrap).Next steps: 1) cd /home/you/my_app 2) Run `nsx module list --app-dir .` 3) Add modules with `nsx module add <module> --app-dir .`Browse what you can add in the module catalog.
The remaining options are --soc, which overrides the SoC that the board would otherwise
imply, and --force, which allows writing into a directory that is not empty. Both are
documented on the nsx create-app reference
page.
Configure and build the app you just created.