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:
- 2D graphics
- 3D graphics
- 3D geometry file processing
- AI
- argument processing
- audio
- compression
- cryptography
- data structures
- files and filenames
- hardware interfacing
- image loading & processing
- mathematics for geometry
- mathematics
- miscellaneous
- multithreading
- networking
- parsing
- profiling
- scripting
- string processing
- tests
- user interface
- video
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 |