stb/docs/other_libs.md
2016-01-22 12:40:13 -08:00

11 KiB

Other single-file public-domain/open source libraries with minimal dependencies

In addition to all of my libraries, there are other, similar libraries.

People have told me about quite a few of these. However, I haven't used most of these libraries and can't comment on their quality. (If you use them and aren't their author, feel free to tell me about their quality.

Public domain single-file libraries are in bold. Other libraries are either non-public domain, or two files, or both.

category library license files description
2D blendish MIT 1 blender-style widget rendering
2D tigr public domain 2 quick-n-dirty window text/graphics for Windows
2D noc_turtle public domain 2 procedural graphics generator
3D tinyobjloader BSD 1 wavefront OBJ file loader
3D mikktspace zlib 2 compute tangent space for normal mapping
AI micropather zlib 2 pathfinding with A*
audio aw_ima.h MIT 1 IMA-ADPCM audio decoder
compression miniz.c public domain 2 zlib compression,decompression, zip file, png writing
compression lz4 BSD 2 fast but larger LZ compression
compression fastlz MIT 2 fast but larger LZ compression
compression pithy BSD 2 fast but larger LZ compression
crypto TweetNaCl public domain 2 high-quality tiny cryptography library
data structures klib MIT 2 many 2-file libs: hash, sort, b-tree, etc
data structures uthash BSD 2 several 1-header, 1-license-file libs: generic hash, list, etc
data structures PackedArray WTFPLv2 2 memory-efficient array of elements with non-pow2 bitcount
data structures minilibs public domain 2 two-file binary tress (also regex, etc)
files&filenames DG_misc.h public domain 1 Daniel Gibson's stb.h-esque cross-platform helpers: path/file, strings
files & filenames whereami WTFPLv2 2 get path/filename of executable or module
geometry nv_voronoi.h public domain 1 find voronoi regions on lattice w/ integer inputs
geometry sobol.h public domain 1 sobol & stratified sampling sequences
geometry sdf.h MIT 1 compute signed-distance field from antialiased image
geometry nanoflann BSD 1 build KD trees for point clouds
geometry jc_voronoi MIT 1 find voronoi regions on float/double data
geometry par_msquares MIT 1 convert (binarized) image to triangles
geometry tk_objfile 1 OBJ file loader
geometry par_shapes MIT 1 generate various 3d geometric shapes
geometry Tomas Akenine-Moller snippets public domain 2 various 3D intersection calculations, not lib-ified
geometry Clipper Boost 2 line & polygon clipping & offsetting
geometry PolyPartition MIT 2 polygon triangulation, partitioning
hardware EasyTab public domain 1 multi-platform tablet input
images jo_gif.cpp public domain 1 animated GIF writer
images gif.h public domain 1 animated GIF writer
images tiny_jpeg.h public domain 1 JPEG encoder
images miniexr public domain 1 OpenEXR writer
images tinyexr BSD 1 EXR image read/write, uses miniz internally
images lodepng zlib 1 PNG encoder/decoder
images nanoSVG zlib 1 1-file SVG parser; 1-file SVG rasterizer
images picopng.cpp zlib 2 tiny PNG loader
images jpeg-compressor public domain 2 2-file jpeg compress, 2-file jpeg decompress
math mm_vec.h BSD 1 SIMD vector math
math ShaderFastLibs MIT 1 approximate transcendental functions optimized for shaders (esp. GCN)
multithreading mm_sched.h zlib 1 cross-platform multithreaded task scheduler
network zed_net public domain 1 cross-platform socket wrapper
network mm_web.h BSD 1 lightweight webserver, fork of webby
network par_easycurl.h MIT 1 curl wrapper
network yocto public domain 2 non-production-use http server
network happyhttp zlib 2 http client requests
network mongoose GPLv2 2 http server
network LUrlParser MIT 2 lightweight URL & URI parser RFC 1738, RFC 3986
parsing SLRE GPLv2 1 regular expression matcher
parsing PicoJSON BSD 1 JSON parse/serializer for C++
parsing mm_json.h zlib 1 JSON parser
parsing mm_lexer.h zlib 1 C-esque language lexer
parsing json.h public domain 2 JSON parser
parsing jzon.h MIT 2 JSON parser, C++
parsing minilibs public domain 2 two-file regex (also binary tree, etc)
profiling Remotery Apache 2.0 2 CPU/GPU profiler Win/Mac/Linux, using web browser for viewer
profiling MicroProfile unlicense 2-4 CPU (and GPU?) profiler, 1-3 header files, uses miniz internally
scripting lualite MIT 1 generate lua bindings in C++
strings DG_misc.h public domain 1 Daniel Gibson's stb.h-esque cross-platform helpers: path/file, strings
strings utf8 public domain 1 utf8 string library
strings strpool.h public domain/MIT 1 string interning
strings dfa MIT 2 fast utf8 decoder
strings gb_string.h public domain 1 dynamic strings for C
tests utest MIT 1 unit testing
tests catch Boost 1 unit testing
tests SPUT BSD 1 unit testing
tests pempek_assert.cpp WTFPLv2 2 flexible assertions in C++
user interface dear imgui MIT 9 an immediate-mode GUI formerly named "ImGui"
misc MakeID.h public domain 1 allocate/deallocate small integer IDs efficiently
misc loguru public domain 1 flexible logging for C++
misc tinyformat Boost 1 C++ typesafe printf
misc dbgtools zlib 2 cross-platform debug util libraries
misc stmr MIT 2 extract English word stems
misc levenshtein MIT 2 compute edit distance between two strings

There are also these XML libraries, but if you're using XML, shame on you:

There are some libraries that are just so awesome that even though they use more than two files we're going to give them special dispensation to appear in their own little list here. If you're a crazy purist, be warned, but otherwise, enjoy!

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

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

List FAQ

Yes, you can just use this page. If you want a shorter, more readable link, you can use this URL to link to the FAQ question that links to this page.

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.