single_file_libs/README.md

435 lines
38 KiB
Markdown
Raw Normal View History

2016-10-07 19:30:47 +03:00
# 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](https://github.com/nothings/stb).
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
2016-12-18 15:47:15 +03:00
specific lilbrary is as advertised, or is quality software.
2016-10-07 19:30:47 +03:00
2016-12-18 16:00:08 +03:00
### 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
2016-12-18 14:34:43 +03:00
Recent additions are marked with _italics_. (The previous system of listing them separately caused too many merge conflicts.)
2016-12-18 14:34:43 +03:00
2016-10-07 19:30:47 +03:00
### 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](https://github.com/clibs/clib/wiki/Packages): list of (mostly) small single C functions (licenses not listed)
2016-12-18 22:11:02 +03:00
- [CCAN](https://ccodearchive.net/list.html): package of lots of shareable C functions (mixed licenses)
2016-10-07 19:30:47 +03:00
### 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.)
2016-10-07 19:39:48 +03:00
### Categories:
2016-12-18 16:00:08 +03:00
- general purpose
- [data structures](#data-structures)
- [string processing](#strings)
- [scripting](#scripting)
2017-02-27 09:44:08 +03:00
- [hashing](#hashing)
2016-12-18 16:00:08 +03:00
- mathematics
- [vector math](#vectors)
- [geometry math](#geometry-math)
- [general math](#math)
- parsing
- [JSON](#json)
2017-02-25 18:13:55 +03:00
- [other serialization](#serialization)
2016-12-18 16:00:08 +03:00
- [argv argument processing](#argv)
- [other parsing](#parsing)
- graphics
2017-02-25 18:38:00 +03:00
- [textmode](#graphics-text)
2016-12-18 16:00:08 +03:00
- [2D graphics](#graphics-2d)
- [3D graphics](#graphics-3d)
- [3D geometry file processing](#geometry-file)
- [image loading, saving, & processing](#images)
- audio/video/data compression
- [compression](#compression)
- [audio processing & files](#audio)
- [video](#video)
2017-02-26 19:13:25 +03:00
- [videogames](#videogames)
2016-12-18 16:00:08 +03:00
- operating system features
- [files and filenames](#files--filenames)
- [multithreading](#multithreading)
- [networking](#network)
- [hardware interfacing](#hardware)
2016-12-18 16:02:45 +03:00
- debugging, profiling, testing
- [debugging](#debugging)
2016-12-18 16:00:08 +03:00
- [profiling](#profiling)
- [unit testing etc.](#tests)
- other
- [AI](#ai)
- [cryptography](#crypto)
- [user interface](#user-interface)
- [miscellaneous](#miscellaneous)
2016-10-07 19:30:47 +03:00
2016-10-07 19:26:53 +03:00
# AI
2016-10-07 19:29:06 +03:00
| library | license | API |files| description
| --------------------------------------------------------------------- |:--------------------:|:---:|:---:| -----------
| [micropather](http://www.grinninglizard.com/MicroPather/) | zlib | C++ | 2 | pathfinding with A\*
| [Genann](https://github.com/codeplea/genann) | zlib |C/C++| 2 | simple neural networks (ANN)
2016-10-07 19:23:00 +03:00
2016-10-07 19:26:53 +03:00
# argv
2016-10-07 19:29:06 +03:00
| library | license | API |files| description
| --------------------------------------------------------------------- |:--------------------:|:---:|:---:| -----------
2016-12-17 15:21:15 +03:00
| [parg](https://github.com/jibsen/parg) | **public domain** | C | 2 | command-line argument parsing
| [flags](https://github.com/sailormoon/flags) | **public domain** | C++ |**1**| command-line argument parsing
2016-12-18 02:40:18 +03:00
| [optionparser](http://optionparser.sourceforge.net/) | MIT | C++ |**1**| command-line argument parsing
| _[cmdline](https://github.com/tanakh/cmdline)_ | BSD | C++ |**1**| command-line argument parsing
2017-03-06 04:24:02 +03:00
| _[linkom](https://github.com/hernandp/linkom)_ | MIT |C/C++|**1**| command-line argument parsing w/ DOS-style options
2016-10-07 19:23:00 +03:00
2016-10-07 19:26:53 +03:00
# audio
2016-10-07 19:29:06 +03:00
| library | license | API |files| description
| --------------------------------------------------------------------- |:--------------------:|:---:|:---:| -----------
| [aw_ima.h](https://github.com/afterwise/aw-ima/blob/master/aw-ima.h) | MIT |C/C++|**1**| IMA-ADPCM audio decoder
|**[dr_flac](https://github.com/mackron/dr_libs)** | **public domain** |C/C++|**1**| FLAC audio decoder
|**[dr_wav](https://github.com/mackron/dr_libs)** | **public domain** |C/C++|**1**| WAV audio loader
|**[sts_mixer](https://github.com/kieselsteini/sts)** | **public domain** |C/C++|**1**| simple stereo audio mixer
2016-12-17 15:37:29 +03:00
| [tinysound](https://github.com/RandyGaul/tinyheaders) | zlib |C/C++|**1**| direct sound audio mixer & WAV loader
| _[btac1c](https://github.com/cr88192/bgbtech_misc/blob/master/mini/btac1c_mini0.h)_| MIT |C/C++|**1**| MS-IMA_ADPCM variant
| _[TinySoundFont](https://github.com/schellingb/TinySoundFont)_ | MIT |C/C++|**1**| SoundFont2 loader & synthesizer
2016-10-07 19:23:00 +03:00
2016-10-07 19:26:53 +03:00
# compression
2016-10-07 19:29:06 +03:00
| library | license | API |files| description
| --------------------------------------------------------------------- |:--------------------:|:---:|:---:| -----------
|**[miniz.c](https://github.com/richgel999/miniz)** |**public domain**|C/C++|**1**| compression,decompression, zip file, png writing
2016-11-14 21:13:37 +03:00
| [lz4](https://github.com/lz4/lz4) | BSD |C/C++| 2 | fast but larger LZ compression
2016-10-07 19:29:06 +03:00
| [fastlz](https://code.google.com/archive/p/fastlz/source/default/source) | MIT |C/C++| 2 | fast but larger LZ compression
| [pithy](https://github.com/johnezang/pithy) | BSD |C/C++| 2 | fast but larger LZ compression
2016-10-07 19:51:57 +03:00
| [microtar](https://github.com/rxi/microtar) | MIT |C/C++| 2 | lightweight tar library
2016-10-07 19:23:00 +03:00
2016-10-07 19:26:53 +03:00
# crypto
2016-10-07 19:23:00 +03:00
| library | license | API |files| description
| --------------------------------------------------------------------- |:--------------------:|:---:|:---:| -----------
| [TweetNaCl](http://tweetnacl.cr.yp.to/software.html) | **public domain** | C | 2 | high-quality tiny cryptography library
2016-10-07 19:27:29 +03:00
# data structures
2016-10-07 19:23:00 +03:00
| library | license | API |files| description
| --------------------------------------------------------------------- |:--------------------:|:---:|:---:| -----------
| [klib](http://attractivechaos.github.io/klib/) | MIT |C/C++| 2 | many 2-file libs: hash, sort, b-tree, etc
| [uthash](https://github.com/troydhanson/uthash) | BSD |C/C++| 2 | several 1-header, 1-license-file libs: generic hash, list, etc
| [PackedArray](https://github.com/gpakosz/PackedArray) | **WTFPLv2** | C | 2 | memory-efficient array of elements with non-pow2 bitcount
| [minilibs](https://github.com/ccxvii/minilibs) | **public domain** | C | 2 | two-file binary tress (also regex, etc)
|**[DG_dynarr.h](https://github.com/DanielGibson/Snippets/)** | **public domain** |C/C++|**1**| typesafe dynamic arrays (like std::vector) for plain C
2016-11-03 21:50:08 +03:00
| [chobo-shl](https://github.com/Chobolabs/chobo-shl) | MIT | C++ |**1**| several C++11 standard contaner like libraries and helpers
2016-11-24 17:12:35 +03:00
| [libpqueue](https://github.com/vy/libpqueue) | BSD |C/C++| 2 | priority queue (heap)
| _[simclist](mij.oltrelinux.com/devel/simclist)_ | BSD |C/C++| 2 | linked-list
| _[selist](https://github.com/ennorehling/clibs)_ | ISC |C/C++| 2 | space-efficient linked-list
| _[avl](https://github.com/etherealvisage/avl)_ | **public domain** |C/C++| 2 | AVL tree
2016-10-07 19:23:00 +03:00
2016-12-18 16:02:45 +03:00
# debugging
| library | license | API |files| description
| --------------------------------------------------------------------- |:--------------------:|:---:|:---:| -----------
| [loguru](https://github.com/emilk/loguru) | **public domain** | C++ |**1**| flexible logging
| [pempek_assert.cpp](https://github.com/gpakosz/Assert) | **WTFPLv2** | C++ | 2 | flexible assertions
| [debug-assert](https://github.com/foonathan/debug_assert) | zlib | C++ |**1**| modular assertion macro
| [dbgtools](https://github.com/wc-duck/dbgtools) | zlib |C/C++| 2 | cross-platform debug util libraries
# files & filenames
2016-10-07 19:23:00 +03:00
| library | license | API |files| description
| --------------------------------------------------------------------- |:--------------------:|:---:|:---:| -----------
|**[DG_misc.h](https://github.com/DanielGibson/Snippets/)** | **public domain** |C/C++|**1**| Daniel Gibson's stb.h-esque cross-platform helpers: path/file, strings
| [whereami](https://github.com/gpakosz/whereami) | **WTFPLv2** |C/C++| 2 | get path/filename of executable or module
| [dirent](https://github.com/tronkko/dirent) | MIT |C/C++|**1**| dirent for windows: retrieve file & dir info
2016-12-17 15:37:29 +03:00
| [TinyDir](https://github.com/cxong/tinydir) | BSD | C |**1**| cross-platform directory reading (win/posix/mingw)
| [tinyfiles](https://github.com/RandyGaul/tinyheaders) | zlib |C/C++|**1**| cross-platform directory reading (win/mac/unix)
2016-10-07 19:23:00 +03:00
2016-10-07 19:26:53 +03:00
#geometry file
2016-10-07 19:23:00 +03:00
| library | license | API |files| description
| --------------------------------------------------------------------- |:--------------------:|:---:|:---:| -----------
| [tk_objfile](https://github.com/joeld42/tk_objfile) | MIT |C/C++|**1**| OBJ file loader
| [tinyply](https://github.com/ddiakopoulos/tinyply) | **public domain** | C++ | 2 | PLY mesh file loader
| [tinyobjloader](https://github.com/syoyo/tinyobjloader) | MIT | C++ |**1**| wavefront OBJ file loader
| [tinyobjloader-c](https://github.com/syoyo/tinyobjloader-c) | MIT | C |**1**| wavefront OBJ file loader
| [yocto_obj.h](https://github.com/xelatihy/yocto-gl) | MIT |C/C++|**1**| wavefront OBJ file loader
2016-10-07 19:26:53 +03:00
#geometry math
2016-10-07 19:23:00 +03:00
| library | license | API |files| description
| --------------------------------------------------------------------- |:--------------------:|:---:|:---:| -----------
|**[nv_voronoi.h](http://www.icculus.org/~mordred/nvlib/)** | **public domain** |C/C++|**1**| find voronoi regions on lattice w/ integer inputs
2016-12-17 15:52:11 +03:00
|**[df](https://github.com/983/df)** | **public domain** |C/C++|**1**| find voronoi region in linear time of size of lattice
2016-10-07 19:23:00 +03:00
|**[sobol.h](https://github.com/Marc-B-Reynolds/Stand-alone-junk/)** | **public domain** |C/C++|**1**| sobol & stratified sampling sequences
| [sdf.h](https://github.com/memononen/SDF) | MIT |C/C++|**1**| compute signed-distance field from antialiased image
| [nanoflann](https://github.com/jlblancoc/nanoflann) | BSD | C++ |**1**| build KD trees for point clouds
| [jc_voronoi](https://github.com/JCash/voronoi) | MIT |C/C++|**1**| find voronoi regions on float/double data
| [par_msquares](https://github.com/prideout/par) | MIT |C/C++|**1**| convert (binarized) image to triangles
| [par_shapes](http://github.prideout.net/shapes) | MIT |C/C++|**1**| generate various 3d geometric shapes
| [Tomas Akenine-Moller snippets](http://tinyurl.com/ht79ndj) | **public domain** |C/C++| 2 | various 3D intersection calculations, not lib-ified
| [Clipper](http://www.angusj.com/delphi/clipper.php) | Boost | C++ | 2 | line & polygon clipping & offsetting
| [PolyPartition](https://github.com/ivanfratric/polypartition) | MIT | C++ | 2 | polygon triangulation, partitioning
| [Voxelizer](https://github.com/karimnaaji/voxelizer) | MIT |C/C++|**1**| convert triangle mesh to voxel triangle mesh
| [yocto_bvh.h](https://github.com/xelatihy/yocto-gl) | MIT |C/C++|**1**| ray-casting and closest-element queries of bounding-volume hierarchy
| [yocto_shape.h](https://github.com/xelatihy/yocto-gl) | MIT |C/C++|**1**| shape generation, tesselation, normals, etc.
2016-11-12 03:41:19 +03:00
|**[rjm](https://github.com/rmitton/rjm)** | **public domain** |C/C++|**1**| marching cubes triangulator
2016-10-07 19:23:00 +03:00
2017-02-25 18:38:00 +03:00
#graphics (text)
| library | license | API |files| description
| --------------------------------------------------------------------- |:--------------------:|:---:|:---:| -----------
| _[rang](https://github.com/agauniyal/rang)_ | **public domain** | C++ |**1**| cross-platform colored console text
2017-02-25 18:38:00 +03:00
2016-10-07 19:26:53 +03:00
#graphics (2d)
2016-10-07 19:23:00 +03:00
| library | license | API |files| description
| --------------------------------------------------------------------- |:--------------------:|:---:|:---:| -----------
2016-10-08 12:33:55 +03:00
| [blendish](https://bitbucket.org/duangle/oui-blendish/src) | MIT |C/C++| 1 | blender-style widget rendering using NanoVG
2016-10-07 19:23:00 +03:00
| [tigr](https://bitbucket.org/rmitton/tigr/src) | **public domain** |C/C++| 2 | quick-n-dirty window text/graphics for Windows and OSX
| [noc_turtle](https://github.com/guillaumechereau/noc) | MIT |C/C++| 2 | procedural graphics generator
| _[Cimg](http://cimg.eu/)_ | CeCILL/CeCILL-C | C++ |**1**| image processing toolkit (60K LoC)
2016-10-07 19:23:00 +03:00
2016-10-07 19:26:53 +03:00
#graphics (3d)
2016-10-07 19:23:00 +03:00
| library | license | API |files| description
| --------------------------------------------------------------------- |:--------------------:|:---:|:---:| -----------
| [yocto_trace.h](https://github.com/xelatihy/yocto-gl) | MIT |C/C++|**1**| physically-based unidirectional path tracer w/ MIS for direct lights
| [yocto_symrigid.h](https://github.com/xelatihy/yocto-gl) | MIT |C/C++|**1**| rigid body simulator (sequential impulse/PGS) with support for concave objects
| [mikktspace](https://developer.blender.org/diffusion/B/browse/master/intern/mikktspace) | zlib |C/C++| 2 | compute tangent space for normal mapping
2016-10-07 19:23:00 +03:00
| [debug-draw](https://github.com/glampert/debug-draw) | **public domain** | C++ |**1**| API-agnostic immediate-mode debug rendering
| _[Swarmz](https://github.com/Cultrarius/Swarmz)_ | **public domain** | C++ |**1**| swarming/flocking algorithm_
2017-03-03 11:28:29 +03:00
|**[lightmapper](https://github.com/ands/lightmapper#lightmapper)** | **public domain** |C/C++|**1**| use your OpenGL renderer to offline bake lightmaps
|_**_[seamoptimizer](https://github.com/ands/seamoptimizer)**_ | **public domain** |C/C++|**1**| modify lightmap data to hide seams
2016-10-07 19:23:00 +03:00
2016-10-07 19:26:53 +03:00
#hardware
2016-10-07 19:23:00 +03:00
| library | license | API |files| description
| --------------------------------------------------------------------- |:--------------------:|:---:|:---:| -----------
|**[EasyTab](https://github.com/ApoorvaJ/EasyTab)** | **public domain** |C/C++|**1**| multi-platform tablet input
| [libue](https://github.com/houqp/libue) | MIT |C/C++| 1 | Helper library for Linux device hot-plug event
2016-10-07 19:23:00 +03:00
2017-02-27 09:44:08 +03:00
#hashing
| library | license | API |files| description
| --------------------------------------------------------------------- |:--------------------:|:---:|:---:| -----------
| _[xxHash](https://github.com/Cyan4973/xxHash)_ | BSD |C/C++| 2 | fast hash function
2016-10-07 19:26:53 +03:00
#images
2016-10-07 19:23:00 +03:00
| library | license | API |files| description
| --------------------------------------------------------------------- |:--------------------:|:---:|:---:| -----------
| [jo_gif.cpp](http://www.jonolick.com/home/gif-writer) | **public domain** | C++ |**1**| animated GIF writer (CPP file can also be used as H file)
2016-10-17 08:17:43 +03:00
| [gif.h](https://github.com/ginsweater/gif-h) | **public domain** | C++ |**1**| animated GIF writer (can only include once)
2016-10-07 19:23:00 +03:00
|**[tiny_jpeg.h](https://github.com/serge-rgb/TinyJPEG/)** | **public domain** |C/C++|**1**| JPEG encoder
2016-11-12 03:41:19 +03:00
|**[gif_load](https://github.com/hidefromkgb/gif_load)** | **public domain** |C/C++|**1**| (animated) GIF reader
2016-10-07 19:23:00 +03:00
| [miniexr](https://github.com/aras-p/miniexr) | **public domain** | C++ | 2 | OpenEXR writer, needs header file
| [tinyexr](https://github.com/syoyo/tinyexr) | BSD |C/C++|**1**| EXR image read/write, uses miniz internally
| [lodepng](http://lodev.org/lodepng/) | zlib |C/C++| 2 | PNG encoder/decoder
| [nanoSVG](https://github.com/memononen/nanosvg) | zlib |C/C++|**1**| 1-file SVG parser; 1-file SVG rasterizer
| [picopng.cpp](http://lodev.org/lodepng/picopng.cpp) | zlib | C++ | 2 | tiny PNG loader
| [jpeg-compressor](https://github.com/richgel999/jpeg-compressor) | **public domain** | C++ | 2 | 2-file jpeg compress, 2-file jpeg decompress
| [easyexif](https://github.com/mayanklahiri/easyexif) | MIT | C++ | 2 | EXIF metadata extractor for JPEG images
2016-12-18 14:58:34 +03:00
| [TinyEXIF](https://github.com/cdcseacave/TinyEXIF) | BSD | C++ | 2 | Parse EXIF data from JPEG (XMP w/ TinyXML2 lib)
2016-10-07 19:23:00 +03:00
|**[cro_mipmap.h](https://github.com/thebeast33/cro_lib)** | **public domain** |C/C++|**1**| average, min, max mipmap generators
2016-11-16 12:19:41 +03:00
| [PDFgen](https://github.com/AndreRenaud/PDFGen) | **public domain** | C | 2 | PDF writer |
2016-10-07 19:23:00 +03:00
2016-10-07 19:26:53 +03:00
#math
2016-10-07 19:23:00 +03:00
| library | license | API |files| description
| --------------------------------------------------------------------- |:--------------------:|:---:|:---:| -----------
| [ShaderFastLibs](https://github.com/michaldrobot/ShaderFastLibs) | MIT | C++ |**1**| (also HLSL) approximate transcendental functions optimized for shaders (esp. GCN)
| [TinyExpr](https://github.com/codeplea/tinyexpr) | zlib | C | 2 | evaluation of math expressions from strings
| [PoissonGenerator.h](https://github.com/corporateshark/poisson-disk-generator) | MIT | C++ |**1**| Poisson disk points generator (disk or rect)
| [prns.h](http://marc-b-reynolds.github.io/shf/2016/04/19/prns.html) | **public domain** |C/C++|**1**| seekable pseudo-random number sequences
2016-12-19 12:56:50 +03:00
| [amoeba](https://github.com/starwing/amoeba) | MIT |C/C++|**1**| constraint solver (Cassowary) w/Lua binding
2016-12-18 04:14:53 +03:00
| [simrank.hpp](https://github.com/roukaour/simrank) | MIT | C++ | 2 | SimRank graph similarity algorithm
2017-03-04 12:52:02 +03:00
|_**[rnd.h](https://github.com/mattiasgustavsson/libs)**_ | **public domain** |C/C++|**1**| pseudo-random number generation
2016-10-07 19:23:00 +03:00
2016-10-07 19:26:53 +03:00
#multithreading
2016-10-07 19:23:00 +03:00
| library | license | API |files| description
| --------------------------------------------------------------------- |:--------------------:|:---:|:---:| -----------
2016-10-08 12:33:55 +03:00
| [mm_sched.h](https://github.com/vurtun/mmx) | zlib |C/C++|**1**| cross-platform multithreaded task scheduler based on [enkiTS](https://github.com/dougbinks/enkiTS)
2017-02-25 18:51:28 +03:00
| _[oosmos](http://oosmos.com/)_ | GPLv2 |C/C++| 2 | threadless concurrency
2017-02-26 19:12:49 +03:00
|_**[thread.h](https://github.com/mattiasgustavsson/libs)**_ | **public domain** |C/C++|**1**| cross-platform thread primitives
2016-10-07 19:23:00 +03:00
2016-10-07 19:26:53 +03:00
#network
2016-10-07 19:23:00 +03:00
| library | license | API |files| description
| --------------------------------------------------------------------- |:--------------------:|:---:|:---:| -----------
2016-10-08 19:40:33 +03:00
|**[zed_net](https://github.com/Smilex/zed_net)** | **public domain** |C/C++|**1**| cross-platform socket wrapper
2016-10-07 19:23:00 +03:00
|**[sts_net](https://github.com/kieselsteini/sts)** | **public domain** |C/C++|**1**| cross-platform socket wrapper (socket sets and packet API)
| [znet](https://github.com/starwing/znet) | MIT |C/C++|**1**| cross-platform networking w/ lua binding
2016-10-07 19:23:00 +03:00
| [mm_web.h](https://github.com/vurtun/mmx) | BSD |C/C++|**1**| lightweight webserver, fork of webby
| [yocto](https://github.com/tom-seddon/yhs) | **public domain** |C/C++| 2 | non-production-use http server
| [mongoose](https://github.com/cesanta/mongoose) |_GPLv2_ |C/C++| 2 | http server
2017-02-25 18:51:28 +03:00
| _[EWS](https://github.com/hellerf/EmbeddableWebServer)_ | BSD |C/C++|**1**| http server
| _[civetweb](https://github.com/civetweb/civetweb)_ | MIT |C/C++| 2 | http server, fork of mongoose
| [par_easycurl.h](https://github.com/prideout/par) | MIT |C/C++|**1**| curl wrapper
| [happyhttp](https://github.com/Zintinio/HappyHTTP) | zlib | C++ | 2 | http client requests
2016-10-07 19:23:00 +03:00
| [LUrlParser](https://github.com/corporateshark/LUrlParser) | MIT | C++ | 2 | lightweight URL & URI parser RFC 1738, RFC 3986
2017-02-25 18:13:55 +03:00
#serialization
| library | license | API |files| description
| --------------------------------------------------------------------- |:--------------------:|:---:|:---:| -----------
| _[archive](https://github.com/voidah/archive)_ |**public domain** | C++ |**1**| binary serialize & deserlize w/ STL support
2017-02-25 18:13:55 +03:00
#json
2016-10-07 19:23:00 +03:00
| library | license | API |files| description
| --------------------------------------------------------------------- |:--------------------:|:---:|:---:| -----------
| [PicoJSON](https://github.com/kazuho/picojson) | BSD | C++ |**1**| JSON parse/serializer
| [json.h](https://github.com/sheredom/json.h) | **public domain** |C/C++| 2 | JSON parser
| [jzon.h](https://github.com/Zguy/Jzon) | MIT | C++ | 2 | JSON parser
| [parson](https://github.com/kgabis/parson) | MIT |C/C++| 2 | JSON parser and serializer
2016-12-18 14:34:43 +03:00
| [json.hpp](https://github.com/nlohmann/json) | MIT | C++ |**1**| JSON parse, serialize, deserialize
| _[cJSON](https://sourceforge.net/projects/cjson/)_ | MIT |C/C++|**1**| JSON parser
| _[ajson](https://github.com/lordoffox/ajson)_ | Boost | C++ |**1**| JSON serialize & deserialize w/ STL support
#parsing
| library | license | API |files| description
| --------------------------------------------------------------------- |:--------------------:|:---:|:---:| -----------
2016-12-18 14:34:43 +03:00
| [SLRE](https://github.com/cesanta/slre) |_GPLv2_ |C/C++|**1**| regular expression matcher
| [mm_lexer.h](https://github.com/vurtun/mmx) | zlib |C/C++|**1**| C-esque language lexer
2016-10-07 19:23:00 +03:00
| [minilibs](https://github.com/ccxvii/minilibs) | **public domain** | C | 2 | two-file regex (also binary tree, etc)
2016-12-17 15:37:29 +03:00
| [tinymemfile](https://github.com/RandyGaul/tinyheaders) | zlib | C++ |**1**| fscanf on in-memory files
2016-12-18 14:58:34 +03:00
| [inih](https://github.com/benhoyt/inih) | BSD |C/C++| 2 | .ini file parser
2017-02-26 19:12:49 +03:00
|_**[ini.h](https://github.com/mattiasgustavsson/libs)**_ | **public domain** |C/C++|**1**| .ini file parser
2016-10-07 19:23:00 +03:00
2016-10-07 19:26:53 +03:00
#profiling
2016-10-07 19:23:00 +03:00
| library | license | API |files| description
| --------------------------------------------------------------------- |:--------------------:|:---:|:---:| -----------
| [Remotery](https://github.com/Celtoys/Remotery) | Apache 2.0 |C/C++| 2 | CPU/GPU profiler Win/Mac/Linux, using web browser for viewer
2016-12-18 14:34:43 +03:00
| [MicroProfile](https://github.com/jonasmr/microprofile) | **public domain** | C++ | 2-4 | CPU (and GPU?) profiler, 1-3 header files, uses miniz internally
2016-12-18 14:58:34 +03:00
| [prof](https://github.com/cyrus-and/prof) | MIT |C/C++|**1**| profiler for Linux
2016-10-07 19:23:00 +03:00
2016-10-07 19:26:53 +03:00
#scripting
2016-10-07 19:23:00 +03:00
| library | license | API |files| description
| --------------------------------------------------------------------- |:--------------------:|:---:|:---:| -----------
| [LIL](http://runtimeterror.com/tech/lil/) | zlib |C/C++| 2 | interpreter for a Tcl-like scripting language
2016-11-14 21:13:37 +03:00
| [lualite](https://github.com/user1095108/lualite) | MIT | C++ |**1**| generate lua bindings in C++
2016-10-07 19:23:00 +03:00
| [Picol](https://chiselapp.com/user/dbohdan/repository/picol/) | BSD |C/C++|**1**| interpreter for a Tcl-like scripting language
2016-11-19 01:12:09 +03:00
| [s7](https://ccrma.stanford.edu/software/snd/snd/s7.html) | BSD |C/C++| 2 | interpreter for a subset of Scheme (R5RS/R7RS)
| [Duktape](http://duktape.org/) | MIT |C| 2 | an embeddable Javascript engine, with a focus on portability and compact footprint.
2016-10-07 19:23:00 +03:00
2016-10-07 19:26:53 +03:00
#strings
2016-10-07 19:23:00 +03:00
| library | license | API |files| description
| --------------------------------------------------------------------- |:--------------------:|:---:|:---:| -----------
|**[DG_misc.h](https://github.com/DanielGibson/Snippets/)** | **public domain** |C/C++|**1**| Daniel Gibson's stb.h-esque cross-platform helpers: path/file, strings
|**[utf8](https://github.com/sheredom/utf8.h)** | **public domain** |C/C++|**1**| utf8 string library
|**[strpool.h](https://github.com/mattiasgustavsson/libs)** | **public domain** |C/C++|**1**| string interning
| [dfa](http://bjoern.hoehrmann.de/utf-8/decoder/dfa/) | MIT |C/C++| 2 | fast utf8 decoder (need a header file)
|**[gb_string.h](https://github.com/gingerBill/gb)** | **public domain** |C/C++|**1**| dynamic strings
2016-10-07 19:26:53 +03:00
#tests
2016-10-07 19:23:00 +03:00
| library | license | API |files| description
| --------------------------------------------------------------------- |:--------------------:|:---:|:---:| -----------
| [utest](https://github.com/evolutional/utest) | MIT |C/C++|**1**| unit testing
| [catch](https://github.com/philsquared/Catch) | Boost | C++ |**1**| unit testing
| [doctest](https://github.com/onqtam/doctest) | MIT | C++ |**1**| unit testing
| [SPUT](http://www.lingua-systems.com/unit-testing/) | BSD |C/C++|**1**| unit testing
| [minctest](https://github.com/codeplea/minctest) | zlib | C |**1**| unit testing
| [greatest](https://github.com/silentbicycle/greatest) | iSC | C |**1**| unit testing
2016-10-27 13:23:01 +03:00
| [µnit](https://github.com/nemequ/munit) | MIT | C |**1**| unit testing
|**[labrat](https://github.com/squarewave/labrat)** | **public domain** |C/C++|**1**| unit testing
2016-12-17 15:52:11 +03:00
| [hippomocks](https://github.com/dascandy/hippomocks) | LGPL | C++ |**1**| unit testing
2016-12-18 14:58:34 +03:00
| [fctx](https://github.com/imb/fctx) | BSD |C/C++|**1**| unit testing
| _[catch](https://github.com/philsquared/Catch)_ | Boost | C++ |**1**| unit testing
2016-10-07 19:23:00 +03:00
2016-10-07 19:26:53 +03:00
#user interface
2016-10-07 19:23:00 +03:00
| library | license | API |files| description
| --------------------------------------------------------------------- |:--------------------:|:---:|:---:| -----------
| [dear imgui](https://github.com/ocornut/imgui) | MIT | C++ | 9 | an immediate-mode GUI formerly named "ImGui"; [3rd-party C wrapper](https://github.com/Extrawurst/cimgui)
| [nuklear](https://github.com/vurtun/nuklear) | **public domain** |C/C++|**1**| minimal GUI toolkit
| [noc_file_dialog.h](https://github.com/guillaumechereau/noc) | MIT |C/C++| 1 | file open/save dialogs (Linux/OSX/Windows)
| [tinyfiledialogs](https://sourceforge.net/projects/tinyfiledialogs/) | ZLIB |C/C++| 2 | modal dialogs inc. file open/save (Linux/OSX/Windows)
2016-12-18 14:59:09 +03:00
| [linenoise](https://github.com/antirez/linenoise) | BSD |C/C++| 2 | terminal readline w/ history etc
| _[wcwidth9](https://github.com/joshuarubin/wcwidth9)_ | Apache 2.0 | C | 1 | platform independent wcwidth with full unicode 9 support
2016-10-07 19:23:00 +03:00
2016-12-18 14:34:43 +03:00
#vectors
| library | license | API |files| description
| --------------------------------------------------------------------- |:--------------------:|:---:|:---:| -----------
| [mm_vec.h](https://github.com/vurtun/mmx) | BSD |C/C++|**1**| SIMD vector math
|**[Handmade Math](https://github.com/StrangeZak/Handmade-Math)** | **public domain** |C/C++|**1**| vector math
|**[gb_math](https://github.com/gingerBill/gb/blob/master/gb_math.h)** | **public domain** |C/C++|**1**| Vector, quaternion and matrix math w/o math.h
|**[ccVector.h](https://github.com/jobtalle/ccVector)** | **public domain** |C/C++|**1**| Vector, quaternion and matrix math
| [linalg.h](https://github.com/sgorsten/linalg) | **public domain** | C++ |**1**| vector/matrix/quaternion math
| [linalg](https://github.com/ilyak/linalg) | ISC |C/C++|**1**| vector/matrix/quaternion math
| [algebra3.h](http://www.animats.com/source/graphics/algebra3.h) | **public domain** | C++ |**1**| vector utilities for 2, 3, and 4 element vectors, all inline
2016-10-07 19:26:53 +03:00
#video
2016-10-07 19:23:00 +03:00
| library | license | API |files| description
| --------------------------------------------------------------------- |:--------------------:|:---:|:---:| -----------
| [jo_mpeg](http://www.jonolick.com/home/mpeg-video-writer) | **public domain** | C++ |**1**| mpeg file writer
2017-02-26 19:12:49 +03:00
#videogames
| library | license | API |files| description
| --------------------------------------------------------------------- |:--------------------:|:---:|:---:| -----------
2017-02-26 19:20:38 +03:00
|_**[app.h](https://github.com/mattiasgustavsson/libs)**_ | **public domain** |C/C++|**1**| Windows-only-but-meant-to-be-cross-platform game-ish framework
2017-02-26 19:12:49 +03:00
2016-10-07 19:26:53 +03:00
#miscellaneous
2016-10-07 19:23:00 +03:00
| library | license | API |files| description
| --------------------------------------------------------------------- |:--------------------:|:---:|:---:| -----------
| [MakeID.h](http://www.humus.name/3D/MakeID.h) | **public domain** | C++ |**1**| allocate/deallocate small integer IDs efficiently
| [tinyformat](https://github.com/c42f/tinyformat) | Boost | C++ |**1**| typesafe printf
2016-12-17 15:52:11 +03:00
| [visit_struct](https://github.com/cbeck88/visit_struct) | Boost | C++ | 2 | struct-field reflection
2016-10-07 19:23:00 +03:00
| [stmr](https://github.com/wooorm/stmr.c) | MIT | C | 2 | extract English word stems
| [levenshtein](https://github.com/wooorm/levenshtein.c) | MIT | C | 2 | compute edit distance between two strings
2016-12-17 15:37:29 +03:00
| [tinytime](https://github.com/RandyGaul/tinyheaders) | zlib |C/C++|**1**| quick-and-dirty time elapsed time
| _[cpp-generators](https://github.com/c-smile/cpp-generators)_ | BSD | C++ |**1**| generators in C++
2017-02-25 22:19:50 +03:00
| [PlusCallback](https://github.com/codeplea/pluscallback) | zlib | C++ |**1**| function/method callbacks
2017-02-25 17:35:50 +03:00
2016-10-07 21:05:41 +03:00
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)
## 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?
2016-10-08 03:39:48 +03:00
Yes. [This is the preferred link.](https://github.com/nothings/single_file_libs)
2016-10-07 21:05:41 +03:00
### 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.