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.
See the Examples folder for code & build examples of these libraries.
In future we hope to provide plugin templates that are built using several small libraries.
The listed libraries and example code are generally biased towards:
- Permissive non-GPL licensing
- Support for Windows & MacOS. (Linux, iOS, Android and Emscripten are not actively supported!)
- Ease of compilation, fast builds, small binaries, fewer LOCs, single compilation units, C89 & C99
Function | Name | License | Description |
---|---|---|---|
Plugin wrapper | CPLUG | Unlicense | Wrapper for VST3, AUv2 & CLAP. Includes standalone builds with hot reloading |
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 | threads.h | Unlicense | C11 like threads & atomics, mutexes, singals, single reader/writer queues, cross platform |
Threads | tinycthread | BSD like | C11 threads.h like API, cross platform |
Atomics | c89atomic | Unlicense | C11 like atomic.h like API, supports flags, float, double and ptr, cross platform |
WAV | dr_libs | Unlicense | WAV read & write. See dr_wav.h |
AIFF | dr_libs | Unlicense | AIFF read & write. See dr_wav.h |
MP3 | dr_libs | Unlicense | MP3 read. See dr_mp3.h |
FLAC | dr_libs | Unlicense | FLAC read. See dr_flac.h |
FLAC | FLAC | BSD-3 | FLAC encode / decode / read / write |
Opus | Opus | BSD-3 | Opus encode / decode / read / write |
Log | sokol | zlib | Log to console or file. See sokol_log.h |
Log | stb | MIT | Fast log to console. See stb_sprintf.h |
FFT | pffft | BSD like | 1D real & complex FFTs. Competitively fast. SSE & NEON optimised |
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 |
Vector graphics | NanoVG | zlib | Antialised 2D polygons, lines, text, gradients and images using OpenGL |
Vector graphics | nanovg_compat | zlib | NanoVG wrapper with Metal & DirectX 11 backends and extra functions for initialising a context. |
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. |
UTF8 | utf8 | Unlicense | stdlib string.h, locale.h, ctype.h replacement functions for \0 terminated UTF8 strings |
UTF8 | cute_headers | Unlicense | UTF8 & UTF16 conversion functions. See cute_utf8.h |
Crypto | TweetNaCl | PD | HMAC hashing, Public/Secret key encryption and signatures |
Binary embed | bin2c | Apache 2 | CLI. Turns single file (eg. font, image) into .c containg const char[] . |
File dialog box | osdialog | CC0 | Native select file/folder dialogue boxes, alerts, colour picker & more |
File dialog box | tinyfiledialogs | zlib | Native select file/folder dialogue boxes, alerts, colour picker & more |
File searching | cute_headers | Unlicense | Recursive file & directory search. See cute_files.h |
File stream | sokol | zlib | Read & write stream for local files. See sokol_fetch.h |
File I/O | xhl | Unlicense | File read/write/append, get user Desktop/Documents etc, UTF8 paths. See files.h |
TLS | cute_headers | Unlicense | HTTPS request. Lacks any parsing of responses. See cute_tls.h |
HTTPS | curl | BSD like | Makes HTTPS requests |
HTTP parsing | picohttpparser | MIT | Parses HTTP1 requests & responses |
JSON | yyJSON | MIT | 2nd fastest JSON encode/decode. Parses all data upfront to create a searchable linked list. |
JSON | zzzJSON | BSD like | Fast JSON encode/decode. Uses on the fly parsing and string searching and string views. |
Base64 | base64 | BSD-2 | Base64 string encode & decode |
Regex | tiny-regex-c | Unlicense | Regex pattern matching |
Regex | PCRE2 | Dual | Regex pattern matching |
Regex | TRE | BSD like | Regex pattern matching but with a greater name |
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 |
JSON | simdjson | Apache 2 | Fastest JSON 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:
- Graphics engine agnostic customisable widgets
- Something else? (suggest more!)