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. However, I 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 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)
Exceptions will be allowed for good reasons.
Also you might be interested in other related, but different lists:
- clib: list of (mostly) small single C functions (licenses not listed)
- CCAN: package of lots of shareable C functions (mixed licenses)
Public domain single-file libraries usable from C and C++ are in bold. Other libraries are either non-public domain, or two files, or not usable from both C and C++, or all three. Libraries of more than two files are mostly forbidden.
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.)
tag | library | license | API | files | description |
---|---|---|---|---|---|
2d | blendish | MIT | C/C++ | 1 | blender-style widget rendering using NanoVG |
2d | Cimg | CeCILL/CeCILL-C | C++ | 1 | image processing toolkit (60K LoC) |
2d | Immediate2D | public domain | C++ | 2 | zero-configuration, immediate-mode 2D graphics for Windows |
2d | noc_turtle | MIT | C/C++ | 2 | procedural graphics generator |
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 | tigr | public domain | 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 |
2d | C-Turtle | MIT | C++ | 1 | Port of Python's Turtle to C++ |
2d | cgl | MIT | C | 2 | C Game Library |
2d | daisy | MIT | C++ | 1 | 2D Graphics and text |
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_path_finding.h | zlib | C/C++ | 1 | floodfill-based path finding |
2d | m_raster.h | zlib | C/C++ | 1 | simple rasterizer |
2d | pico_gfx.h | PD/zlib | C | 1 | Graphics library (sokol_gfx) |
2d | pico_gl.h | PD/zlib | C | 1 | Graphics library (OpenGL) |
2d | scalable-font2 | MIT | C | 1 | Scalable Font renderer + specification |
2d | si_normalmap | PD | C | 1 | Image to Normal Map generator |
3d | debug-draw | public domain | C++ | 1 | API-agnostic immediate-mode debug rendering |
3d | mikktspace | zlib | C/C++ | 2 | compute tangent space for normal mapping |
3d | px_render.h | MIT | C++ | 1 | cross-platform, Multithreaded, command based, 3D render API (GL/GLES) info |
3d | rjm_raytrace.h | public domain | C/C++ | 1 | minimalistic SSE packet raytracer for offline baking |
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 | Swarmz | public domain | C++ | 1 | swarming/flocking algorithm |
3d | tinygizmo | public domain | C++ | 2 | gizmo objects for interactively editing 3d transformations |
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 |
3d | model3d | MIT | C | 1 | 3D model format specification |
3d | lightmapper | public domain | C/C++ | 1 | use your OpenGL renderer to offline bake lightmaps |
3d | seamoptimizer | public domain | C/C++ | 1 | modify lightmap data to hide seams |
3d | Vertex Cache Optimizer | public domain | C/C++ | 1 | vertex cache optimization of meshes |
3d | Simple OpenGL Loader | MIT | C/C++ | 1 | extensible, cross-platform OpenGL loader |
AI | Genann | zlib | C/C++ | 2 | simple neural networks (ANN) |
AI | KANN | MIT | C/C++ | 2 | automatic differentiation (2 files) |
AI | micropather | zlib | C++ | 2 | pathfinding with A* |
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 | public domain | 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 | public domain | C | 2 | command-line argument parsing |
argv | ProgramOptions.hxx | MIT | C++ | 1 | command-line argument parsing |
audio | aw_ima.h | MIT | C/C++ | 1 | IMA-ADPCM audio decoder |
audio | btac1c | MIT | C/C++ | 1 | MS-IMA_ADPCM variant |
audio | Geneva | MIT | C/C++ | 1 | Library generating 8-bit waveforms of various kinds |
audio | minimp3 | CC0 | C | 1 | Minimalistic MP3 decoder with sse/neon support |
audio | pocketmod | MIT | C/C++ | 1 | ProTracker MOD file renderer |
audio | tinysound | zlib | C/C++ | 1 | direct sound audio mixer & WAV loader |
audio | TinySoundFont | MIT | C/C++ | 1 | SoundFont2 loader & synthesizer |
audio | atomix | PD | C | 1 | wait-free atomic sound mixer |
audio | chibi-xmplay | BSD3 | C | 2 | XM module playback library |
audio | jar-mod | PD | C | 1 | MOD playback library |
audio | jar-xm | WTFPLv2 | C | 1 | XM playback library |
audio | mojoAL | zlib | C | 1 | Full OpenAL 1.1 implementation |
audio | nanoalsa | MIT | C | 1 | Tiny PCM playback under Linux |
audio | wav.h | PD/MIT | C | 1 | .wav file encoding and decoding |
audio | dr_flac | public domain | C/C++ | 1 | FLAC audio decoder |
audio | dr_wav | public domain | C/C++ | 1 | WAV audio loader |
audio | miniaudio | public domain | C/C++ | 1 | Audio playback and capture library |
audio | sts_mixer | public domain | C/C++ | 1 | simple stereo audio mixer |
b64 | pico_b64.h | PD/zlib | C | 1 | Base64 en/decoder |
crypt | ggentropy | ISC | C++ | 2 | cross platform entropy library |
crypt | Monocypher | public domain | C | 2 | high-quality small cryptography library |
crypt | TweetNaCl | public domain | C | 2 | high-quality tiny 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 |
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 | public domain | C++ | 1 | flexible logging |
debug | pempek_assert.cpp | WTFPLv2 | C++ | 2 | flexible assertions |
ds | avl | public domain | 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 | 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 | itlib | MIT | C++ | 1 | several C++11 standard-contaner-like libraries and helpers |
ds | klib | MIT | C/C++ | 2 | many 2-file libs: hash, sort, b-tree, etc |
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 | minilibs | public domain | 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 | 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 |
ds | dynarr | PD | C | 1 | dynamic array container |
ds | fifo_declare.h | LGPL2 | C/C++ | 1 | Thread/core safe FIFO |
ds | jhr_skip_list | PD | C++ | 1 | Skip Lists |
ds | jrsl | PD | C/C++ | 1 | Skip Lists |
ds | libintrusive | PD | C | 2 | Intrusive data structures |
ds | lstr.h | PD/MIT | C | 1 | length-bounded strings |
ds | aArray | public domain | C | 1 | Arrays/strings: generic, safe |
ds | DG_dynarr.h | public domain | C/C++ | 1 | typesafe dynamic arrays (like std::vector) for plain C |
ecs | pico_ecs.h | PD/zlib | C | 1 | Pure and simple ECS |
engine | FWK1 | public domain | C | 1 | Game engine |
engine | olcPixelGameEngine | BSD3 | C++ | 1 | Game engine |
eval | mathe.h | PD/MIT | C | 1 | mathematical expression parsing |
ext | cor.h | PD/MIT | C | 1 | coroutines |
ext | errnoname | BSD0 | C | 2 | extended errno messages |
ext | filesystem | MIT | C++ | 1 | implementation of std::filesystem |
ext | outcome | Apache2/Boost | C++ | 1 | outcome and result C++ containers |
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 |
file | DG_misc.h | public domain | C/C++ | 1 | Daniel Gibson's stb.h-esque cross-platform helpers: path/file, strings |
game | raycastlib.h | CC0 + patent waiver | C/C++ | 1 | advanced raycasting rendering library, pure C99 with no dependencies, only 32bit int math |
game | app.h | public domain | C/C++ | 1 | Windows-only-but-meant-to-be-cross-platform game-ish framework |
gl | final_dynamic_opengl.h | MIT | C | 1 | opengl loader |
gui | webview | MIT | C/C++ | 1 | cross-platform webview library |
hash | xxHash | BSD | C/C++ | 2 | fast hash function |
hash | hash.c | PD | C | 2 | SHA1/SHA3/MD5 hashes |
hash | lonesha256 | PD | C | 1 | SHA256 implementation |
hash | PicoSHA2 | MIT | C++ | 1 | SHA256 implementation |
hw | libue | MIT | C/C++ | 1 | Helper library for Linux device hot-plug event |
hw | EasyTab | public domain | C/C++ | 1 | multi-platform tablet input |
image | rjm_texbleed.h | public domain | C/C++ | 1 | Fills in the color of pixels where alpha==0 |
image | EXR miniexr | public domain | C++ | 2 | OpenEXR writer, needs header file |
image | EXR tinyexr | BSD | C/C++ | 1 | EXR image read/write, uses miniz internally |
image | GIF gif_load | public domain | C/C++ | 1 | (animated) GIF reader |
image | GIF gif.h | public domain | C++ | 1 | animated GIF writer (can only include once) |
image | GIF jo_gif.cpp | public domain | C++ | 1 | animated GIF writer (CPP file can also be used as H file) |
image | JPG tiny_jpeg.h | public domain | C/C++ | 1 | JPEG encoder |
image | JPG jpeg-compressor | public domain | C++ | 2 | 2-file JPEG compress, 2-file JPEG decompress |
image | JPG NanoJPEG | MIT | C/C++ | 1 | JPEG decoder |
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 | public domain | 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 | Apache 2.0 | 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 | bitmap | MIT | C++ | 1 | Bitmap decoder and utilities |
image | framepacker | MIT | C++ | 1 | texture bin packing algorithm |
image | tiffloader | PD | C | 2 | TIFF image loader |
image | cro_mipmap.h | public domain | C/C++ | 1 | average, min, max mipmap generators |
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 | json-build | MIT | C/C++ | 1 | JSON serializer |
json | json.h | public domain | 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 | jsmn | MIT | C | 1 | Minimalistic JSON parser |
json | jsonc | MIT | C | 1 | Fast JSON parser |
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 | ExprTk | MIT | C++ | 1 | Runtime mathematical expression parser and evaluation engine. |
math | fft | public domain | C++ | 1 | Fast Fourier Transform |
math | jc_voronoi | MIT | C/C++ | 1 | find voronoi regions on float/double data |
math | nanoflann | BSD | C++ | 1 | build KD trees for point clouds |
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 | prns.h | public domain | C/C++ | 1 | seekable pseudo-random number sequences |
math | rfft.h | public domain | 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 | simrank.hpp | MIT | C++ | 2 | SimRank graph similarity algorithm |
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 | public domain | C/C++ | 2 | various 3D intersection calculations, not lib-ified |
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. |
math | Delaunay | BSD3 | C++ | 2 | 2D and 3D Delaunay triangulation |
math | dvector | PD | C | 1 | 2D/3D vector/quaternion/matrix math library |
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 | linmath.h | WTFPLv2 | C | 1 | vector library |
math | m_math.h | zlib | C/C++ | 1 | math with C/OpenCL portability |
math | omm | MIT | C++ | 1 | Template open multi-methods |
math | OpenNL | BSD3 | C++ | 2 | linear and eigen solvers |
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 | precision | PD | C++ | 3 | Arbitrary-precision integer and rational arithmetic |
math | simple_linear_regression | MIT | C/C++ | 1 | Simple linear regression |
math | Statistics-Tool-Box | PD | C/C++ | 1 | Statistical functions |
math | tiny-bignum-c | PD | C | 2 | Small portable multiple-precision unsigned integer arithmetic in C |
math | vmath | PD | C | 1 | Vector/matrix library |
math | df | public domain | C/C++ | 1 | find voronoi region in linear time of size of lattice |
math | nv_voronoi.h | public domain | C/C++ | 1 | find voronoi regions on lattice w/ integer inputs |
math | rjm_mc.h | public domain | C/C++ | 1 | marching cubes triangulator |
math | rnd.h | public domain | C/C++ | 1 | pseudo-random number generation |
math | sobol.h | public domain | C/C++ | 1 | sobol & stratified sampling sequences |
mem | buddy_alloc | BSD0 | C | 1 | buddy memory allocator |
mem | final_memory.h | MIT | C | 1 | heap memory handler |
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 | public domain | 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 | benchmark.hpp | LGPL3 | C++ | 1 | micro benchmark library for C++11 and beyond |
misc | cpp-generators | BSD | C++ | 1 | generators in C++ |
misc | endianness.h | public domain | C | 1 | endianness conversion and detection |
misc | format.hpp | LGPL3 | C++ | 1 | dlang inspired typesafe string formatting |
misc | ggformat | ISC | C++ | 2 | printf replacement |
misc | Hedley | public domain | C/C++ | 1 | compiler portability, optimization, static analysis, etc. |
misc | levenshtein | MIT | C/C++ | 2 | compute edit distance between two strings |
misc | MakeID.h | public domain | C++ | 1 | allocate/deallocate small integer IDs efficiently |
misc | openGA | MPL-2.0 | C++ | 1 | A C++ Generic Algorithm solver library |
misc | picobench | MIT | C++ | 1 | microbenchmarking |
misc | PlusCallback | zlib | C++ | 1 | function/method callbacks |
misc | random | MIT | C++ | 1 | convenient API for random |
misc | RGFW | zlib | C/C++ | 1 | A multi-platform single-header user-friendly GUI framework as an alternative to GLFW |
misc | sili-toolchain | public domain | C/C++ | 1 | C toolchain for modern C programming, strings, arrays, files, threading, ect |
misc | sokol_time.h | MIT | C/C++ | 1 | cross-platform time measurement |
misc | stmr | MIT | C | 2 | extract English word stems |
misc | tinyformat | Boost | C++ | 1 | typesafe printf |
misc | tinytime | zlib | C/C++ | 1 | quick-and-dirty time elapsed time |
misc | visit_struct | Boost | C++ | 2 | struct-field reflection |
misc | args.h | PD/MIT | C | 1 | argparse-style argument parser |
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 | ebnn.h | MIT | C | 1 | BNN (Binarized Neural Networks) |
misc | final_tiletrace.hpp | MIT | C++ | 1 | tilemap contour tracing |
misc | h.h | GPL3 | C/C++ | 1 | Diverse utilities |
misc | ll.h | PD/MIT | C | 1 | cross-platform library loading |
misc | mmu | MIT | C | 2 | memory management and data structure toolset |
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 | smallxrm.c | PD | C | 2 | Implementation of X resource manager |
misc | x.h | Mulan2 | C/C++ | 1 | cross-platform C/C++ utilities |
misc | process.h | public domain | C/C++ | 1 | process control API |
misc | ubench.h | public domain | C/C++ | 1 | microbenchmarking |
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 | 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 | par_easycurl.h | MIT | C/C++ | 1 | cURL wrapper |
net | yocto | public domain | C/C++ | 2 | non-production-use HTTP server |
net | znet | MIT | C/C++ | 1 | cross-platform networking w/ Lua binding |
net | netq | MIT | C | 1 | Reliable datagram library |
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 | udp.h | PD/MIT | C | 1 | cross-platform udp networking |
net | webster | Apache2 | C++ | 2 | Standalone HTTP server/client |
net | http | public domain | C/C++ | 1 | HTTP get/post |
net | sts_net | public domain | C/C++ | 1 | cross-platform socket wrapper (socket sets and packet API) |
net | zed_net | public domain | C/C++ | 1 | cross-platform socket wrapper |
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 | pithy | BSD | C/C++ | 2 | fast but larger LZ compression |
pack | rle | MIT | C | 1+1 | extremely simple run-length encoder/decoder |
pack | nibrans | PD | C | 1 | adaptive rANS library |
pack | rle | MIT | C | 1 | RLE library |
pack | miniz.c | MIT | C/C++ | 1 | compression, decompression, ZIP file, PNG writing |
parse | cmp | MIT | C/C++ | 2 | MessagePack parser and serializer |
parse | cpp-peglib | MIT | C/C++ | 1 | PEG (Parsing Expression Grammars) library |
parse | inih | BSD | C/C++ | 2 | .ini file parser |
parse | minilibs | public domain | 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 | tinymemfile | zlib | C++ | 1 | fscanf on in-memory files |
parse | udisasm | MIT | C/C++ | 1 | extremely small disassembler for ARMv8.2 AArch64 (~65k) |
parse | Unformat | public domain | C++ | 1 | parses formatted strings (reverse of std::format) |
parse | ini.h | public domain | C/C++ | 1 | .ini file parser |
parser | html-parse.c | GPL | C | 2 | HTML parser (wget) |
parser | tiny-regex-c | PD | C | 2 | Small portable regex in C |
parser | tiny-regex-mod | PD | C | 1 | Tiny regular expressions library |
parser | tok | MIT | C | 1 | Configurable tokenizer |
parser | tomlplusplus | MIT | C++ | 1 | TOML parser and serializer |
prng | ranxoshi256 | PD | C | 1 | xoshiro256 algorithm |
profile | MicroProfile | public domain | 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 | Apache 2.0 | 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 | public domain | C++ | 1 | binary serialize & deserlize w/ STL support |
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 | blob_tree | MIT | C++ | 1 | Binary tree serializer |
serial | dt.h | PD/MIT | C | 1 | datatag serializer/deserializer (superset of JSON) |
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 |
string | dfa | MIT | C/C++ | 2 | fast UTF-8 decoder (need a header file) |
string | inja.hpp | MIT | C++ | 1 | template engine |
string | Obfuscate | public domain | C++ | 1 | Guaranteed compile-time string literal obfuscation library for C++14 |
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 | csplit | MIT | C/C++ | 1 | String splitting and processing single-header library |
string | DG_misc.h | public domain | C/C++ | 1 | Daniel Gibson's stb.h-esque cross-platform helpers: path/file, strings |
string | gb_string.h | public domain | C/C++ | 1 | dynamic strings |
string | Str.h | public domain | C++ | 1 | Simple C++ string type with an optional local buffer |
string | strpool.h | public domain | C/C++ | 1 | string interning |
string | utf8 | public domain | 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 | final_platform_layer.h | MIT | C | 1 | platform abstraction |
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 | xproc | MIT | C++ | 2 | Foreign Process Information |
test | catch2 | Boost | C++ | 1 | unit testing |
test | catch | Boost | C++ | 1 | unit testing |
test | clove-unit | MIT | C | 1 | unit testing |
test | doctest | MIT | C++ | 1 | unit testing |
test | fctx | BSD | C/C++ | 1 | unit testing |
test | greatest | iSC | C | 1 | unit testing |
test | hippomocks | LGPL | C++ | 1 | unit testing |
test | minctest | zlib | C | 1 | unit testing |
test | munit | MIT | C | 1 | unit testing |
test | picotest | MIT | C/C++ | 1 | unit testing |
test | SPUT | BSD | C/C++ | 1 | unit testing |
test | trompeloeil | Boost | C++ | 1 | unit testing |
test | utest | MIT | C/C++ | 1 | unit testing |
test | test.h | PD/MIT | C | 1 | unit testing |
test | labrat | public domain | C/C++ | 1 | unit testing |
test | Rexo | public domain | C/C++ | 1 | framework for C89/C++ featuring automatic registration of tests and a polished API |
test | utest.h | public domain | C/C++ | 1 | unit testing |
test | walter | public domain | C | 1 | unit testing |
text 2d | rang | public domain | C++ | 1 | cross-platform colored console text |
text 2d | ssfn.h | MIT | C/C++ | 1 | scalable/bitmap/pixmap font renderer |
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 | 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 |
thread | thread.h | public domain | C/C++ | 1 | cross-platform thread primitives |
time | pico_time.h | PD/zlib | C | 1 | Time management library |
ui | dear imgui | MIT | C++ | 9 | an immediate-mode GUI formerly named "ImGui"; 3rd-party C wrapper |
ui | libcmdf | public domain | 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 | public domain | C/C++ | 1 | minimal GUI toolkit |
ui | tinyfiledialogs | ZLIB | C/C++ | 2 | modal dialogs inc. file open/save (Win/Mac/Linux) |
ui | wcwidth9 | Apache 2.0 | C | 1 | platform independent wcwidth with full unicode 9 support |
unit | pico_unit.h | PD/zlib | C | 1 | Unit testing framework |
vector | algebra3.h | public domain | C++ | 1 | vector utilities for 2, 3, and 4 element vectors, all inline |
vector | hypatia | MIT | C | 1 | vector/matrix/quaternion math |
vector | linalg.h | public domain | 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 |
vector | ccVector.h | public domain | C/C++ | 1 | Vector, quaternion and matrix math |
vector | gb_math | public domain | C/C++ | 1 | Vector, quaternion and matrix math w/o math.h |
vector | Handmade Math | public domain | C/C++ | 1 | vector math |
video | jo_mpeg / (converted to C) | public domain | 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 |
Submissions of new libraries: I accept submissions (as issues or as pull requests). 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.
Corrections: if information for a library above is wrong, please send a correction as an issue, pull request, or email. Note that if the list indicates a library works from both C/C++, but it doesn't, this could be an error in the list or it could be a bug in the library. If you find a library doesn't work in 32-bit or 64-bit, the library should be removed from this list, unless it's a bug in the library.
Yes. For historical reasons, this is the preferred link.
I draw the line arbitrarily at 2 files at most. (Note that some libraries that appear to be two files require a separate LICENSE file, which made me leave them out). 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, I feel that starts to get too far from what we do here.
Probably because I 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 I might not include it for various other reasons, including subtleties of what is 'minimal other dependencies' and subtleties about what is 'lightweight'.
Come on.