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.
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.
Recent additions
Recent additions are marked with an asterisk in the left column.
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)
CCAN : package of lots of shareable C functions (mixed licenses)
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:
general purpose
mathematics
parsing
graphics
audio/video/data compression
videogames
operating system features
debugging, profiling, testing
other
AI
library
license
API
files
description
micropather
zlib
C++
2
pathfinding with A*
Genann
zlib
C/C++
2
simple neural networks (ANN)
*
KANN
MIT
C/C++
2
automatic differentiation (2 files)
argv
library
license
API
files
description
parg
public domain
C
2
command-line argument parsing
flags
public domain
C++
1
command-line argument parsing
Argh!
BSD
C++
1
command-line argument parsing
optionparser
MIT
C++
1
command-line argument parsing
cmdline
BSD
C++
1
command-line argument parsing
linkom
MIT
C/C++
1
command-line argument parsing w/ DOS-style options
*
ProgramOptions.hxx
MIT
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
tinysound
zlib
C/C++
1
direct sound audio mixer & WAV loader
btac1c
MIT
C/C++
1
MS-IMA_ADPCM variant
TinySoundFont
MIT
C/C++
1
SoundFont2 loader & synthesizer
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
microtar
MIT
C/C++
2
lightweight tar library
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
chobo-shl
MIT
C++
1
several C++11 standard contaner like libraries and helpers
libpqueue
BSD
C/C++
2
priority queue (heap)
simclist
BSD
C/C++
2
linked-list
selist
ISC
C/C++
2
space-efficient linked-list
avl
public domain
C/C++
2
AVL tree
debugging
library
license
API
files
description
loguru
public domain
C++
1
flexible logging
pempek_assert.cpp
WTFPLv2
C++
2
flexible assertions
debug-assert
zlib
C++
1
modular assertion macro
dbgtools
zlib
C/C++
2
cross-platform debug util libraries
*
debugbreak
BSD
C/C++
1
programmatic debug break
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 reading (win/posix/mingw)
tinyfiles
zlib
C/C++
1
cross-platform directory reading (win/mac/unix)
geometry file
geometry math
library
license
API
files
description
nv_voronoi.h
public domain
C/C++
1
find voronoi regions on lattice w/ integer inputs
df
public domain
C/C++
1
find voronoi region in linear time of size of lattice
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.
rjm
public domain
C/C++
1
marching cubes triangulator
graphics (text)
library
license
API
files
description
rang
public domain
C++
1
cross-platform colored console text
graphics (2d)
library
license
API
files
description
blendish
MIT
C/C++
1
blender-style widget rendering using NanoVG
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
Cimg
CeCILL/CeCILL-C
C++
1
image processing toolkit (60K LoC)
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
Swarmz
public domain
C++
1
swarming/flocking algorithm
lightmapper
public domain
C/C++
1
use your OpenGL renderer to offline bake lightmaps
seamoptimizer
public domain
C/C++
1
modify lightmap data to hide seams
hardware
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
hashing
library
license
API
files
description
xxHash
BSD
C/C++
2
fast hash function
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
*
NanoJPEG
MIT
C/C++
1
JPEG 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
TinyEXIF
BSD
C++
2
Parse EXIF data from JPEG (XMP w/ TinyXML2 lib)
cro_mipmap.h
public domain
C/C++
1
average, min, max mipmap generators
PDFgen
public domain
C
2
PDF writer
math
library
license
API
files
description
ShaderFastLibs
MIT
C++
1
(also HLSL) approximate transcendental functions optimized for shaders (esp. GCN)
TinyExpr
zlib
C
2
evaluation of math expressions from strings
PoissonGenerator.h
MIT
C++
1
Poisson disk points generator (disk or rect)
prns.h
public domain
C/C++
1
seekable pseudo-random number sequences
amoeba
MIT
C/C++
1
constraint solver (Cassowary) w/Lua binding
simrank.hpp
MIT
C++
2
SimRank graph similarity algorithm
rnd.h
public domain
C/C++
1
pseudo-random number generation
multithreading
library
license
API
files
description
mm_sched.h
zlib
C/C++
1
cross-platform multithreaded task scheduler based on enkiTS
oosmos
GPLv2
C/C++
2
threadless concurrency
thread.h
public domain
C/C++
1
cross-platform thread primitives
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)
znet
MIT
C/C++
1
cross-platform networking w/ lua binding
mm_web.h
BSD
C/C++
1
lightweight webserver, fork of webby
yocto
public domain
C/C++
2
non-production-use http server
mongoose
GPLv2
C/C++
2
http server
EWS
BSD
C/C++
1
http server
civetweb
MIT
C/C++
2
http server, fork of mongoose
par_easycurl.h
MIT
C/C++
1
curl wrapper
happyhttp
zlib
C++
2
http client requests
http
public domain
C/C++
1
http get/post
LUrlParser
MIT
C++
2
lightweight URL & URI parser RFC 1738, RFC 3986
serialization
library
license
API
files
description
archive
public domain
C++
1
binary serialize & deserlize w/ STL support
json
library
license
API
files
description
PicoJSON
BSD
C++
1
JSON parse/serializer
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
json.hpp
MIT
C++
1
JSON parse, serialize, deserialize
cJSON
MIT
C/C++
1
JSON parser
ajson
Boost
C++
1
JSON serialize & deserialize w/ STL support
parsing
library
license
API
files
description
SLRE
GPLv2
C/C++
1
regular expression matcher
mm_lexer.h
zlib
C/C++
1
C-esque language lexer
minilibs
public domain
C
2
two-file regex (also binary tree, etc)
tinymemfile
zlib
C++
1
fscanf on in-memory files
inih
BSD
C/C++
2
.ini file parser
ini.h
public domain
C/C++
1
.ini file parser
*
cmp
MIT
C/C++
2
MessagePack parser and serializer
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
public domain
C++
2-4
CPU (and GPU?) profiler, 1-3 header files, uses miniz internally
prof
MIT
C/C++
1
profiler for Linux
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
s7
BSD
C/C++
2
interpreter for a subset of Scheme (R5RS/R7RS)
Duktape
MIT
C
2
embeddable Javascript engine
MY-BASIC
MIT
C
2
interpreter for a BASIC dialect 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
minctest
zlib
C
1
unit testing
greatest
iSC
C
1
unit testing
µnit
MIT
C
1
unit testing
labrat
public domain
C/C++
1
unit testing
hippomocks
LGPL
C++
1
unit testing
fctx
BSD
C/C++
1
unit testing
catch
Boost
C++
1
unit testing
*
trompeloeil
Boost
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)
linenoise
BSD
C/C++
2
terminal readline w/ history etc
wcwidth9
Apache 2.0
C
1
platform independent wcwidth with full unicode 9 support
vectors
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
linalg.h
public domain
C++
1
vector/matrix/quaternion math
linalg
ISC
C/C++
1
vector/matrix/quaternion math
algebra3.h
public domain
C++
1
vector utilities for 2, 3, and 4 element vectors, all inline
video
library
license
API
files
description
jo_mpeg
public domain
C++
1
mpeg file writer
videogames
library
license
API
files
description
app.h
public domain
C/C++
1
Windows-only-but-meant-to-be-cross-platform game-ish framework
miscellaneous
library
license
API
files
description
MakeID.h
public domain
C++
1
allocate/deallocate small integer IDs efficiently
tinyformat
Boost
C++
1
typesafe printf
visit_struct
Boost
C++
2
struct-field reflection
stmr
MIT
C
2
extract English word stems
levenshtein
MIT
C/C++
2
compute edit distance between two strings
tinytime
zlib
C/C++
1
quick-and-dirty time elapsed time
cpp-generators
BSD
C++
1
generators in C++
PlusCallback
zlib
C++
1
function/method callbacks
There are also these XML libraries, but if you're using XML, shame on you:
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.
List FAQ
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.