- C++ 86.2%
- C 8%
- Objective-C++ 4.4%
- CMake 1.2%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
A host that runs the editor out of process (Logic 11, GarageBand) hands every NSMouseMoved the service window receives to -[NSWindow sendEvent:], which first asks the host synchronously over XPC whether a modal sheet is attached. While the host's main thread is busy saving, and asking this very unit for its state, that question is never answered and the two main threads deadlock; both Logic spindumps show exactly that. The view now registers no tracking area and reads the pointer once per tick instead: the same MouseMove, delta, hover and tooltips. Presses and drags still arrive as events, and a held button leaves the pointer to the drag. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
| .claude | ||
| .forgejo/workflows | ||
| cmake | ||
| docs | ||
| examples/snd-example | ||
| include/snd | ||
| site | ||
| src | ||
| test | ||
| third_party | ||
| tools | ||
| .gitignore | ||
| AUDIT.md | ||
| CMakeLists.txt | ||
| DESIGN.md | ||
| LICENCE | ||
| PROGRAMMING-GUIDE.md | ||
| README.md | ||
| ROADMAP.md | ||
| UI_PROGRAMMING_GUIDE.md | ||
SND
SND is a small, in-house audio+UI foundation library — cross-platform audio I/O, a GUI shell, plugin hosting, and a write-once plugin SDK. Apps build on SND instead of on JUCE/iPlug. Free for any noncommercial use; commercial use needs a licence — see License.
Modules
snd::audio— device playback/capture, file decode (wav/aiff/flac/mp3/ogg), streaming reads, encoders (FLAC, MP3), resampling, a gaplessPlayersnd::ui— shared audio UI toolkit with two front ends: retained/aGooey (snd_ui_retained_gl, no ImGui target) and Dear ImGui compatibility (snd_ui_imgui). Widgets share paint helpers for knobs, meters, faders, keyboard, pattern grid, sequencer matrix, envelope editor, graph surface, menus, and custom painter hooks. The retained tree adds layout, keyboard focus, and accessibility semantics. SeeUI_PROGRAMMING_GUIDE.md.snd::plugin— VST3 + AU hosting (editor GUIs in native windows, MIDI, host transport) and a client SDK: write aProcessor+ ImGui editor once and build it as VST3, AU, and a standalone app. Multichannel buses, an inter-plugin control-bus API, out-of-process crash-safe scanning.snd::midi— MIDI events + CoreMIDI/ALSA/WinMM device I/Osnd::dsp— real FFT + COLA STFT (PFFFT)snd::state— a ValueTree-shaped state tree with XML round-trip + undosnd::platform— native file dialogs, per-OS config dir
Mac, Linux, and Windows are supported. DESIGN.md records the architecture,
PROGRAMMING-GUIDE.md the how-to, and AUDIT.md the current architecture
audit.
Every push is built and selftested on self-hosted Linux and Windows runners
(Forgejo Actions — see the repo's Actions tab; workflow in
.forgejo/workflows/build.yml).
Build & test
Everything vendors or fetches automatically (CMake FetchContent); there is no
package manager to set up. OpenGL needs nothing installed on any platform: on
macOS the system framework provides GL 3.2, everywhere else the vendored GLAD
loader (third_party/glad) resolves the modern entry points at runtime.
Prerequisites
-
macOS — Xcode command-line tools (
xcode-select --install), CMake 3.24+. -
Windows — Visual Studio 2022 (Community is fine) with the Desktop development with C++ workload, CMake 3.24+, git. Any shell works — the Visual Studio generator finds the toolchain itself.
-
Linux — gcc/clang, CMake 3.24+, and the X11/audio dev packages GLFW and the audio backend compile against:
sudo apt install build-essential cmake libx11-dev libxrandr-dev \ libxinerama-dev libxcursor-dev libxi-dev libasound2-dev
Build
macOS / Linux:
tools/build.sh # configure + build + run --selftest
tools/build.sh --no-test # configure + build only
Or by hand on any platform (on Windows this produces a Visual Studio build;
add --config Debug to the build step and find binaries under
build/Debug/):
cmake -S . -B build
cmake --build build
./build/snd-example --selftest # headless checks
./build/snd-example --selftest-retained # focused retained UI contract
./build/snd-example # window + audio device demo
--selftest verifies real behaviour, not just compilation: decode+playback,
capture, VST3/AU hosting (parameter behaviour + stable-ID state round-trip),
and the plugin-client SDK.
Last verified builds: macOS (arm64, AppleClang), Linux (Mint 22 / Ubuntu 24.04, gcc 13, selftest + headless GL render under Xvfb), Windows 11 (VS 2022, x64).
There is no CI here, and there won't be — private-repo Actions minutes are metered and easy to over-trigger. This repo only builds when someone runs the script by hand.
What's vendored vs. original
- Vendored, unmodified, pinned (via CMake
FetchContent): miniaudio, Dear ImGui, GLFW, VST3 SDK, Apple AudioUnitSDK, PFFFT, NFD, imgui-knobs, libFLAC - Original: everything under
include/snd/andsrc/— SND's own API and the backends behind it
Dev workflow
See AGENTS.md for the multi-agent dev workflow that applies to work in this
repo.
License
SND is source-available, not open source. It is licensed under the PolyForm Noncommercial License 1.0.0: free to use, modify, and share for any noncommercial purpose (personal projects, research, education, non-profits, evaluation).
Commercial use requires a separate commercial licence from the author. If you want to ship SND — or anything built on it — in a product or service for commercial advantage or monetary compensation, open an issue at https://github.com/100mountains/snd or contact @100mountains on GitHub to arrange one.
Copyright 2026 100mountains. The dependencies SND fetches keep their own licences (mostly permissive: ImGui, GLFW, miniaudio, PFFFT, NFD, libFLAC, imgui-knobs, nanosvg, stb_image, AudioUnitSDK). One to note: the VST3 SDK is GPLv3-or-Steinberg — if you build VST3 targets, your use of that SDK is governed by Steinberg's terms, separately from SND's licence.