An eight-track music tracker for NullPerator hardware, iPhone, iPad, and the web.
NullPerator combines a compact, controller-driven workflow with a shared C++ tracker engine. Compose songs from patterns, chains, phrases, and tables; work with samples or synthesized instruments; and move compatible projects between the supported targets.
NullPerator builds on the open-source picoTracker project and is developed by 203 Systems.
- Eight song tracks with 256 chains, 128 phrases, and 32 tables
- Sample, MIDI, SID, OPAL, and Macro instruments
- 44.1 kHz stereo audio engine
- Fast editing through physical controllers or on-screen controls
- Project autosave, sample import, and offline local storage
- Shared 240×240 UI2 tracker interface across hardware, iOS, and the web
| Target | Runtime | Platform integration |
|---|---|---|
| NullPerator for iOS | Native C++ core with a bundled Svelte presentation | Core Audio recording and playback, CoreMIDI, Bluetooth MIDI, GameController, background audio, and Files |
| NullPerator hardware | Native C++ firmware | ESP32-S3 hardware, display, controls, audio, MIDI, and storage |
| WASM workbench | C++ core compiled to WebAssembly | Browser storage, host-folder synchronization, Web MIDI, logs, and tracing |
All targets share the application model, project format, audio engine, and UI2 renderer. Platform adapters provide audio, MIDI, input, display, and filesystem services without changing tracker behavior.
Requirements: Xcode, an iOS signing team for physical devices, and pnpm.
cd web
pnpm install --frozen-lockfile
cd ..
ios/scripts/package-web.sh
open ios/NullPeratorIOS.xcodeprojSelect the NullPeratorIOS scheme, choose an iPhone, iPad, or simulator, and
run the app. The Xcode build phase compiles and links the native C++ core.
See the iOS build and architecture guide for runtime details.
Requirements: the pinned Emscripten toolchain, Node.js, and pnpm.
cd web
pnpm install --frozen-lockfile
cd ..
tools/build-wasm.sh Release
cd web
pnpm devThe development server prints the local URL after startup. See the WASM build guide for toolchain setup and production packaging.
The hardware firmware targets ESP32-S3 and builds with ESP-IDF:
idf.py --project-dir sources -B sources/build/node -DNode=true buildSee the hardware build guide for configuration, flashing, monitoring, and troubleshooting.
cmake -S tests -B build-host -DCMAKE_BUILD_TYPE=Release
cmake --build build-host --parallel
ctest --test-dir build-host --output-on-failureShared changes should also be validated on every affected product target.
| Path | Purpose |
|---|---|
sources/ |
Shared C++ tracker engine, UI2, services, and platform adapters |
ios/ |
Swift and Objective-C++ iOS host, native bridge, resources, and packaging scripts |
web/ |
Shared Svelte presentation and the WASM workbench |
tests/ |
Host-side C++ tests |
tools/ |
Build, verification, asset, and firmware acceptance utilities |
docs/ |
Development, release, App Store, privacy, and WASM guides |
- Developer guide
- Hardware build and flashing
- Release process
- WASM storage
- WASM testing
- WASM deployment
- Privacy policy
- App Store submission checklist
Learn more about the physical NullPerator at 203 Systems.
Read the developer guide and contribution guidelines before opening a pull request.
This project is distributed under the BSD 3-Clause License. See
LICENSE for the picoTracker copyright history and the licenses of
bundled third-party components. Web distribution notices are maintained in
web/public/THIRD_PARTY_NOTICES.md.