Curated list of small C/C++ libraries for building your own custom audio plugin framework.
Small libraries usually follow the Unix philosophy, making them more maintainable, replaceable, and flexible in how they are used. Frameworks, by definition, break this philosophy.
This lists aims to support Windows, MacOS, and usually Linux. iOS, Android and Emscripten are not actively supported.
Any license labelled Dual or Multi usually defaults to a kind of GPL but with a conditional alternative. Sometimes it requires a fee, sometimes it's due to a dependancy, which may be replaceable. Visit their repos and websites to learn about exact conditions.
Function | Name | License | Description |
---|---|---|---|
Window | Pugl | ISC | Native window with mouse & keyboard callbacks. Made with plugins in mind |
Window | sokol | zlib | Native window with mouse & keyboard callbacks. Made with games in mind. See: sokol_app.h . |
VST3 | vst3_c_api | Dual | VST3 wrapper |
CLAP | clap | MIT | CLAP wrapper |
Threads | tinycthread | BSD like | C11 threads.h like API, cross platform wrapper |
File stream | sokol | zlib | Read & write stream for local files. See sokol_fetch.h |
Log | sokol | zlib | Log to console or file. See sokol_log.h |
Log | stb | MIT | Fast log to console. See stb_sprintf.h |
Audio thread | sokol | zlib | Spins up an audio thread with buffer to write to. See sokol_audio.h |
Audio IO | libsoundio | MIT | Wrapper for CoreAudio, WASAPI + more |
HTTPS | curl | BSD like | Makes HTTPS requests |
TLS | cute_headers | Unlicense | HTTPS request. Lacks any parsing of responses. See cute_tls.h |
HTTP parsing | picohttpparser | MIT | Parses HTTP1 requests & responses |
Time | sokol | zlib | Get & parse high resolution time. See sokol_time.h |
Image codecs | stb | MIT | Load/decode many image formats. See stb_image.h , stb_image_resize.h , stb_image_write.h |
Data containers | stb | MIT | Variable type dynamic arrays and hash maps. See stb_ds.h |
Strings | sds | BSD-2 | Dyanamic size strings with manipulation and formatting methods. |
JSON | zzzJSON | BSD like | Fast JSON encode/decode. Repo has benchmarks and links to alternatives |
Crypto | TweetNaCl | Unkown | HMAC hashing, Public/Secret key encryption and signatures |
Vector graphics | NanoVG | zlib | Antialised 2D polygons, lines, text, gradients and images. Backends for OpenGL, Metal, and DirectX 11. Usefull repo |
Regex | TRE | BSD like | Regex pattern matching. Great name |
Regex | PCRE2 | Dual | Regex pattern matching |
Regex | tiny-regex-c | Unlicense | Regex pattern matching |
File/folder window | osdialog | CC0 | Native select file/folder dialogue boxes, alerts, colour picker & more |
File/folder window | tinyfiledialogs | zlib | Native select file/folder dialogue boxes, alerts, colour picker & more |
Binary embed | bin2c | Apache 2 | CLI. Turns single file (eg. font, image) into .c containg const char[] . |
Binary embed | c-embed | MIT | CLI. Turns multiple files (eg. font, image) into single .o . Access in code using virtual file system |
Function | Name | License | Description |
---|---|---|---|
Window | CrossWindow | zlib | Native window with mouse & keyboard callbacks. |
VST3 | vst3_public_sdk | Dual | VST3 wrapper |
AU | vst3_public_sdk | Dual | AU wrapper via a VST3 wrapper wrapper |
AUv3 | vst3_public_sdk | Dual | AUv3 wrapper via a VST3 wrapper wrapper |
AAX | vst3_public_sdk | Dual | AAX wrapper via a VST3 wrapper wrapper |
VST3 | clap-wrapper | Multi | VST3 wrapper via a CLAP wrapper |
File read/write | cppfs | MIT | Manage local, virtual and remote files |
Audio codecs | CHOC | ISC | Decode/encode WAV, FLAC, Ogg-Vorbis, decode only MP3. |
MIDI parsing | CHOC | ISC | Parse MIDI messages, MIDI sequences and MIDI files. |
MIDI/Audio sync | CHOC | ISC | Splits an audio block to match times of MIDI events |
Log | fast_io | MIT | <iostream> replacement with threadsafe options |
FFT | KFR | Dual | Really fast FFTs. |
Lock free queue | readerwriterqueue | BSD | Does queue. No lock |
Timer thread | CHOC | ISC | Timed callbacks |
Machine ID | machineid | Apache 2 | Generates a unique string based on users hardware |
Base64 | CHOC | ISC | Base64 string encode/decode |
Regex | hyperscan | BSD3 | Regex pattern matching |
File/folder window | Portable File Dialogs | WTFPL | Native select file/folder dialogue boxes |
Things to add to the list:
- File searching
- Graphics engine agnostic customisable widgets
- Identify hardware, available CPU instructions at runtime
- Something else? (suggest more!)