single_file_libs/README.md

25 KiB

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.

Rules

  • 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

Exceptions will be allowed for good reasons.

New libraries and corrections

See discussion after the list.

JSON Parsing

There are a lot of JSON parsers listed here. For some analysis and performance results, check out https://github.com/miloyip/nativejson-benchmark

Other lists

Also you might be interested in other related, but different lists:

  • clib: list of (mostly) small single C functions (licenses not listed)

Library listing

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.)

Categories:

AI

library license API files description
micropather zlib C++ 2 pathfinding with A*
Genann zlib C/C++ 2 simple neural networks (ANN)

argv

library license API files description
parg public domain C 1 command-line argument parsing

audio

library license API files description
aw_ima.h MIT C/C++ 1 IMA-ADPCM audio decoder
dr_flac public domain C/C++ 1 FLAC audio decoder
dr_wav public domain C/C++ 1 WAV audio loader
sts_mixer public domain C/C++ 1 simple stereo audio mixer

compression

library license API files description
miniz.c public domain C/C++ 1 compression,decompression, zip file, png writing
lz4 BSD C/C++ 2 fast but larger LZ compression
fastlz MIT C/C++ 2 fast but larger LZ compression
pithy BSD C/C++ 2 fast but larger LZ compression

crypto

library license API files description
TweetNaCl public domain C 2 high-quality tiny cryptography library

data structures

library license API files description
klib MIT C/C++ 2 many 2-file libs: hash, sort, b-tree, etc
uthash BSD C/C++ 2 several 1-header, 1-license-file libs: generic hash, list, etc
PackedArray WTFPLv2 C 2 memory-efficient array of elements with non-pow2 bitcount
minilibs public domain C 2 two-file binary tress (also regex, etc)
DG_dynarr.h public domain C/C++ 1 typesafe dynamic arrays (like std::vector) for plain C

#files & filenames

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
whereami WTFPLv2 C/C++ 2 get path/filename of executable or module
dirent MIT C/C++ 1 dirent for windows: retrieve file & dir info
TinyDir BSD C 1 cross-platform directory reader

#geometry file

library license API files description
tk_objfile MIT C/C++ 1 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
yocto_obj.h MIT C/C++ 1 wavefront OBJ file loader

#geometry math

library license API files description
nv_voronoi.h public domain C/C++ 1 find voronoi regions on lattice w/ integer inputs
sobol.h public domain C/C++ 1 sobol & stratified sampling sequences
sdf.h MIT C/C++ 1 compute signed-distance field from antialiased image
nanoflann BSD C++ 1 build KD trees for point clouds
jc_voronoi MIT C/C++ 1 find voronoi regions on float/double data
par_msquares MIT C/C++ 1 convert (binarized) image to triangles
par_shapes MIT C/C++ 1 generate various 3d geometric shapes
Tomas Akenine-Moller snippets public domain C/C++ 2 various 3D intersection calculations, not lib-ified
Clipper Boost C++ 2 line & polygon clipping & offsetting
PolyPartition MIT C++ 2 polygon triangulation, partitioning
Voxelizer MIT C/C++ 1 convert triangle mesh to voxel triangle mesh
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.

#graphics (2d)

library license API files description
blendish MIT C/C++ 1 blender-style widget rendering
tigr public domain C/C++ 2 quick-n-dirty window text/graphics for Windows and OSX
noc_turtle MIT C/C++ 2 procedural graphics generator

#graphics (3d)

library license API files description
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
mikktspace zlib C/C++ 2 compute tangent space for normal mapping
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

#hardware

library license API files description
EasyTab public domain C/C++ 1 multi-platform tablet input

#images

library license API files description
jo_gif.cpp public domain C++ 1 animated GIF writer (CPP file can also be used as H file)
gif.h public domain C 1 animated GIF writer (can only include once)
tiny_jpeg.h public domain C/C++ 1 JPEG encoder
gif_load public domain C/C++ 1 (animated) GIF reader
miniexr public domain C++ 2 OpenEXR writer, needs header file
tinyexr BSD C/C++ 1 EXR image read/write, uses miniz internally
lodepng zlib C/C++ 2 PNG encoder/decoder
nanoSVG zlib C/C++ 1 1-file SVG parser; 1-file SVG rasterizer
picopng.cpp zlib C++ 2 tiny PNG loader
jpeg-compressor public domain C++ 2 2-file jpeg compress, 2-file jpeg decompress
easyexif MIT C++ 2 EXIF metadata extractor for JPEG images
cro_mipmap.h public domain C/C++ 1 average, min, max mipmap generators

#math

library license API files description
mm_vec.h BSD C/C++ 1 SIMD vector math
Handmade Math public domain C/C++ 1 vector math
gb_math public domain C/C++ 1 Vector, quaternion and matrix math w/o math.h
ccVector.h public domain C/C++ 1 Vector, quaternion and matrix math
ShaderFastLibs MIT C++ 1 (also HLSL) approximate transcendental functions optimized for shaders (esp. GCN)
TinyExpr zlib C 2 evaluation of math expressions from strings
linalg.h unlicense C++ 1 vector/matrix/quaternion math
PoissonGenerator.h MIT C++ 1 Poisson disk points generator (disk or rect)
prns.h public domain C/C++ 1 seekable pseudo-random number sequences
aomeba MIT C/C++ 1 constraint solver (Cassowary) w/Lua binding

#multithreading

library license API files description
mm_sched.h zlib C/C++ 1 cross-platform multithreaded task scheduler

#network

library license API files description
zed_net public domain C/C++ 1 cross-platform socket wrapper
sts_net public domain C/C++ 1 cross-platform socket wrapper (socket sets and packet API)
mm_web.h BSD C/C++ 1 lightweight webserver, fork of webby
par_easycurl.h MIT C/C++ 1 curl wrapper
yocto public domain C/C++ 2 non-production-use http server
happyhttp zlib C++ 2 http client requests
mongoose GPLv2 C/C++ 2 http server
LUrlParser MIT C++ 2 lightweight URL & URI parser RFC 1738, RFC 3986
znet MIT C/C++ 1 cross-platform networking w/ lua binding

#parsing

library license API files description
SLRE GPLv2 C/C++ 1 regular expression matcher
PicoJSON BSD C++ 1 JSON parse/serializer
mm_lexer.h zlib C/C++ 1 C-esque language lexer
json.h public domain C/C++ 2 JSON parser
jzon.h MIT C++ 2 JSON parser
parson MIT C/C++ 2 JSON parser and serializer
minilibs public domain C 2 two-file regex (also binary tree, etc)

#profiling

library license API files description
Remotery Apache 2.0 C/C++ 2 CPU/GPU profiler Win/Mac/Linux, using web browser for viewer
MicroProfile unlicense C++ 2-4 CPU (and GPU?) profiler, 1-3 header files, uses miniz internally

#scripting

library license API files description
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

#strings

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
utf8 public domain C/C++ 1 utf8 string library
strpool.h public domain C/C++ 1 string interning
dfa MIT C/C++ 2 fast utf8 decoder (need a header file)
gb_string.h public domain C/C++ 1 dynamic strings

#tests

library license API files description
utest MIT C/C++ 1 unit testing
catch Boost C++ 1 unit testing
doctest MIT C++ 1 unit testing
SPUT BSD C/C++ 1 unit testing
pempek_assert.cpp WTFPLv2 C++ 2 flexible assertions
minctest zlib C 1 unit testing
greatest iSC C 1 unit testing
µnit MIT C 1 unit testing

#user interface

library license API files description
dear imgui MIT C++ 9 an immediate-mode GUI formerly named "ImGui"; 3rd-party C wrapper
nuklear public domain C/C++ 1 minimal GUI toolkit
noc_file_dialog.h MIT C/C++ 1 file open/save dialogs (Linux/OSX/Windows)
tinyfiledialogs ZLIB C/C++ 2 modal dialogs inc. file open/save (Linux/OSX/Windows)

#video

library license API files description
jo_mpeg public domain C++ 1 mpeg file writer

#miscellaneous

library license API files description
MakeID.h public domain C++ 1 allocate/deallocate small integer IDs efficiently
loguru public domain C++ 1 flexible logging
tinyformat Boost C++ 1 typesafe printf
dbgtools zlib C/C++ 2 cross-platform debug util libraries
stmr MIT C 2 extract English word stems
levenshtein MIT C 2 compute edit distance between two strings