Single-file public-domain/open source libraries with minimal dependencies I am the author of a large number of single-file C/C++ public domain libraries . I am not the only person who writes libraries like this, so below are other, similar libraries.
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 lilbrary 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.
Recent additions are marked with an asterisk in the left column.
New libraries and corrections See discussion after the list.
There are a lot of JSON parsers listed here. For some analysis and performance results, check out https://github.com/miloyip/nativejson-benchmark
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.)
general purpose mathematics parsing graphics audio/video/data compression videogames operating system features debugging, profiling, testing other library license API files description Genann zlib C/C++ 2 simple neural networks (ANN) KANN MIT C/C++ 2 automatic differentiation (2 files) micropather zlib C++ 2 pathfinding with A*
library license API files description Argh! BSD C++ 1 command-line argument parsing Clara Boost C++ 1 composable, command line parser for C++ 11 and beyond CLI11 BSD C++ 1 Feature-rich CLI parsing in modern C++11 cmdline BSD C++ 1 command-line argument parsing flags public domain C++ 1 command-line argument parsing kgflags MIT C/C++ 1 command-line argument parsing linkom MIT C/C++ 1 command-line argument parsing w/ DOS-style options optionparser MIT C++ 1 command-line argument parsing parg public domain C 2 command-line argument parsing ProgramOptions.hxx MIT C++ 1 command-line argument parsing
library license API files description aw_ima.h MIT C/C++ 1 IMA-ADPCM audio decoder btac1c MIT C/C++ 1 MS-IMA_ADPCM variant dr_flac public domain C/C++ 1 FLAC audio decoder dr_wav public domain C/C++ 1 WAV audio loader Geneva MIT C/C++ 1 Library generating 8-bit waveforms of various kinds minimp3 CC0 C 1 Minimalistic MP3 decoder with sse/neon support miniaudio public domain C/C++ 1 Audio playback and capture library pocketmod MIT C/C++ 1 ProTracker MOD file renderer sts_mixer public domain C/C++ 1 simple stereo audio mixer tinysound zlib C/C++ 1 direct sound audio mixer & WAV loader TinySoundFont MIT C/C++ 1 SoundFont2 loader & synthesizer
library license API files description dmc_unrar GPLv2+ C/C++ 1 RAR file decompression fastlz MIT C/C++ 2 fast but larger LZ compression lz4 BSD C/C++ 2 fast but larger LZ compression miniz.c MIT C/C++ 1 compression, decompression, ZIP file, PNG writing microtar MIT C/C++ 2 lightweight tar library pithy BSD C/C++ 2 fast but larger LZ compression
library license API files description Monocypher public domain C 2 high-quality small cryptography library TweetNaCl public domain C 2 high-quality tiny cryptography library
library license API files description avl public domain C/C++ 2 AVL tree c-bool-value WTFPLv2 C/C++ 1 Simple and easy boolean values in standard c chobo-shl MIT C++ 1 several C++11 standard contaner like libraries and helpers DG_dynarr.h public domain C/C++ 1 typesafe dynamic arrays (like std::vector) for plain C DynaVar GPL-3.0 C++ 1 Object which can store any type of primitive data type klib MIT C/C++ 2 many 2-file libs: hash, sort, b-tree, etc libpqueue BSD C/C++ 2 priority queue (heap) minilibs public domain C 2 two-file binary tress (also regex, etc) PackedArray WTFPLv2 C 2 memory-efficient array of elements with non-pow2 bitcount simclist BSD C/C++ 2 linked-list selist ISC C/C++ 2 space-efficient linked-list mempool MIT C++ 1 Efficient minimal memory pool implementation for C++ uthash BSD C/C++ 2 several 1-header, 1-license-file libs: generic hash, list, etc
library license API files description dbgtools zlib C/C++ 2 cross-platform debug util libraries debug-assert zlib C++ 1 modular assertion macro debugbreak BSD C/C++ 1 programmatic debug break loguru public domain C++ 1 flexible logging pempek_assert.cpp WTFPLv2 C++ 2 flexible assertions
library license API files description DG_misc.h public domain C/C++ 1 Daniel Gibson's stb.h-esque cross-platform helpers: path/file, strings dirent MIT C/C++ 1 dirent for Windows: retrieve file & dir info tfile MIT C++ 1 FILE* wrapper does read-write-append-seek-close (Win/Mac/Unix) TinyDir BSD C 1 cross-platform directory reading (Win/POSIX/MinGW) tinyfiles zlib C/C++ 1 cross-platform directory reading (Win/Mac/Unix) whereami WTFPLv2 C/C++ 2 get path/filename of executable or module
library license API files description cgltf MIT C 1 glTF 2.0 file loader fast_obj.h MIT C 1 wavefront OBJ file loader objzero MIT C 2 wavefront OBJ file loader tinyply public domain C++ 2 PLY mesh file loader tinyobjloader MIT C++ 1 wavefront OBJ file loader tinyobjloader-c MIT C 1 wavefront OBJ file loader tk_objfile MIT C/C++ 1 OBJ file loader yocto_obj.h MIT C/C++ 1 wavefront OBJ file loader
library license API files description Clipper Boost C++ 2 line & polygon clipping & offsetting df public domain C/C++ 1 find voronoi region in linear time of size of lattice jc_voronoi MIT C/C++ 1 find voronoi regions on float/double data nanoflann BSD C++ 1 build KD trees for point clouds nv_voronoi.h public domain C/C++ 1 find voronoi regions on lattice w/ integer inputs par_msquares MIT C/C++ 1 convert (binarized) image to triangles par_shapes MIT C/C++ 1 generate various 3d geometric shapes PolyPartition MIT C++ 2 polygon triangulation, partitioning rjm_mc.h public domain C/C++ 1 marching cubes triangulator sobol.h public domain C/C++ 1 sobol & stratified sampling sequences sdf.h MIT C/C++ 1 compute signed-distance field from antialiased image Tomas Akenine-Moller snippets public domain C/C++ 2 various 3D intersection calculations, not lib-ified Voxelizer MIT C/C++ 1 convert triangle mesh to voxel triangle mesh xatlas MIT C++ 2 mesh parameterization yocto_bvh.h MIT C/C++ 1 ray-casting and closest-element queries of bounding-volume hierarchy yocto_shape.h MIT C/C++ 1 shape generation, tesselation, normals, etc.
library license API files description rang public domain C++ 1 cross-platform colored console text
library license API files description blendish MIT C/C++ 1 blender-style widget rendering using NanoVG Cimg CeCILL/CeCILL-C C++ 1 image processing toolkit (60K LoC) Immediate2D public domain C++ 2 zero-configuration, immediate-mode 2D graphics for Windows noc_turtle MIT C/C++ 2 procedural graphics generator tigr public domain C/C++ 2 quick-n-dirty window text/graphics for Windows and macOS
library license API files description debug-draw public domain C++ 1 API-agnostic immediate-mode debug rendering lightmapper public domain C/C++ 1 use your OpenGL renderer to offline bake lightmaps mikktspace zlib C/C++ 2 compute tangent space for normal mapping rjm_raytrace.h public domain C/C++ 1 minimalistic SSE packet raytracer for offline baking seamoptimizer public domain C/C++ 1 modify lightmap data to hide seams sokol_gfx.h MIT C/C++ 1 cross-platform 3D API wrapper (GLES2+3/GL3/D3D11/Metal) Swarmz public domain C++ 1 swarming/flocking algorithm tinygizmo public domain C++ 2 gizmo objects for interactively editing 3d transformations Vertex Cache Optimizer public domain C/C++ 1 vertex cache optimization of meshes Vulkan Memory Allocator MIT C/C++ 1 memory allocator for Vulkan yocto_trace.h MIT C/C++ 1 physically-based unidirectional path tracer w/ MIS for direct lights yocto_symrigid.h MIT C/C++ 1 rigid body simulator (sequential impulse/PGS) with support for concave objects
library license API files description EasyTab public domain C/C++ 1 multi-platform tablet input libue MIT C/C++ 1 Helper library for Linux device hot-plug event
library license API files description xxHash BSD C/C++ 2 fast hash function
library license API files description EXR miniexr public domain C++ 2 OpenEXR writer, needs header file EXR tinyexr BSD C/C++ 1 EXR image read/write, uses miniz internally GIF gif.h public domain C++ 1 animated GIF writer (can only include once) GIF gif_load public domain C/C++ 1 (animated) GIF reader GIF jo_gif.cpp public domain C++ 1 animated GIF writer (CPP file can also be used as H file) JPG jpeg-compressor public domain C++ 2 2-file JPEG compress, 2-file JPEG decompress JPG NanoJPEG MIT C/C++ 1 JPEG decoder JPG tiny_jpeg.h public domain C/C++ 1 JPEG encoder JPG EXIF easyexif MIT C++ 2 EXIF metadata extractor for JPEG images JPG EXIF TinyEXIF BSD C++ 2 Parse EXIF data from JPEG (XMP w/ TinyXML2 lib) PDF PDFgen public domain C 2 PDF writer PNG lodepng zlib C/C++ 2 PNG encoder/decoder PNG picopng.cpp zlib C++ 2 tiny PNG loader PNG TinyPngOutput LGPLv3 C/C++ 2 PNG writer PNM PNM Apache 2.0 C++ 1 PBM, PGM and PPM reader and writer SVG nanoSVG zlib C/C++ 1 1-file SVG parser; 1-file SVG rasterizer cro_mipmap.h public domain C/C++ 1 average, min, max mipmap generators rjm_texbleed.h public domain C/C++ 1 Fills in the color of pixels where alpha==0
library license API files description amoeba MIT C/C++ 1 constraint solver (Cassowary) w/Lua binding fft public domain C++ 1 Fast Fourier Transform PoissonGenerator.h MIT C++ 1 Poisson disk points generator (disk or rect) prns.h public domain C/C++ 1 seekable pseudo-random number sequences rnd.h public domain C/C++ 1 pseudo-random number generation ShaderFastLibs MIT C++ 1 (also HLSL) approximate transcendental functions optimized for shaders (esp. GCN) simrank.hpp MIT C++ 2 SimRank graph similarity algorithm SummedAreaTable MIT C++ 1 Summed-Area Table generation and sum/avg queries TinyExpr zlib C 2 evaluation of math expressions from strings
library license API files description bikeshed.h MIT C/C++ 1 cross-platform lock free fixed memory hierarchical work scheduler mm_sched.h zlib C/C++ 1 cross-platform multithreaded task scheduler based on enkiTS thread.h public domain C/C++ 1 cross-platform thread primitives TinyCThread zlib C/C++ 2 cross-platform implementation of the C11 Threads API TinyThread++ zlib C++ 2 cross-platform implementation of the C++11 Threads API
library license API files description civetweb MIT C/C++ 2 HTTP server, fork of Mongoose EWS BSD C/C++ 1 HTTP server happyhttp zlib C++ 2 HTTP client requests http public domain C/C++ 1 HTTP get/post 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 LUrlParser MIT C++ 2 lightweight URL & URI parser RFC 1738, RFC 3986 mm_web.h BSD C/C++ 1 lightweight webserver, fork of webby mongoose GPLv2 C/C++ 2 HTTP server par_easycurl.h MIT C/C++ 1 cURL wrapper sts_net public domain C/C++ 1 cross-platform socket wrapper (socket sets and packet API) yocto public domain C/C++ 2 non-production-use HTTP server zed_net public domain C/C++ 1 cross-platform socket wrapper znet MIT C/C++ 1 cross-platform networking w/ Lua binding
library license API files description archive public domain C++ 1 binary serialize & deserlize w/ STL support libcluon MPL-2.0 C++ 1 cross-platform data serialization/deserialization with native implementations for Protobuf , LCM /ZCM , JSON, and MsgPack
library license API files description ajson Boost C++ 1 JSON serialize & deserialize w/ STL support cJSON MIT C/C++ 1 JSON parser json.h public domain C/C++ 2 JSON parser json.hpp MIT C++ 1 JSON parse, serialize, deserialize jzon.h MIT C++ 2 JSON parser PicoJSON BSD C++ 1 JSON parse/serializer parson MIT C/C++ 2 JSON parser and serializer
library license API files description mini-yaml MIT C++ 2 YAML parser and serializer
library license API files description cmp MIT C/C++ 2 MessagePack parser and serializer inih BSD C/C++ 2 .ini file parser ini.h public domain C/C++ 1 .ini file parser minilibs public domain C 2 two-file regex (also binary tree, etc) mm_lexer.h zlib C/C++ 1 C-esque language lexer SLRE GPLv2 C/C++ 1 regular expression matcher tinymemfile zlib C++ 1 fscanf on in-memory files
library license API files description MicroProfile public domain C++ 2-4 CPU (and GPU?) profiler, 1-3 header files, uses miniz internally prof MIT C/C++ 1 profiler for Linux Remotery Apache 2.0 C/C++ 2 CPU/GPU profiler Win/Mac/Linux, using web browser for viewer
library license API files description Duktape MIT C 2 embeddable JavaScript engine MY-BASIC MIT C 2 interpreter for a BASIC dialect scripting language LIL zlib C/C++ 2 interpreter for a Tcl-like scripting language lualite MIT C++ 1 generate Lua bindings in C++ Picol BSD C/C++ 1 interpreter for a Tcl-like scripting language s7 BSD C/C++ 2 interpreter for a subset of Scheme (R5RS/R7RS)
library license API files description dfa MIT C/C++ 2 fast UTF-8 decoder (need a header file) DG_misc.h public domain C/C++ 1 Daniel Gibson's stb.h-esque cross-platform helpers: path/file, strings gb_string.h public domain C/C++ 1 dynamic strings Obfuscate public domain C++ 1 Guaranteed compile-time string literal obfuscation library for C++14 inja.hpp MIT C++ 1 template engine strpool.h public domain C/C++ 1 string interning str_view.hpp MIT C++ 1 null-termination-aware string-view class utf8 public domain C/C++ 1 UTF-8 string library
library license API files description catch Boost C++ 1 unit testing catch2 Boost C++ 1 unit testing doctest MIT C++ 1 unit testing fctx BSD C/C++ 1 unit testing greatest iSC C 1 unit testing hippomocks LGPL C++ 1 unit testing labrat public domain C/C++ 1 unit testing minctest zlib C 1 unit testing munit MIT C 1 unit testing SPUT BSD C/C++ 1 unit testing trompeloeil Boost C++ 1 unit testing utest MIT C/C++ 1 unit testing utest.h public domain C/C++ 1 unit testing
library license API files description dear imgui MIT C++ 9 an immediate-mode GUI formerly named "ImGui"; 3rd-party C wrapper libcmdf public domain C 1 a small library for writing CLI applications linenoise BSD C/C++ 2 terminal readline w/ history etc noc_file_dialog.h MIT C/C++ 1 file open/save dialogs (Win/Mac/Linux) nuklear public domain C/C++ 1 minimal GUI toolkit tinyfiledialogs ZLIB C/C++ 2 modal dialogs inc. file open/save (Win/Mac/Linux) wcwidth9 Apache 2.0 C 1 platform independent wcwidth with full unicode 9 support
library license API files description algebra3.h public domain C++ 1 vector utilities for 2, 3, and 4 element vectors, all inline ccVector.h public domain C/C++ 1 Vector, quaternion and matrix math gb_math public domain C/C++ 1 Vector, quaternion and matrix math w/o math.h Handmade Math public domain C/C++ 1 vector math linalg.h public domain C++ 1 vector/matrix/quaternion math linalg ISC C/C++ 1 vector/matrix/quaternion math mm_vec.h BSD C/C++ 1 SIMD vector math
library license API files description jo_mpeg public domain C++ 1 MPEG file writer
library license API files description app.h public domain C/C++ 1 Windows-only-but-meant-to-be-cross-platform game-ish framework
library license API files description ASAP MIT C++ 1 library for parsing, printing, iterating and operating on dates. cpp-generators BSD C++ 1 generators in C++ Hedley public domain C/C++ 1 compiler portability, optimization, static analysis, etc. levenshtein MIT C/C++ 2 compute edit distance between two strings MakeID.h public domain C++ 1 allocate/deallocate small integer IDs efficiently picobench MIT C++ 1 microbenchmarking PlusCallback zlib C++ 1 function/method callbacks process.h public domain C/C++ 1 process control API random MIT C++ 1 convenient API for random sokol_time.h MIT C/C++ 1 cross-platform time measurement stmr MIT C 2 extract English word stems tinyformat Boost C++ 1 typesafe printf tinytime zlib C/C++ 1 quick-and-dirty time elapsed time visit_struct Boost C++ 2 struct-field reflection
There are also these XML libraries, but I am so significantly not a fan of XML that I've consigned these to the basement to make you think twice.
parsing: tinyxml2 : XML (zlib license) parsing: pugixml : XML (MIT license) parsing: yxml : XML (MIT license) New libraries and corrections 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.
Can I link directly to this list? Yes. This is the preferred link.
Why isn't library XXX which is made of 3 or more files on this list? 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.
Why isn't library XXX which is at most two files and has minimal other dependencies on this list? Probably because I don't know about it, feel free to submit a pull request, issue, email, or tweet it at me (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'.
Why isn't SQLite's amalgamated build on this list? Come on.