Generally, the following is a list of small, easy-to-integrate, portable libraries which are usable from C and/or C++, and should be able to be compiled on both 32-bit and 64-bit platforms. There is preference for libraries that are C, public domain and single-file. However, we have not personally verified that any specific library is as advertised, or is quality software.
We accept submissions for new libraries and corrections if information for a library below is wrong. Consider either opening a Pull Request, a new Issue or drop a message in our discord channel: https://discord.gg/2fZVEym The server is meant to be a pleasant space to chat about C, C++, Libs authoring and Game development specifically.
- Libraries must be usable from C or C++, ideally both.
- Libraries must include the licensing terms in the header and source files.
- Libraries should be usable from more than one platform (ideally, all major desktops and/or all major mobile).
- Libraries should compile and work on both 32-bit and 64-bit platforms.
- Libraries should use at most two files (one header, one source): more than two files are mostly forbidden.
Exceptions will be allowed for good reasons.
Also you might be interested in other related, but different lists:
- STB: the mighty collection of gamedev utils.
- clib: list of (mostly) small single C functions (licenses not listed)
- CCAN: package of lots of shareable C functions (mixed licenses)
- And some more: andrewwillmott, b-library (C,C++), blastbay, chobo-shl (C++), clibs, containers (C++), cpp-poc (C++), cute_headers (C,C++), data-structures-c, dr_libs, dyeo.h, emilib (C++), final_game_tech (C,C++), ftg_toolbox_public, gb, gl-helpers (C,C++), ijhandlealloc, jar, jo, kj, klib, kokke, libjrc, libs, libs, live_edit, maratis, minilibs, miscsrc, mmx, nflibs, noc, ok-fm, ok-lib, par, pico_headers, portable-snippets, px (C++), rjm, rxi, shadertoolkit, single-header-file-c-libs, skeeto, slibs, snippets, snippets, sokol, statvs (C++), sts, sweet (C++), tinybits (C,C++), tm, yocto-gl (C++), zeroTolerance, zheaders, zpl,
tag | library | license | API | files | description |
---|---|---|---|---|---|
2d | blendish | MIT | C/C++ | 1 | blender-style widget rendering using NanoVG |
2d | C-Turtle | MIT | C++ | 1 | Port of Python's Turtle to C++ |
2d | cgl | MIT | C | 2 | C Game Library |
2d | Cimg | CeCILL/CeCILL-C | C++ | 1 | image processing toolkit (60K LoC) |
2d | colourblind | ISC | C/C++ | 1 | simulating colourblindness |
2d | daisy | MIT | C++ | 1 | 2D Graphics and text |
2d | Immediate2D | PD | C++ | 2 | zero-configuration, immediate-mode 2D graphics for Windows |
2d | m_image.h | zlib | C/C++ | 1 | image processing routines |
2d | RFont | zlib | C/C++ | 1 | Simple-to-use lightweight single header modular font rendering library |
2d | RGL | zlib | C/C++ | 1 | Simple ultra-lightweight OpenGL version abstraction based on RLGL (pipeline system) |
2d | scalable-font2 | MIT | C | 1 | Scalable Font renderer + specification |
2d | si_normalmap | PD | C | 1 | Image to Normal Map generator |
2d | tigr | PD | C/C++ | 2 | quick-n-dirty window text/graphics for Windows and macOS |
2d | wfc | MIT | C | 1 | generate image locally similar to the input image using WFC algorithm |
3d | debug-draw | PD | C++ | 1 | API-agnostic immediate-mode debug rendering |
3d | lightmapper | PD | C/C++ | 1 | use your OpenGL renderer to offline bake lightmaps |
3d | mikktspace | zlib | C/C++ | 2 | compute tangent space for normal mapping |
3d | model3d | MIT | C | 1 | 3D model format specification |
3d | seamoptimizer | PD | C/C++ | 1 | modify lightmap data to hide seams |
3d | Simple OpenGL Loader | MIT | C/C++ | 1 | extensible, cross-platform OpenGL loader |
3d | small3dlib | CC0 + patent waiver | C/C++ | 1 | fast and portable software renderer |
3d | stb_voxel_render | PD | C/C++ | 1 | Minecraft-esque voxel rendering "engine" with many more features |
3d | Swarmz | PD | C++ | 1 | swarming/flocking algorithm |
3d | tinygizmo | PD | C++ | 2 | gizmo objects for interactively editing 3d transformations |
3d | Vertex Cache Optimizer | PD | C/C++ | 1 | vertex cache optimization of meshes |
3d | Vulkan Memory Allocator | MIT | C/C++ | 1 | memory allocator for Vulkan |
ai | Genann | zlib | C/C++ | 2 | simple neural networks (ANN) |
ai | KANN | MIT | C/C++ | 2 | automatic differentiation (2 files) |
app | RGFW | zlib | C/C++ | 1 | A multi-platform single-header user-friendly GUI framework as an alternative to GLFW |
argv | Argh! | BSD | C++ | 1 | command-line argument parsing |
argv | Clara | Boost | C++ | 1 | composable, command line parser for C++ 11 and beyond |
argv | CLI11 | BSD | C++ | 1 | Feature-rich CLI parsing in modern C++11 |
argv | cmdline | BSD | C++ | 1 | command-line argument parsing |
argv | flags | PD | C++ | 1 | command-line argument parsing |
argv | kgflags | MIT | C/C++ | 1 | command-line argument parsing |
argv | linkom | MIT | C/C++ | 1 | command-line argument parsing w/ DOS-style options |
argv | optionparser | MIT | C++ | 1 | command-line argument parsing |
argv | parg | PD | C | 2 | command-line argument parsing |
argv | ProgramOptions.hxx | MIT | C++ | 1 | command-line argument parsing |
audio | atomix | PD | C | 1 | wait-free atomic sound mixer |
audio | aw_ima.h | MIT | C/C++ | 1 | IMA-ADPCM audio decoder |
audio | btac1c | MIT | C/C++ | 1 | MS-IMA_ADPCM variant |
audio | chibi-xmplay | BSD3 | C | 2 | XM module playback library |
audio | Geneva | MIT | C/C++ | 1 | Library generating 8-bit waveforms of various kinds |
audio | miniaudio | PD | C/C++ | 1 | Audio playback and capture library |
audio | minimp3 | CC0 | C | 1 | Minimalistic MP3 decoder with sse/neon support |
audio | mojoAL | zlib | C | 1 | Full OpenAL 1.1 implementation |
audio | nanoalsa | MIT | C | 1 | Tiny PCM playback under Linux |
audio | pocketmod | MIT | C/C++ | 1 | ProTracker MOD file renderer |
audio | stb_hexwave | PD | C/C++ | 1 | audio waveform synthesizer |
audio | stb_vorbis | PD | C/C++ | 1 | decode ogg vorbis files from file/memory to float/16-bit signed output |
audio | TinySoundFont | MIT | C/C++ | 1 | SoundFont2 loader & synthesizer |
bench | picobench | MIT | C++ | 1 | microbenchmarking |
bench | ubench.h | PD | C/C++ | 1 | microbenchmarking |
c | errnoname | BSD0 | C | 2 | extended errno messages |
C | minicoro | PD/0MIT | C/C++ | 1 | Stackful cross-platform coroutine library |
c | stb_sprintf | PD | C/C++ | 1 | fast sprintf, snprintf for C/C++ |
cpp | filesystem | MIT | C++ | 1 | implementation of std::filesystem |
cpp | outcome | Apache2/Boost | C++ | 1 | outcome and result C++ containers |
crypt | ggentropy | ISC | C++ | 2 | cross platform entropy library |
crypt | Monocypher | PD | C | 2 | high-quality small cryptography library |
crypt | random3 | PD | C/C++ | 1 | Crypt-random generator |
crypt | TweetNaCl | PD | C | 2 | high-quality tiny cryptography library |
csv | CSVstream | MIT | C++ | 1 | CSV parser |
csv | Fast C++ CSV Parser | BSD | C++ | 1 | CSV parser |
csv | Rapidcsv | BSD | C++ | 1 | CSV parser |
csv | Vince's CSV Parser | MIT | C++ | 1 | CSV parser and serializer |
date | date | MIT | C++ | 1 | date and time libraries |
debug | dbgtools | zlib | C/C++ | 2 | cross-platform debug util libraries |
debug | debug-assert | zlib | C++ | 1 | modular assertion macro |
debug | debugbreak | BSD | C/C++ | 1 | programmatic debug break |
debug | loguru | PD | C++ | 1 | flexible logging |
debug | pempek_assert.cpp | WTFPLv2 | C++ | 2 | flexible assertions |
dev | EasyTab | PD | C/C++ | 1 | multi-platform tablet input |
dev | libue | MIT | C/C++ | 1 | Helper library for Linux device hot-plug event |
ds | aArray | PD | C | 1 | Arrays/strings: generic, safe |
ds | avl | PD | C/C++ | 2 | AVL tree |
ds | c-bool-value | WTFPLv2 | C/C++ | 1 | Simple and easy boolean values in standard c |
ds | cds_algo | PD | C/C++ | 1 | Collection of data structures (queue, stack, graph, heap...) |
ds | DG_dynarr.h | PD | C/C++ | 1 | typesafe dynamic arrays (like std::vector) for plain C |
ds | dynarr | PD | C | 1 | dynamic array container |
ds | DynaVar | GPL-3.0 | C++ | 1 | Object which can store any type of primitive data type |
ds | fifo_declare.h | LGPL2 | C/C++ | 1 | Thread/core safe FIFO |
ds | itlib | MIT | C++ | 1 | several C++11 standard-contaner-like libraries and helpers |
ds | jhr_skip_list | PD | C++ | 1 | Skip Lists |
ds | jrsl | PD | C/C++ | 1 | Skip Lists |
ds | klib | MIT | C/C++ | 2 | many 2-file libs: hash, sort, b-tree, etc |
ds | libintrusive | PD | C | 2 | Intrusive data structures |
ds | libpqueue | BSD | C/C++ | 2 | priority queue (heap) |
ds | LinkedList | MIT | C/C++ | 2 | Linked list C++ |
ds | mempool | MIT | C++ | 1 | Efficient minimal memory pool implementation for C++ |
ds | PackedArray | WTFPLv2 | C | 2 | memory-efficient array of elements with non-pow2 bitcount |
ds | selist | ISC | C/C++ | 2 | space-efficient linked-list |
ds | simclist | BSD | C/C++ | 2 | linked-list |
ds | stb_ds | PD | C/C++ | 1 | typesafe dynamic array and hash tables for C, will compile in C++ |
ds | uthash | BSD | C/C++ | 2 | several 1-header, 1-license-file libs: generic hash, list, etc |
engine | FWK1 | PD | C | 1 | 3D game framework in C |
engine | kit | PD | C | 1 | tiny library for making small games with big pixels |
engine | olcPixelGameEngine | BSD3 | C++ | 1 | Game engine |
engine | Punity | MIT | C | 1 | A tiny game engine in C |
file | dirent | MIT | C/C++ | 1 | dirent for Windows: retrieve file & dir info |
file | miniphysfs | zlib | C/C++ | 1 | Single-file port of PhysFS, a fs/zip abstraction |
file | tfile | MIT | C++ | 1 | FILE* wrapper does read-write-append-seek-close (Win/Mac/Unix) |
file | TinyDir | BSD | C | 1 | cross-platform directory reading (Win/POSIX/MinGW) |
file | whereami | WTFPLv2 | C/C++ | 2 | get path/filename of executable or module |
font | blit-fonts | ISC | C/C++ | 1 | bitmap font blitters |
font | ssfn.h | MIT | C/C++ | 1 | scalable/bitmap/pixmap font renderer |
font | stb_easy_font | PD | C/C++ | 1 | quick-and-dirty easy-to-deploy bitmap font for printing frame rate, etc |
font | stb_truetype | PD | C/C++ | 1 | parse, decode, and rasterize characters from truetype fonts |
game | raycastlib.h | CC0 + patent waiver | C/C++ | 1 | advanced raycasting rendering library, pure C99 with no dependencies, only 32bit int math |
game | stb_connected_components | PD | C/C++ | 1 | incrementally compute reachability on grids |
game | stb_herringbone_wang_tile | PD | C/C++ | 1 | herringbone Wang tile map generator |
game | stb_tilemap_editor | PD | C/C++ | 1 | embeddable tilemap editor |
hash | hash.c | PD | C | 2 | SHA1/SHA3/MD5 hashes |
hash | lonesha256 | PD | C | 1 | SHA256 implementation |
hash | PicoSHA2 | MIT | C++ | 1 | SHA256 implementation |
hash | xxHash | BSD | C/C++ | 2 | fast hash function |
image | bitmap | MIT | C++ | 1 | Bitmap decoder and utilities |
image | cro_mipmap.h | PD | C/C++ | 1 | average, min, max mipmap generators |
image | framepacker | MIT | C++ | 1 | texture bin packing algorithm |
image | stb_image | PD | C/C++ | 1 | image loading/decoding from file/memory: JPG, PNG, TGA, BMP, PSD, GIF, HDR, PIC |
image | stb_image_resize2 | PD | C/C++ | 1 | resize images larger/smaller with good quality |
image | stb_image_write | PD | C/C++ | 1 | image writing to disk: PNG, TGA, BMP |
image | stb_perlin | PD | C/C++ | 1 | perlin's revised simplex noise w/ different seeds |
image | stb_rect_pack | PD | C/C++ | 1 | simple 2D rectangle packer with decent quality |
image | tiffloader | PD | C | 2 | TIFF image loader |
image | EXR miniexr | PD | C++ | 2 | OpenEXR writer, needs header file |
image | EXR tinyexr | BSD | C/C++ | 1 | EXR image read/write, uses miniz internally |
image | GIF gif.h | PD | C++ | 1 | animated GIF writer (can only include once) |
image | GIF gif_load | PD | C/C++ | 1 | (animated) GIF reader |
image | GIF jo_gif.cpp | PD | C++ | 1 | animated GIF writer (CPP file can also be used as H file) |
image | JPG jpeg-compressor | PD | C++ | 2 | 2-file JPEG compress, 2-file JPEG decompress |
image | JPG NanoJPEG | MIT | C/C++ | 1 | JPEG decoder |
image | JPG tiny_jpeg.h | PD | C/C++ | 1 | JPEG encoder |
image | JPG EXIF easyexif | BSD2 | C++ | 2 | EXIF metadata extractor for JPEG images |
image | JPG EXIF TinyEXIF | BSD | C++ | 2 | Parse EXIF data from JPEG (XMP w/ TinyXML2 lib) |
image | PDF PDFgen | PD | C | 2 | PDF writer |
image | PNG lodepng | zlib | C/C++ | 2 | PNG encoder/decoder |
image | PNG picopng.cpp | zlib | C++ | 2 | tiny PNG loader |
image | PNG TinyPngOutput | LGPLv3 | C/C++ | 2 | PNG writer |
image | PNM PNM | Apache2 | C++ | 1 | PBM, PGM and PPM reader and writer |
image | SVG nanoSVG | zlib | C/C++ | 1 | 1-file SVG parser; 1-file SVG rasterizer |
image | WEBP jebp | 0MIT | C/C++ | 1 | Single header WebP decoder |
ini | inih | BSD | C/C++ | 2 | .ini file parser |
json | ajson | Boost | C++ | 1 | JSON serialize & deserialize w/ STL support |
json | cJSON | MIT | C/C++ | 1 | JSON parser |
json | cJSON | MIT | C/C++ | 1 | JSON parser |
json | jsmn | MIT | C | 1 | Minimalistic JSON parser |
json | json-build | MIT | C/C++ | 1 | JSON serializer |
json | json.h | PD | C/C++ | 1 | JSON parser |
json | json.hpp | MIT | C++ | 1 | JSON parse, serialize, deserialize |
json | jsonc | MIT | C/C++ | 1 | extremely fast and extremely small (~60 SLoC) JSON parser |
json | jzon.h | MIT | C++ | 2 | JSON parser |
json | parson | MIT | C/C++ | 2 | JSON parser and serializer |
json | PicoJSON | BSD | C++ | 1 | JSON parse/serializer |
json | sjson | BSD2 | C | 1 | JSON encode/decoder |
logic | FFSM2 | MIT | C++ | 1 | flat FSM |
logic | HFSM2 | MIT | C++ | 1 | hierarchical FSM |
math | amoeba | MIT | C/C++ | 1 | constraint solver (Cassowary) w/Lua binding |
math | cds_spline | PD | C/C++ | 1 | Spline utils |
math | ceval-single-header | MIT | C/C++ | 1 | A single-header library for parsing and evaluation of arithmetic expressions |
math | Clipper | Boost | C++ | 2 | line & polygon clipping & offsetting |
math | Delaunay | BSD3 | C++ | 2 | 2D and 3D Delaunay triangulation |
math | df | PD | C/C++ | 1 | find voronoi region in linear time of size of lattice |
math | dvector | PD | C | 1 | 2D/3D vector/quaternion/matrix math library |
math | ExprTk | MIT | C++ | 1 | Runtime mathematical expression parser and evaluation engine. |
math | fft | PD | C++ | 1 | Fast Fourier Transform |
math | HMM Toolkit | GPL2 | C/C++ | 1 | Discrete and continuous Hidden Markov Models (DHMM, CHMM) |
math | jc_voronoi | MIT | C/C++ | 1 | find voronoi regions on float/double data |
math | linmath.h | WTFPLv2 | C | 1 | vector library |
math | m_math.h | zlib | C/C++ | 1 | math with C/OpenCL portability |
math | nanoflann | BSD | C++ | 1 | build KD trees for point clouds |
math | nv_voronoi.h | PD | C/C++ | 1 | find voronoi regions on lattice w/ integer inputs |
math | omm | MIT | C++ | 1 | Template open multi-methods |
math | OpenNL | BSD3 | C++ | 2 | linear and eigen solvers |
math | par_msquares | MIT | C/C++ | 1 | convert (binarized) image to triangles |
math | par_shapes | MIT | C/C++ | 1 | generate various 3d geometric shapes |
math | par_streamlines | MIT | C/C++ | 1 | tessellate wide lines and curves with shading attributes |
math | PoissonGenerator.h | MIT | C++ | 1 | Poisson disk points generator (disk or rect) |
math | PolyPartition | MIT | C++ | 2 | polygon triangulation, partitioning |
math | precision | PD | C++ | 3 | Arbitrary-precision integer and rational arithmetic |
math | prns.h | PD | C/C++ | 1 | seekable pseudo-random number sequences |
math | rfft.h | PD | C/C++ | 1 | Fast Fourier Tranform for arbitrary array sizes |
math | sdf.h | MIT | C/C++ | 1 | compute signed-distance field from antialiased image |
math | ShaderFastLibs | MIT | C++ | 1 | (also HLSL) approximate transcendental functions optimized for shaders (esp. GCN) |
math | simple_linear_regression | MIT | C/C++ | 1 | Simple linear regression |
math | simrank.hpp | MIT | C++ | 2 | SimRank graph similarity algorithm |
math | sobol.h | PD | C/C++ | 1 | sobol & stratified sampling sequences |
math | Statistics-Tool-Box | PD | C/C++ | 1 | Statistical functions |
math | stb_divide | PD | C/C++ | 1 | more useful 32-bit modulus |
math | SummedAreaTable | MIT | C++ | 1 | Summed-Area Table generation and sum/avg queries |
math | TinyExpr | zlib | C | 2 | evaluation of math expressions from strings |
math | Tomas Akenine-Moller snippets | PD | C/C++ | 2 | various 3D intersection calculations, not lib-ified |
math | vmath | PD | C | 1 | Vector/matrix library |
math | Voxelizer | MIT | C/C++ | 1 | convert triangle mesh to voxel triangle mesh |
math | xatlas | MIT | C++ | 2 | mesh parameterization |
mem | buddy_alloc | BSD0 | C | 1 | buddy memory allocator |
mem | stb_leakcheck | PD | C/C++ | 1 | quick-and-dirty malloc/free leak-checking |
mem | wb_alloc | PD | C/C++ | 1 | custom allocators in a single-header |
mesh | cgltf | MIT | C | 1 | glTF 2.0 file loader |
mesh | fast_obj.h | MIT | C | 1 | wavefront OBJ file loader |
mesh | m3d.h | MIT | C/C++ | 1 | Model 3D importer/exporter (with Blender, Goxel, WebGL JS and assimp integration) |
mesh | objzero | MIT | C | 2 | wavefront OBJ file loader |
mesh | qll_q3.h | WTFPLv2 | C++ | 1 | Quake3 BSP loader |
mesh | tinyobjloader-c | MIT | C | 1 | wavefront OBJ file loader |
mesh | tinyobjloader | MIT | C++ | 1 | wavefront OBJ file loader |
mesh | tinyply | PD | C++ | 2 | PLY mesh file loader |
mesh | tk_objfile | MIT | C/C++ | 1 | OBJ file loader |
misc | ASAP | MIT | C++ | 1 | library for parsing, printing, iterating and operating on dates. |
misc | CLM_LIBS | PD | C | 1 | Diverse utilities |
misc | Color-Toolkit | GPL2 | C/C++ | 1 | Color conversion utils (RGB, XYZ, Lab, CIE76, CIE94 and CIEDE200) |
misc | cpp-generators | BSD | C++ | 1 | generators in C++ |
misc | ebnn.h | MIT | C | 1 | BNN (Binarized Neural Networks) |
misc | h.h | GPL3 | C/C++ | 1 | Diverse utilities |
misc | Hedley | PD | C/C++ | 1 | compiler portability, optimization, static analysis, etc. |
misc | MakeID.h | PD | C++ | 1 | allocate/deallocate small integer IDs efficiently |
misc | mmu | MIT | C | 2 | memory management and data structure toolset |
misc | openGA | MPL-2.0 | C++ | 1 | A C++ Generic Algorithm solver library |
misc | PlusCallback | zlib | C++ | 1 | function/method callbacks |
misc | process.h | PD | C/C++ | 1 | process control API |
misc | QR-Code-generator | MIT | C | 2 | QR Code generator |
misc | qsort | MIT | C | 1 | qsort algorithm as a C macro |
misc | scogem.c | PD | C | 2 | URL parser |
misc | sili-toolchain | PD | C/C++ | 1 | C toolchain for modern C programming, strings, arrays, files, threading, ect |
misc | smallxrm.c | PD | C | 2 | Implementation of X resource manager |
misc | stb_include | PD | C/C++ | 1 | implement recursive #include support, particularly for GLSL |
misc | stmr | MIT | C | 2 | extract English word stems |
misc | x.h | Mulan2 | C/C++ | 1 | cross-platform C/C++ utilities |
nav | m_path_finding.h | zlib | C/C++ | 1 | floodfill-based path finding |
nav | micropather | zlib | C++ | 2 | pathfinding with A* |
net | civetweb | MIT | C/C++ | 2 | HTTP server, fork of Mongoose |
net | cpp-httplib | MIT | C/C++ | 1 | cross-platform HTTP server/client |
net | enet | MIT | C/C++ | 1 | reliable UDP networking library |
net | EWS | BSD | C/C++ | 1 | HTTP server |
net | happyhttp | zlib | C++ | 2 | HTTP client requests |
net | libcluon | MPL-2.0 | C++ | 1 | cross-platform socket wrapper and data marshalling with native implementations for Protobuf, LCM/ZCM, JSON, and MsgPack serialization/deserialization |
net | librg | BSD3 | C/C++ | 1 | world/entity synchronization multiplayer library |
net | LUrlParser | MIT | C++ | 2 | lightweight URL & URI parser RFC 1738, RFC 3986 |
net | mongoose | GPLv2 | C/C++ | 2 | HTTP server |
net | netq | MIT | C | 1 | Reliable datagram library |
net | par_easycurl.h | MIT | C/C++ | 1 | cURL wrapper |
net | simpletls.c | PD | C | 2 | Function to create a socket and connect to a remote server with TLS |
net | swrap | PD | C | 1 | TCP and UDP socket wrapper |
net | tiniest-analytics | MIT | C++ | 2 | Cross-platform analytics for games (using Google Analytics <4) |
net | tiny-MQTT-c | PD | C | 2(4) | Small implementation of (some of) the MQTT protocol in C |
net | tlse | PD/BSD2 | C | 2 | TLS v1.0, 1.2, 1.3 and DTLS 1.0, 1.2 implementations |
net | webster | Apache2 | C++ | 2 | Standalone HTTP server/client |
net | yocto | PD | C/C++ | 2 | non-production-use HTTP server |
net | zed_net | PD | C/C++ | 1 | cross-platform socket wrapper |
net | znet | MIT | C/C++ | 1 | cross-platform networking w/ Lua binding |
pack | dmc_unrar | GPLv2+ | C/C++ | 1 | RAR file decompression |
pack | fastlz | MIT | C/C++ | 2 | fast but larger LZ compression |
pack | lz4 | BSD | C/C++ | 2 | fast but larger LZ compression |
pack | microtar | MIT | C/C++ | 2 | lightweight tar library |
pack | miniz.c | MIT | C/C++ | 1 | compression, decompression, ZIP file, PNG writing |
pack | nibrans | PD | C | 1 | adaptive rANS library |
pack | pithy | BSD | C/C++ | 2 | fast but larger LZ compression |
pack | rle | MIT | C | 1 | run-length en/decoder |
pack | stb_dxt | PD | C/C++ | 1 | real-time DXT compressor |
parse | cmp | MIT | C/C++ | 2 | MessagePack parser and serializer |
parse | cpp-peglib | MIT | C/C++ | 1 | PEG (Parsing Expression Grammars) library |
parse | html-parse.c | GPL | C | 2 | HTML parser (wget) |
parse | SLRE | GPLv2 | C/C++ | 1 | regular expression matcher |
parse | stb_c_lexer | PD | C/C++ | 1 | simplify writing parsers for C-like languages |
parse | tok | MIT | C | 1 | Configurable tokenizer |
parse | tomlplusplus | MIT | C++ | 1 | TOML parser and serializer |
parse | udisasm | MIT | C/C++ | 1 | extremely small disassembler for ARMv8.2 AArch64 (~65k) |
parse | Unformat | PD | C++ | 1 | parses formatted strings (reverse of std::format) |
prng | random | MIT | C++ | 1 | convenient API for random |
prng | ranxoshi256 | PD | C | 1 | xoshiro256 algorithm |
prng | SimplexNoise | BSD2 | C++ | 1 | Collection of noise generators |
profile | MicroProfile | PD | C++ | 2-4 | CPU (and GPU?) profiler, 1-3 header files, uses miniz internally |
profile | prof | MIT | C/C++ | 1 | profiler for Linux |
profile | Remotery | Apache2 | C/C++ | 2 | CPU/GPU profiler Win/Mac/Linux, using web browser for viewer |
raster | canvas_ity | ISC | C++ | 1 | 2D rasterizer |
regex | Remimu | CC0 | C/C++ | 1 | regex engine |
script | Duktape | MIT | C | 2 | embeddable JavaScript engine |
script | LIL | zlib | C/C++ | 2 | interpreter for a Tcl-like scripting language |
script | lualite | MIT | C++ | 1 | generate Lua bindings in C++ |
script | minilua | MIT | C/C++ | 1 | Single-file port of Lua scripting language |
script | MY-BASIC | MIT | C | 2 | interpreter for a BASIC dialect scripting language |
script | Picol | BSD | C/C++ | 1 | interpreter for a Tcl-like scripting language |
script | s7 | BSD | C/C++ | 2 | interpreter for a subset of Scheme (R5RS/R7RS) |
script | xpl | WTFPLv2 | C | 1 | X Programming Language |
serial | archive | PD | C++ | 1 | binary serialize & deserlize w/ STL support |
serial | blob_tree | MIT | C++ | 1 | Binary tree serializer |
serial | cista | MIT | C++ | 1 | cross-platform high performance zero copy C++17 serialization/deserialization |
serial | libcluon | MPL-2.0 | C++ | 1 | cross-platform data serialization/deserialization with native implementations for Protobuf, LCM/ZCM, JSON, and MsgPack |
serial | qserial | BSD3 | C++ | 1 | Schema-driven serialization library |
serial | Serialization helper | WTFPLv2 | C | 1 | Serialization helper |
serial | visit_struct | Boost | C++ | 2 | struct-field reflection |
string | csplit | MIT | C/C++ | 1 | String splitting and processing single-header library |
string | dfa | MIT | C/C++ | 2 | fast UTF-8 decoder (need a header file) |
string | gb_string.h | PD | C/C++ | 1 | dynamic strings |
string | ggformat | ISC | C++ | 2 | printf replacement |
string | inja.hpp | MIT | C++ | 1 | template engine |
string | levenshtein | MIT | C/C++ | 2 | compute edit distance between two strings |
string | Obfuscate | PD | C++ | 1 | Guaranteed compile-time string literal obfuscation library for C++14 |
string | Str.h | PD | C++ | 1 | Simple C++ string type with an optional local buffer |
string | str | BSD | C | 2 | Yet another string library for C language |
string | str_view.hpp | MIT | C++ | 1 | null-termination-aware string-view class |
string | tinyformat | Boost | C++ | 1 | typesafe printf |
string | utf8 | PD | C/C++ | 1 | UTF-8 string library |
svg | SimpleSVG | BSD3 | C++ | 1 | Easy to use SVG library |
sys | cpuid | ?? | C/C++ | 1 | cross-platform cpuid intrinsic |
sys | doops | PD | C | 1 | Event loop library |
sys | endianness.h | PD | C | 1 | endianness conversion and detection |
sys | iathook | ?? | C/C++ | 1 | import address table hooking library (x86/x64,w32) |
sys | JArgsParser | MIT | C++ | 1 | arguments parser |
sys | openmodal | MIT | C | 1 | Native file modals |
sys | rang | PD | C++ | 1 | cross-platform colored console text |
sys | xproc | MIT | C++ | 2 | Foreign Process Information |
thread | bikeshed.h | MIT | C/C++ | 1 | cross-platform lock free fixed memory hierarchical work scheduler |
thread | cds_job | PD | C++ | 1 | lock-free job queue |
thread | cds_sync | PD | C/C++ | 1 | Collection of synchronization primitives |
thread | TinyCThread | zlib | C/C++ | 2 | cross-platform implementation of the C11 Threads API |
thread | TinyThread++ | zlib | C++ | 2 | cross-platform implementation of the C++11 Threads API |
ui | Clay | Zlib | C/C++ | 1 | High performance 2D UI layout library |
ui | dear imgui | MIT | C++ | 9 | an immediate-mode GUI formerly named "ImGui"; 3rd-party C wrapper |
ui | libcmdf | PD | C | 1 | a small library for writing CLI applications |
ui | linenoise | BSD | C/C++ | 2 | terminal readline w/ history etc |
ui | nuklear | PD | C/C++ | 1 | minimal GUI toolkit |
ui | stb_textedit | PD | C/C++ | 1 | guts of a text editor for games etc implementing them from scratch |
ui | tinyfiledialogs | ZLIB | C/C++ | 2 | modal dialogs inc. file open/save (Win/Mac/Linux) |
ui | wcwidth9 | Apache2 | C | 1 | platform independent wcwidth with full unicode 9 support |
ui | webview | MIT | C/C++ | 1 | cross-platform webview library |
unit | catch2 | Boost | C++ | 1 | unit testing |
unit | catch | Boost | C++ | 1 | unit testing |
unit | clove-unit | MIT | C | 1 | unit testing |
unit | doctest | MIT | C++ | 1 | unit testing |
unit | fctx | BSD | C/C++ | 1 | unit testing |
unit | greatest | iSC | C | 1 | unit testing |
unit | hippomocks | LGPL | C++ | 1 | unit testing |
unit | labrat | PD | C/C++ | 1 | unit testing |
unit | minctest | zlib | C | 1 | unit testing |
unit | munit | MIT | C | 1 | unit testing |
unit | picotest | MIT | C/C++ | 1 | unit testing |
unit | Rexo | PD | C/C++ | 1 | framework for C89/C++ featuring automatic registration of tests and a polished API |
unit | SPUT | BSD | C/C++ | 1 | unit testing |
unit | trompeloeil | Boost | C++ | 1 | unit testing |
unit | utest.h | PD | C/C++ | 1 | unit testing |
unit | utest | MIT | C/C++ | 1 | unit testing |
unit | walter | PD | C | 1 | unit testing |
uuid | uuid4 | MIT/WTFPLv2 | C/C++ | 2 | UUID v4 generator |
uuid | uuid_h | zlib | C/C++ | 1 | UUID generator |
vector | algebra3.h | PD | C++ | 1 | vector utilities for 2, 3, and 4 element vectors, all inline |
vector | ccVector.h | PD | C/C++ | 1 | Vector, quaternion and matrix math |
vector | Handmade Math | PD | C/C++ | 1 | vector math |
vector | hypatia | MIT | C | 1 | vector/matrix/quaternion math |
vector | linalg.h | PD | C++ | 1 | vector/matrix/quaternion math |
vector | linalg | ISC | C/C++ | 1 | vector/matrix/quaternion math |
video | jo_mpeg / (converted to C) | PD | C/C++ | 1 | MPEG file writer |
video | pl_mpeg | MIT | C | 1 | MPEG1 video and audio decoder |
xml | pugixml | MIT | C++ | 2 | light-weight C++ XML processing library |
xml | tinyxml2 | zlib | C++ | 2 | simple, small, efficient, C++ XML parser |
xml | yxml | MIT | C | 2 | small, fast and correct XML parser |
yaml | mini-yaml | MIT | C++ | 2 | YAML parser and serializer |
Yes. For historical reasons, this is the preferred link.
We draw the line arbitrarily at 2 files at most. Some of these libraries are still easy to drop into your project and build, so you might still be ok with them. But since people come to stb for single-file public domain libraries, we feel that starts to get too far from what we do here.
Probably because we don't know about it, feel free to submit a pull request or issue (it can be your own library or somebody else's). But we might not include it for various other reasons, including subtleties of what is 'minimal other dependencies' and subtleties about what is 'lightweight'.
For the API column, "C" means C only, "C++" means C++ only, and "C/C++" means C/C++ usable
from either; some files may require building as C or C++ but still qualify as "C/C++" as
long as the header file uses extern "C"
to make it work. (In some cases, a header-file-only
library may compile as both C or C++, but produce an implementation that can only be called from
one or the other, because of a lack of use of extern "C"
; in this case the table still qualifies it
as C/C++, as this is not an obstacle to most users.)
Please note that every file that must be included in a user's project counts; a header and a source file is 2 files, but a header file, source file, and LICENSE (if the license isn't in the source file) is 3 files, and won't be accepted, because it's not 2 files. But actually 'LICENSE' is a problem for just dropping the library in a source tree anyway, since it's not scoped to just the library, so library authors are encouraged to include the license in the source file and not require a separate LICENSE.
Come on.