Skip to content

A list of awesome C libraries and OTHER tips

Shiva Karthick edited this page Dec 11, 2023 · 2 revisions

Important libraries for projects

C Utility libraries

Awesome C libraries and tools links

library from stb description
stb_ds.h typesafe dynamic array and hash tables for C, will compile in C++
stb_sprintf.h fast sprintf, snprintf for C/C++
stb_sprintf.h fast sprintf, snprintf for C/C++

What are your picks for the best C libraries

  • Standard libraries
#include<stdio.h> // of course
#include <stdlib.h> // also of course
#include <string.h>
#include <ctype.h>

Some of the libraries we need are: *

Categories:

AI

library license API files description
Genann zlib C/C++ 2 simple neural networks (ANN)
KANN MIT C/C++ 2 automatic differentiation (2 files)
micropather zlib C++ 2 pathfinding with A*

argv

library license API files description
Argh! BSD C++ 1 command-line argument parsing
Clara Boost C++ 1 composable, command line parser for C++ 11 and beyond
CLI11 BSD C++ 1 Feature-rich CLI parsing in modern C++11
cmdline BSD C++ 1 command-line argument parsing
flags public domain C++ 1 command-line argument parsing
kgflags MIT C/C++ 1 command-line argument parsing
linkom MIT C/C++ 1 command-line argument parsing w/ DOS-style options
optionparser MIT C++ 1 command-line argument parsing
parg public domain C 2 command-line argument parsing
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
btac1c MIT C/C++ 1 MS-IMA_ADPCM variant
dr_flac public domain C/C++ 1 FLAC audio decoder
dr_wav public domain C/C++ 1 WAV audio loader
Geneva MIT C/C++ 1 Library generating 8-bit waveforms of various kinds
minimp3 CC0 C 1 Minimalistic MP3 decoder with sse/neon support
miniaudio public domain C/C++ 1 Audio playback and capture library
pocketmod MIT C/C++ 1 ProTracker MOD file renderer
sts_mixer public domain C/C++ 1 simple stereo audio mixer
tinysound zlib C/C++ 1 direct sound audio mixer & WAV loader
TinySoundFont MIT C/C++ 1 SoundFont2 loader & synthesizer

compression

library license API files description
dmc_unrar GPLv2+ C/C++ 1 RAR file decompression
fastlz MIT C/C++ 2 fast but larger LZ compression
lz4 BSD C/C++ 2 fast but larger LZ compression
miniz.c MIT C/C++ 1 compression, decompression, ZIP file, PNG writing
microtar MIT C/C++ 2 lightweight tar library
pithy BSD C/C++ 2 fast but larger LZ compression

crypto

library license API files description
Monocypher public domain C 2 high-quality small cryptography library
TweetNaCl public domain C 2 high-quality tiny cryptography library

data structures

library license API files description
avl public domain C/C++ 2 AVL tree
c-bool-value WTFPLv2 C/C++ 1 Simple and easy boolean values in standard c
chobo-shl MIT C++ 1 several C++11 standard contaner like libraries and helpers
DG_dynarr.h public domain C/C++ 1 typesafe dynamic arrays (like std::vector) for plain C
DynaVar GPL-3.0 C++ 1 Object which can store any type of primitive data type
klib MIT C/C++ 2 many 2-file libs: hash, sort, b-tree, etc
libpqueue BSD C/C++ 2 priority queue (heap)
minilibs public domain C 2 two-file binary tress (also regex, etc)
PackedArray WTFPLv2 C 2 memory-efficient array of elements with non-pow2 bitcount
simclist BSD C/C++ 2 linked-list
selist ISC C/C++ 2 space-efficient linked-list
mempool MIT C++ 1 Efficient minimal memory pool implementation for C++
uthash BSD C/C++ 2 several 1-header, 1-license-file libs: generic hash, list, etc

debugging

library license API files description
dbgtools zlib C/C++ 2 cross-platform debug util libraries
debug-assert zlib C++ 1 modular assertion macro
debugbreak BSD C/C++ 1 programmatic debug break
loguru public domain C++ 1 flexible logging
pempek_assert.cpp WTFPLv2 C++ 2 flexible assertions

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
dirent MIT C/C++ 1 dirent for Windows: retrieve file & dir info
tfile MIT C++ 1 FILE* wrapper does read-write-append-seek-close (Win/Mac/Unix)
TinyDir BSD C 1 cross-platform directory reading (Win/POSIX/MinGW)
tinyfiles zlib C/C++ 1 cross-platform directory reading (Win/Mac/Unix)
whereami WTFPLv2 C/C++ 2 get path/filename of executable or module

geometry file

library license API files description
cgltf MIT C 1 glTF 2.0 file loader
fast_obj.h MIT C 1 wavefront OBJ file loader
objzero MIT C 2 wavefront 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
tk_objfile MIT C/C++ 1 OBJ file loader
yocto_obj.h MIT C/C++ 1 wavefront OBJ file loader

geometry math

library license API files description
Clipper Boost C++ 2 line & polygon clipping & offsetting
df public domain C/C++ 1 find voronoi region in linear time of size of lattice
jc_voronoi MIT C/C++ 1 find voronoi regions on float/double data
nanoflann BSD C++ 1 build KD trees for point clouds
nv_voronoi.h public domain C/C++ 1 find voronoi regions on lattice w/ integer inputs
par_msquares MIT C/C++ 1 convert (binarized) image to triangles
par_shapes MIT C/C++ 1 generate various 3d geometric shapes
PolyPartition MIT C++ 2 polygon triangulation, partitioning
rjm_mc.h public domain C/C++ 1 marching cubes triangulator
sobol.h public domain C/C++ 1 sobol & stratified sampling sequences
sdf.h MIT C/C++ 1 compute signed-distance field from antialiased image
Tomas Akenine-Moller snippets public domain C/C++ 2 various 3D intersection calculations, not lib-ified
Voxelizer MIT C/C++ 1 convert triangle mesh to voxel triangle mesh
xatlas MIT C++ 2 mesh parameterization
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 (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
Cimg CeCILL/CeCILL-C C++ 1 image processing toolkit (60K LoC)
Immediate2D public domain C++ 2 zero-configuration, immediate-mode 2D graphics for Windows
noc_turtle MIT C/C++ 2 procedural graphics generator
tigr public domain C/C++ 2 quick-n-dirty window text/graphics for Windows and macOS

graphics (3d)

library license API files description
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
mikktspace zlib C/C++ 2 compute tangent space for normal mapping
rjm_raytrace.h public domain C/C++ 1 minimalistic SSE packet raytracer for offline baking
seamoptimizer public domain C/C++ 1 modify lightmap data to hide seams
sokol_gfx.h MIT C/C++ 1 cross-platform 3D API wrapper (GLES2+3/GL3/D3D11/Metal)
Swarmz public domain C++ 1 swarming/flocking algorithm
tinygizmo public domain C++ 2 gizmo objects for interactively editing 3d transformations
Vertex Cache Optimizer public domain C/C++ 1 vertex cache optimization of meshes
Vulkan Memory Allocator MIT C/C++ 1 memory allocator for Vulkan
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

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
EXR miniexr public domain C++ 2 OpenEXR writer, needs header file
EXR tinyexr BSD C/C++ 1 EXR image read/write, uses miniz internally
GIF gif.h public domain C++ 1 animated GIF writer (can only include once)
GIF gif_load public domain C/C++ 1 (animated) GIF reader
GIF jo_gif.cpp public domain C++ 1 animated GIF writer (CPP file can also be used as H file)
JPG jpeg-compressor public domain C++ 2 2-file JPEG compress, 2-file JPEG decompress
JPG NanoJPEG MIT C/C++ 1 JPEG decoder
JPG tiny_jpeg.h public domain C/C++ 1 JPEG encoder
JPG EXIF easyexif MIT C++ 2 EXIF metadata extractor for JPEG images
JPG EXIF TinyEXIF BSD C++ 2 Parse EXIF data from JPEG (XMP w/ TinyXML2 lib)
PDF PDFgen public domain C 2 PDF writer
PNG lodepng zlib C/C++ 2 PNG encoder/decoder
PNG picopng.cpp zlib C++ 2 tiny PNG loader
PNG TinyPngOutput LGPLv3 C/C++ 2 PNG writer
PNM PNM Apache 2.0 C++ 1 PBM, PGM and PPM reader and writer
SVG nanoSVG zlib C/C++ 1 1-file SVG parser; 1-file SVG rasterizer
cro_mipmap.h public domain C/C++ 1 average, min, max mipmap generators
rjm_texbleed.h public domain C/C++ 1 Fills in the color of pixels where alpha==0

math

library license API files description
amoeba MIT C/C++ 1 constraint solver (Cassowary) w/Lua binding
fft public domain C++ 1 Fast Fourier Transform
PoissonGenerator.h MIT C++ 1 Poisson disk points generator (disk or rect)
prns.h public domain C/C++ 1 seekable pseudo-random number sequences
rnd.h public domain C/C++ 1 pseudo-random number generation
ShaderFastLibs MIT C++ 1 (also HLSL) approximate transcendental functions optimized for shaders (esp. GCN)
simrank.hpp MIT C++ 2 SimRank graph similarity algorithm
SummedAreaTable MIT C++ 1 Summed-Area Table generation and sum/avg queries
TinyExpr zlib C 2 evaluation of math expressions from strings

multithreading

library license API files description
bikeshed.h MIT C/C++ 1 cross-platform lock free fixed memory hierarchical work scheduler
mm_sched.h zlib C/C++ 1 cross-platform multithreaded task scheduler based on enkiTS
thread.h public domain C/C++ 1 cross-platform thread primitives
TinyCThread zlib C/C++ 2 cross-platform implementation of the C11 Threads API
TinyThread++ zlib C++ 2 cross-platform implementation of the C++11 Threads API

network

library license API files description
civetweb MIT C/C++ 2 HTTP server, fork of Mongoose
EWS BSD C/C++ 1 HTTP server
happyhttp zlib C++ 2 HTTP client requests
http public domain C/C++ 1 HTTP get/post
libcluon MPL-2.0 C++ 1 cross-platform socket wrapper and data marshalling with native implementations for Protobuf, LCM/ZCM, JSON, and MsgPack serialization/deserialization
LUrlParser MIT C++ 2 lightweight URL & URI parser RFC 1738, RFC 3986
mm_web.h BSD C/C++ 1 lightweight webserver, fork of webby
mongoose GPLv2 C/C++ 2 HTTP server
par_easycurl.h MIT C/C++ 1 cURL wrapper
sts_net public domain C/C++ 1 cross-platform socket wrapper (socket sets and packet API)
yocto public domain C/C++ 2 non-production-use HTTP server
zed_net public domain C/C++ 1 cross-platform socket wrapper
znet MIT C/C++ 1 cross-platform networking w/ Lua binding

serialization

library license API files description
archive public domain C++ 1 binary serialize & deserlize w/ STL support
libcluon MPL-2.0 C++ 1 cross-platform data serialization/deserialization with native implementations for Protobuf, LCM/ZCM, JSON, and MsgPack

json

library license API files description
ajson Boost C++ 1 JSON serialize & deserialize w/ STL support
cJSON MIT C/C++ 1 JSON parser
json.h public domain C/C++ 2 JSON parser
json.hpp MIT C++ 1 JSON parse, serialize, deserialize
jzon.h MIT C++ 2 JSON parser
PicoJSON BSD C++ 1 JSON parse/serializer
parson MIT C/C++ 2 JSON parser and serializer

yaml

library license API files description
mini-yaml MIT C++ 2 YAML parser and serializer

csv

library license API files description
CSVstream MIT C++ 1 CSV parser
Fast C++ CSV Parser BSD C++ 1 CSV parser
Rapidcsv BSD C++ 1 CSV parser
Vince's CSV Parser MIT C++ 1 CSV parser and serializer

parsing

library license API files description
cmp MIT C/C++ 2 MessagePack parser and serializer
inih BSD C/C++ 2 .ini file parser
ini.h public domain C/C++ 1 .ini file parser
minilibs public domain C 2 two-file regex (also binary tree, etc)
mm_lexer.h zlib C/C++ 1 C-esque language lexer
SLRE GPLv2 C/C++ 1 regular expression matcher
tinymemfile zlib C++ 1 fscanf on in-memory files

profiling

library license API files description
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
Remotery Apache 2.0 C/C++ 2 CPU/GPU profiler Win/Mac/Linux, using web browser for viewer

scripting

library license API files description
Duktape MIT C 2 embeddable JavaScript engine
MY-BASIC MIT C 2 interpreter for a BASIC dialect scripting language
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)

strings

library license API files description
dfa MIT C/C++ 2 fast UTF-8 decoder (need a header file)
DG_misc.h public domain C/C++ 1 Daniel Gibson's stb.h-esque cross-platform helpers: path/file, strings
gb_string.h public domain C/C++ 1 dynamic strings
Obfuscate public domain C++ 1 Guaranteed compile-time string literal obfuscation library for C++14
inja.hpp MIT C++ 1 template engine
strpool.h public domain C/C++ 1 string interning
str_view.hpp MIT C++ 1 null-termination-aware string-view class
utf8 public domain C/C++ 1 UTF-8 string library

unit testing

library license API files description
catch Boost C++ 1 unit testing
catch2 Boost C++ 1 unit testing
doctest MIT C++ 1 unit testing
fctx BSD C/C++ 1 unit testing
greatest iSC C 1 unit testing
hippomocks LGPL C++ 1 unit testing
labrat public domain C/C++ 1 unit testing
minctest zlib C 1 unit testing
munit MIT C 1 unit testing
SPUT BSD C/C++ 1 unit testing
trompeloeil Boost C++ 1 unit testing
utest MIT C/C++ 1 unit testing
utest.h public domain C/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
libcmdf public domain C 1 a small library for writing CLI applications
linenoise BSD C/C++ 2 terminal readline w/ history etc
noc_file_dialog.h MIT C/C++ 1 file open/save dialogs (Win/Mac/Linux)
nuklear public domain C/C++ 1 minimal GUI toolkit
tinyfiledialogs ZLIB C/C++ 2 modal dialogs inc. file open/save (Win/Mac/Linux)
wcwidth9 Apache 2.0 C 1 platform independent wcwidth with full unicode 9 support

vectors

library license API files description
algebra3.h public domain C++ 1 vector utilities for 2, 3, and 4 element vectors, all inline
ccVector.h public domain C/C++ 1 Vector, quaternion and matrix math
gb_math public domain C/C++ 1 Vector, quaternion and matrix math w/o math.h
Handmade Math public domain C/C++ 1 vector math
linalg.h public domain C++ 1 vector/matrix/quaternion math
linalg ISC C/C++ 1 vector/matrix/quaternion math
mm_vec.h BSD C/C++ 1 SIMD vector math

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
ASAP MIT C++ 1 library for parsing, printing, iterating and operating on dates.
cpp-generators BSD C++ 1 generators in C++
Hedley public domain C/C++ 1 compiler portability, optimization, static analysis, etc.
levenshtein MIT C/C++ 2 compute edit distance between two strings
MakeID.h public domain C++ 1 allocate/deallocate small integer IDs efficiently
picobench MIT C++ 1 microbenchmarking
PlusCallback zlib C++ 1 function/method callbacks
process.h public domain C/C++ 1 process control API
random MIT C++ 1 convenient API for random
sokol_time.h MIT C/C++ 1 cross-platform time measurement
stmr MIT C 2 extract English word stems
tinyformat Boost C++ 1 typesafe printf
tinytime zlib C/C++ 1 quick-and-dirty time elapsed time
visit_struct Boost C++ 2 struct-field reflection

FAQ

  • parsing: tinyxml2: XML (zlib license)
  • parsing: pugixml: XML (MIT license)
  • parsing: yxml: XML (MIT license)
  • 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 SQLite's amalgamated build on this list?

Come on. HAHAHAHAHAHAHAHAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAA