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.
- 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: clibs, dr_libs, dyeo.h, final_game_tech (C,C++), gb, jar, libs, maratis, minilibs, mmx, noc, par, pico_headers, px (C++), rjm, snippets, sokol, sts, sweet.hpp (C++), tinybits (C,C++), tinyheaders (C,C++), yocto-gl (C++),
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 | daisy | MIT | C++ | 1 | 2D Graphics and text |
2d | final_tiletrace.hpp | MIT | C++ | 1 | tilemap contour tracing |
2d | Immediate2D | PD | C++ | 2 | zero-configuration, immediate-mode 2D graphics for Windows |
2d | m_dist.h | zlib | C/C++ | 1 | fast distance transform and Voronoi |
2d | m_image.h | zlib | C/C++ | 1 | image processing routines |
2d | m_raster.h | zlib | C/C++ | 1 | simple rasterizer |
2d | noc_turtle | MIT | C/C++ | 2 | procedural graphics generator |
2d | pico_gfx.h | PD/zlib | C | 1 | Graphics library (sokol_gfx) |
2d | pico_gl.h | PD/zlib | C | 1 | Graphics library (OpenGL) |
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 | final_dynamic_opengl.h | MIT | C | 1 | opengl loader |
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 | px_render.h | MIT | C++ | 1 | cross-platform, Multithreaded, command based, 3D render API (GL/GLES) info |
3d | rjm_raytrace.h | PD | C/C++ | 1 | minimalistic SSE packet raytracer for offline baking |
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 | sokol_gfx.h | MIT | C/C++ | 1 | cross-platform 3D API wrapper (GLES2+3/GL3/D3D11/Metal) |
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 |
3d | yocto_symrigid.h | MIT | C/C++ | 1 | rigid body simulator (sequential impulse/PGS) with support for concave objects |
3d | yocto_trace.h | MIT | C/C++ | 1 | physically-based unidirectional path tracer w/ MIS for direct lights |
ai | Genann | zlib | C/C++ | 2 | simple neural networks (ANN) |
ai | KANN | MIT | C/C++ | 2 | automatic differentiation (2 files) |
app | app.h | PD | C/C++ | 1 | Windows-only-but-meant-to-be-cross-platform game-ish framework |
app | final_platform_layer.h | MIT | C | 1 | platform abstraction |
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 | args.h | PD/MIT | C | 1 | argparse-style argument parser |
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 | getops.hpp | LGPL3 | C++ | 1 | command-line argument parsing for C++ 11 and beyond |
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 | dr_flac | PD | C/C++ | 1 | FLAC audio decoder |
audio | dr_wav | PD | C/C++ | 1 | WAV audio loader |
audio | Geneva | MIT | C/C++ | 1 | Library generating 8-bit waveforms of various kinds |
audio | jar-mod | PD | C | 1 | MOD playback library |
audio | jar-xm | WTFPLv2 | C | 1 | XM playback library |
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 | sts_mixer | PD | C/C++ | 1 | simple stereo audio mixer |
audio | tinysound | zlib | C/C++ | 1 | direct sound audio mixer & WAV loader |
audio | TinySoundFont | MIT | C/C++ | 1 | SoundFont2 loader & synthesizer |
audio | wav.h | PD/MIT | C | 1 | .wav file encoding and decoding |
base | pico_b64.h | PD/zlib | C | 1 | Base64 en/decoder |
bench | benchmark.hpp | LGPL3 | C++ | 1 | micro benchmark library for C++11 and beyond |
bench | picobench | MIT | C++ | 1 | microbenchmarking |
bench | ubench.h | PD | C/C++ | 1 | microbenchmarking |
c | cor.h | PD/MIT | C | 1 | coroutines |
c | errnoname | BSD0 | C | 2 | extended errno messages |
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 | tiny-AES-c | PD | C | 2 | Small portable AES128/192/256 in C |
crypt | tiny-ECDH-c | PD | C | 2 | Small portable Elliptic-Curve Diffie-Hellman in C |
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 | log.hpp | LGPL3 | C++ | 1 | multi threaded simple C++11 and beyond logger |
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 | bitset.hpp | LGPL3 | C++ | 1 | Compile time sided bit set for C++11 and beyond |
ds | c-bool-value | WTFPLv2 | C/C++ | 1 | Simple and easy boolean values in standard c |
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 | fector.hpp | LGPL3 | C++ | 1 | A fixed size std::vector like structure |
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 | lstr.h | PD/MIT | C | 1 | length-bounded strings |
ds | mempool | MIT | C++ | 1 | Efficient minimal memory pool implementation for C++ |
ds | minilibs | PD | C | 2 | two-file binary tress (also regex, etc) |
ds | PackedArray | WTFPLv2 | C | 2 | memory-efficient array of elements with non-pow2 bitcount |
ds | px_mem.h | MIT | C++ | 1 | Safe memory managemnt constructs for C++ |
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 | trie.hpp | LGPL3 | C++ | 1 | A trie (prefix tree) implementation for C++11 |
ds | uthash | BSD | C/C++ | 2 | several 1-header, 1-license-file libs: generic hash, list, etc |
ecs | pico_ecs.h | PD/zlib | C | 1 | Pure and simple ECS |
engine | FWK1 | PD | C | 1 | Game engine |
engine | olcPixelGameEngine | BSD3 | C++ | 1 | Game engine |
eval | mathe.h | PD/MIT | C | 1 | mathematical expression parsing |
file | DG_misc.h | PD | C/C++ | 1 | Daniel Gibson's stb.h-esque cross-platform helpers: path/file, strings |
file | dirent | MIT | C/C++ | 1 | dirent for Windows: retrieve file & dir info |
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 | tinyfiles | zlib | C/C++ | 1 | cross-platform directory reading (Win/Mac/Unix) |
file | whereami | WTFPLv2 | C/C++ | 2 | get path/filename of executable or module |
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 | rjm_texbleed.h | PD | C/C++ | 1 | Fills in the color of pixels where alpha==0 |
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 |
ini | ini.h | PD | C/C++ | 1 | .ini file parser |
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 | 1 | Fast JSON parser |
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 |
log | pico_log.h | PD/zlib | C | 1 | Flexible logging framework |
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 | 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 | gm.h | PD/MIT | C | 1 | vector/matrix/quaternion math |
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 | pico_hit.h | PD/zlib | C | 1 | 2D collision detection (SAT) and ray casting |
math | pico_math.h | PD/zlib | C | 1 | 2D math library for games |
math | pico_qt.h | PD/zlib | C | 1 | Quadtree library |
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 | rjm_mc.h | PD | C/C++ | 1 | marching cubes triangulator |
math | rnd.h | PD | C/C++ | 1 | pseudo-random number generation |
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 | tiny-bignum-c | PD | C | 2 | Small portable multiple-precision unsigned integer arithmetic in C |
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 |
math | yocto_bvh.h | MIT | C/C++ | 1 | ray-casting and closest-element queries of bounding-volume hierarchy |
math | yocto_shape.h | MIT | C/C++ | 1 | shape generation, tesselation, normals, etc. |
mem | buddy_alloc | BSD0 | C | 1 | buddy memory allocator |
mem | final_memory.h | MIT | C | 1 | heap memory handler |
mem | stb_leakcheck | PD | C/C++ | 1 | quick-and-dirty malloc/free leak-checking |
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 |
mesh | yocto_obj.h | MIT | C/C++ | 1 | wavefront 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 | ll.h | PD/MIT | C | 1 | cross-platform library loading |
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 | EWS | BSD | C/C++ | 1 | HTTP server |
net | happyhttp | zlib | C++ | 2 | HTTP client requests |
net | http | PD | C/C++ | 1 | HTTP get/post |
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 | LUrlParser | MIT | C++ | 2 | lightweight URL & URI parser RFC 1738, RFC 3986 |
net | mm_web.h | BSD | C/C++ | 1 | lightweight webserver, fork of webby |
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 | sts_net | PD | C/C++ | 1 | cross-platform socket wrapper (socket sets and packet API) |
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 | udp.h | PD/MIT | C | 1 | cross-platform udp networking |
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 | RLE library |
pack | rle | MIT | C | 1+1 | extremely simple run-length encoder/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 | minilibs | PD | C | 2 | two-file regex (also binary tree, etc) |
parse | mm_lexer.h | zlib | C/C++ | 1 | C-esque language lexer |
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 | tinymemfile | zlib | C++ | 1 | fscanf on in-memory files |
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 |
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 |
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 | 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 | dt.h | PD/MIT | C | 1 | datatag serializer/deserializer (superset of JSON) |
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 | stream.h | PD/MIT | C | 1 | byte streams |
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 | DG_misc.h | PD | C/C++ | 1 | Daniel Gibson's stb.h-esque cross-platform helpers: path/file, strings |
string | format.hpp | LGPL3 | C++ | 1 | dlang inspired typesafe string formatting |
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 | strpool.h | PD | C/C++ | 1 | string interning |
string | tiny-regex-c | PD | C | 2 | Small portable regex in C |
string | tiny-regex-mod | PD | C | 1 | Tiny regular expressions library |
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 | mm_sched.h | zlib | C/C++ | 1 | cross-platform multithreaded task scheduler based on enkiTS |
thread | px_sched.h | MIT | C++ | 1 | cross-platform task scheduler info |
thread | thread.h | PD | C/C++ | 1 | cross-platform thread 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 |
time | pico_time.h | PD/zlib | C | 1 | Time management library |
time | sokol_time.h | MIT | C/C++ | 1 | cross-platform time measurement |
time | tinytime | zlib | C/C++ | 1 | quick-and-dirty time elapsed time |
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 | noc_file_dialog.h | MIT | C/C++ | 1 | file open/save dialogs (Win/Mac/Linux) |
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 | pico_unit.h | PD/zlib | C | 1 | Unit testing framework |
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 | test.h | PD/MIT | 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 |
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 | gb_math | PD | C/C++ | 1 | Vector, quaternion and matrix math w/o math.h |
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 |
vector | mm_vec.h | BSD | C/C++ | 1 | SIMD vector 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 | final_xml.h | MIT | C | 1 | xml parser |
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 |
We accept submissions for new libraries and corrections if information for a library above 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.
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.