Docs / Nebula Sound System manual / 11. The SDK (building your own instruments and effects)

11. The SDK (building your own instruments and effects)

Status today: a placeholder repository. The SDK repository exists so the plan is public early, but the real SDK has not shipped yet — this page describes the intent, not something you can use today. Check the repository itself for the current state.

What it is for

Nebula's own built-in instruments and effects (chapters 3–5) are already written to a strict internal boundary: each one is a self-contained "device" with a fixed table of named, described knobs and a real-time-safe processing function, with no knowledge of tracks, projects or the screen around it. The SDK is that same boundary, opened up, so other people can write their own devices that plug into Nebula exactly the way the built-in ones do.

What is planned

  • A stable C ABI for devices — instruments, effects, and MIDI effects — the actual plug-in boundary, designed so it does not need to change shape as Nebula's internals do.
  • C++ and Rust wrappers on top of that ABI, for real-time-safe device authoring.
  • A CMake project template, example devices, and a small validator tool.
  • Beginner-friendly documentation, the same ELI5 standard as the rest of this manual.

Why C++/Rust rather than Python or JavaScript

A device's audio processing runs on Nebula's real-time audio thread, where a stop-the-world garbage-collection pause of even a few milliseconds is an audible glitch. Managed languages (Python, C#, Go, Java, JavaScript) are a poor fit for that boundary — but they are exactly the right fit for the Control API (chapter 9) instead, which talks to a running Nebula from outside the audio thread entirely. If what you want is to script or automate Nebula, start there, not here.

Licence

The SDK repository is MIT-licensed. Devices you build with it are yours — you may sell them. (Nebula itself is free to use; its source code is not published.)

Updated 2026-10-31

An unhandled error has occurred. Reload 🗙

Rejoining the server...

Rejoin failed... trying again in seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please retry or reload the page.