2015-09-27 18:14:48 +03:00
# Other single-file public-domain/open source libraries with minimal dependencies
2015-09-27 18:13:09 +03:00
2015-09-27 18:21:39 +03:00
In addition to all of [my libraries ](https://github.com/nothings/stb ), there are other, similar libraries.
2015-09-27 18:14:48 +03:00
People have told me about quite a few of these. However, I haven't used most of these libraries
2015-09-27 18:13:09 +03:00
and can't comment on their quality. (If you use them and aren't their author, feel
2016-01-22 17:59:09 +03:00
free to tell me about their quality.
**Public domain single-file libraries are in bold.**
2016-01-22 23:37:11 +03:00
category | library | license | files | description
2016-01-22 17:59:09 +03:00
-------- | ------- | ------- | ------- | -----------
2D | [blendish ](https://bitbucket.org/duangle/oui-blendish/src ) | MIT | **1** | blender-style widget rendering
2016-01-22 18:01:56 +03:00
2D | [tigr ](https://bitbucket.org/rmitton/tigr/src ) | **public domain** | 2 | quick-n-dirty window text/graphics for Windows
2D | [noc_turtle ](https://github.com/guillaumechereau/noc ) | **public domain** | 2 | procedural graphics generator
2016-01-22 17:59:09 +03:00
3D | [tinyobjloader ](https://github.com/syoyo/tinyobjloader ) | BSD | **1** | wavefront OBJ file loader
3D | [mikktspace ](https://svn.blender.org/svnroot/bf-blender/trunk/blender/intern/mikktspace/ ) | zlib | 2 | compute tangent space for normal mapping
AI | [micropather ](http://www.grinninglizard.com/MicroPather/ ) | zlib | 2 | pathfinding with A*
audio | [aw_ima.h ](https://github.com/afterwise/aw-ima/blob/master/aw-ima.h ) | MIT | **1** | IMA-ADPCM audio decoder
2016-01-22 18:01:56 +03:00
compression | [miniz.c ](https://github.com/richgel999/miniz ) | **public domain** | 2 | zlib compression,decompression, zip file, png writing
2016-01-22 17:59:09 +03:00
compression | [lz4 ](https://github.com/Cyan4973/lz4 ) | BSD | 2 | fast but larger LZ compression
compression | [fastlz ](https://code.google.com/p/fastlz/source/browse/#svn%2Ftrunk ) | MIT | 2 | fast but larger LZ compression
compression | [pithy ](https://github.com/johnezang/pithy ) | BSD | 2 | fast but larger LZ compression
2016-01-22 18:01:56 +03:00
crypto | [TweetNaCl ](http://tweetnacl.cr.yp.to/software.html ) | **public domain** | 2 | high-quality tiny cryptography library
2016-01-22 17:59:09 +03:00
data structures | [klib ](http://attractivechaos.github.io/klib/ ) | MIT | 2 | many 2-file libs: hash, sort, b-tree, etc
data structures | [uthash ](https://github.com/troydhanson/uthash ) | BSD | 2 | several 1-header, 1-license-file libs: generic hash, list, etc
data structures | [PackedArray ](https://github.com/gpakosz/PackedArray ) | **WTFPLv2** | 2 | memory-efficient array of elements with non-pow2 bitcount
2016-01-22 18:01:56 +03:00
data structures | [minilibs ](https://github.com/ccxvii/minilibs ) | **public domain** | 2 | two-file binary tress (also regex, etc)
files&filenames|**[DG_misc.h](https://github.com/DanielGibson/Snippets/)**|**public domain**|**1**|Daniel Gibson's stb.h-esque cross-platform helpers: path/file, strings
2016-01-22 17:59:09 +03:00
files & filenames | [whereami ](https://github.com/gpakosz/whereami ) | **WTFPLv2** | 2 | get path/filename of executable or module
2016-01-22 18:01:56 +03:00
geometry | ** [nv_voronoi.h ](http://www.icculus.org/~mordred/nvlib/ )**|**public domain**|**1**|find voronoi regions on lattice w/ integer inputs
geometry | ** [sobol.h ](https://github.com/Marc-B-Reynolds/Stand-alone-junk/blob/master/src/SFH/Sobol.h )**|**public domain**|**1**|sobol & stratified sampling sequences
2016-01-22 17:59:09 +03:00
geometry | [sdf.h ](https://github.com/memononen/SDF ) | MIT | **1** | compute signed-distance field from antialiased image
geometry | [nanoflann ](https://github.com/jlblancoc/nanoflann ) | BSD | **1** | build KD trees for point clouds
geometry | [jc_voronoi ](https://github.com/JCash/voronoi ) | MIT | **1** | find voronoi regions on float/double data
geometry | [par_msquares ](https://github.com/prideout/par ) | MIT | **1** | convert (binarized) image to triangles
geometry | [tk_objfile ](https://github.com/joeld42/tk_objfile ) | | **1** | OBJ file loader
geometry | [par_shapes ](http://github.prideout.net/shapes/ ) | MIT | **1** | generate various 3d geometric shapes
2016-01-22 18:01:56 +03:00
geometry | [Tomas Akenine-Moller snippets ](http://fileadmin.cs.lth.se/cs/Personal/Tomas_Akenine-Moller/code/ ) | **public domain** | 2 | various 3D intersection calculations, not lib-ified
2016-01-22 17:59:09 +03:00
geometry | [Clipper ](http://www.angusj.com/delphi/clipper.php ) | Boost | 2 | line & polygon clipping & offsetting
geometry | [PolyPartition ](https://github.com/ivanfratric/polypartition ) | MIT | 2 | polygon triangulation, partitioning
2016-01-22 18:01:56 +03:00
hardware| ** [EasyTab ](https://github.com/ApoorvaJ/EasyTab )**|**public domain**|**1**|multi-platform tablet input
images| ** [jo_gif.cpp ](http://www.jonolick.com/home/gif-writer )**|**public domain**|**1**|animated GIF writer
images| ** [gif.h ](https://github.com/ginsweater/gif-h )**|**public domain**|**1**|animated GIF writer
images| ** [tiny_jpeg.h ](https://github.com/serge-rgb/TinyJPEG/blob/master/tiny_jpeg.h )**|**public domain**|**1**|JPEG encoder
images| ** [miniexr ](https://github.com/aras-p/miniexr )**|**public domain**|**1**|OpenEXR writer
2016-01-22 17:59:09 +03:00
images | [tinyexr ](https://github.com/syoyo/tinyexr ) | BSD | **1** | EXR image read/write, uses miniz internally
images | [lodepng ](http://lodev.org/lodepng/ ) | zlib | **1** | PNG encoder/decoder
images | [nanoSVG ](https://github.com/memononen/nanosvg ) | zlib | **1** | 1-file SVG parser; 1-file SVG rasterizer
images | [picopng.cpp ](http://lodev.org/lodepng/picopng.cpp ) | zlib | 2 | tiny PNG loader
2016-01-22 18:01:56 +03:00
images | [jpeg-compressor ](https://github.com/richgel999/jpeg-compressor ) | **public domain** | 2 | 2-file jpeg compress, 2-file jpeg decompress
2016-01-22 17:59:09 +03:00
math | [mm_vec.h ](https://github.com/vurtun/mmx ) | BSD | **1** | SIMD vector math
math | [ShaderFastLibs ](https://github.com/michaldrobot/ShaderFastLibs ) | MIT | **1** | approximate transcendental functions optimized for shaders (esp. GCN)
multithreading | [mm_sched.h ](https://github.com/vurtun/mmx ) | zlib | **1** | cross-platform multithreaded task scheduler
2016-01-22 18:01:56 +03:00
network | ** [zed_net ](https://github.com/ZedZull/zed_net )**|**public domain**|**1**|cross-platform socket wrapper
2016-01-22 17:59:09 +03:00
network | [mm_web.h ](https://github.com/vurtun/mmx ) | BSD | **1** | lightweight webserver, fork of webby
network | [par_easycurl.h ](https://github.com/prideout/par ) | MIT | **1** | curl wrapper
2016-01-22 18:01:56 +03:00
network | [yocto ](https://github.com/tom-seddon/yhs ) | **public domain** | 2 | non-production-use http server
2016-01-22 17:59:09 +03:00
network | [happyhttp ](http://scumways.com/happyhttp/happyhttp.html ) | zlib | 2 | http client requests
network | [mongoose ](https://github.com/cesanta/mongoose ) | GPLv2 | 2 | http server
network | [LUrlParser ](https://github.com/corporateshark/LUrlParser ) | MIT | 2 | lightweight URL & URI parser RFC 1738, RFC 3986
parsing | [SLRE ](https://github.com/cesanta/slre ) | GPLv2 | **1** | regular expression matcher
parsing | [PicoJSON ](https://github.com/kazuho/picojson ) | BSD | **1** | JSON parse/serializer for C++
parsing | [mm_json.h ](https://github.com/vurtun/mmx ) | zlib | **1** | JSON parser
parsing | [mm_lexer.h ](https://github.com/vurtun/mmx ) | zlib | **1** | C-esque language lexer
2016-01-22 18:01:56 +03:00
parsing | [json.h ](https://github.com/sheredom/json.h ) | **public domain** | 2 | JSON parser
2016-01-22 17:59:09 +03:00
parsing | [jzon.h ](https://github.com/Zguy/Jzon ) | MIT | 2 | JSON parser, C++
2016-01-22 18:01:56 +03:00
parsing | [minilibs ](https://github.com/ccxvii/minilibs ) | **public domain** | 2 | two-file regex (also binary tree, etc)
2016-01-22 17:59:09 +03:00
profiling | [Remotery ](https://github.com/Celtoys/Remotery ) | Apache 2.0 | 2 | CPU/GPU profiler Win/Mac/Linux, using web browser for viewer
profiling | [MicroProfile ](https://bitbucket.org/jonasmeyer/microprofile ) | **unlicense** | 2-4 | CPU (and GPU?) profiler, 1-3 header files, uses miniz internally
scripting | [lualite ](https://github.com/janezz55/lualite/ ) | MIT | **1** | generate lua bindings in C++
2016-01-22 18:01:56 +03:00
strings | ** [DG_misc.h ](https://github.com/DanielGibson/Snippets/ )**|**public domain**|**1**|Daniel Gibson's stb.h-esque cross-platform helpers: path/file, strings
strings | ** [utf8 ](https://github.com/sheredom/utf8.h )**|**public domain**|**1**|utf8 string library
2016-01-22 23:37:11 +03:00
strings | ** [strpool.h ](https://github.com/mattiasgustavsson/libs )**|**public domain**/MIT|**1**|string interning
2016-01-22 17:59:09 +03:00
strings | [dfa ](http://bjoern.hoehrmann.de/utf-8/decoder/dfa/ ) | MIT | 2 | fast utf8 decoder
2016-01-22 18:01:56 +03:00
strings | ** [gb_string.h ](https://github.com/gingerBill/gb )**|**public domain**|**1**|dynamic strings for C
2016-01-22 17:59:09 +03:00
tests | [utest ](https://github.com/evolutional/utest ) | MIT | **1** | unit testing
tests | [catch ](https://github.com/philsquared/Catch ) | Boost | **1** | unit testing
tests | [SPUT ](http://www.lingua-systems.com/unit-testing/ ) | BSD | **1** | unit testing
tests | [pempek_assert.cpp ](https://github.com/gpakosz/Assert/tree/master/src ) | **WTFPLv2** | 2 | flexible assertions in C++
user interface|[dear imgui](https://github.com/ocornut/imgui)|MIT|_many_|an immediate-mode GUI formerly named "ImGui"
2016-01-22 18:01:56 +03:00
misc | ** [MakeID.h ](http://www.humus.name/3D/MakeID.h )**|**public domain**|**1**|allocate/deallocate small integer IDs efficiently
misc | ** [loguru ](https://github.com/emilk/loguru )**|**public domain**|**1**|flexible logging for C++
2016-01-22 17:59:09 +03:00
misc | [tinyformat ](https://github.com/c42f/tinyformat ) | Boost | **1** | C++ typesafe printf
misc | [dbgtools ](https://github.com/wc-duck/dbgtools ) | zlib | 2 | cross-platform debug util libraries
misc | [stmr ](https://github.com/wooorm/stmr.c ) | MIT | 2 | extract English word stems
misc | [levenshtein ](https://github.com/wooorm/levenshtein.c ) | MIT | 2 | compute edit distance between two strings
There are also these XML libraries, but if you're using XML, shame on you:
- parsing: [tinyxml2 ](https://github.com/leethomason/tinyxml2 ): XML
- parsing: [pugixml ](http://pugixml.org/ ): XML (MIT license)
2015-09-27 18:13:09 +03:00
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!
2015-10-09 12:11:28 +03:00
Also you might be interested in other related, but different lists:
- [clib ](https://github.com/clibs/clib/wiki/Packages ): list of (mostly) small single C functions (licenses not listed)
2015-09-27 18:13:09 +03:00
2015-09-27 18:14:48 +03:00
## *List FAQ*
2015-09-27 18:13:09 +03:00
2015-09-27 18:14:48 +03:00
### Can I link directly to this list?
2015-09-27 18:13:09 +03:00
2015-09-27 18:14:48 +03:00
Yes, you can just use this page. If you want a shorter, more readable link, you can use [this URL ](https://github.com/nothings/stb#other_libs ) to link to the FAQ question that links to this page.
2015-09-27 18:13:09 +03:00
2015-09-27 18:14:48 +03:00
### Why isn't library XXX which is made of 3 or more files on this list?
2015-09-27 18:13:09 +03:00
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.
2015-09-27 18:14:48 +03:00
### Why isn't library XXX which is at most two files and has minimal other dependencies on this list?
2015-09-27 18:13:09 +03:00
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'.
2015-09-27 18:16:13 +03:00
### Why isn't SQLite's amalgamated build on this list?
Come on.