Awesome C
A curated list of C good stuff. This list contains only open source code (as defined by
the linked Open Source Definition), and sellers who aren’t evil for
physical resources.
This is released under a Creative Commons-Attribution-ShareAlike
license, version 4 (SPDX code CC-BY-SA-4.0). You can find
its text in the LICENSE file.
An important note: This project does not
index anything C++-related; only pure C stuff is considered.
Note for contributors: If you want to make a pull
request, please read CONTRIBUTING.md first.
Contents
AI
Computer vision, neural nets, machine learning, and other similar
things. Basically, if your university calls it AI, it lives here.
- ccv - C-based/Cached/Core Computer
Vision library; modern computer vision.
BSD-3-Clause
- Cranium - Portable,
header-only ANN library in C99.
MIT
- FANN - Fast Artifical
Neural Network library; an implementation of neural networks.
GPL-2.0-only
- Genann - Simple ANN in
C89, without additional dependencies.
Zlib
- KANN -
Two-file ANN library.
MIT
- LibDEEP - Deep
learning library.
BSD-3-Clause
- m2cgen - A
CLI tool to transpile trained classic ML models into a native C code
with zero dependencies.
MIT
- sod - An Embedded Computer
Vision & Machine Learning Library [
GPL-3][GPL-3]
Benchmarking
Comparing the performance of various subsystems across different
chip/system architectures.
Build Systems
Tools that automate the building and testing of projects in C.
- Autotools
- Also known as the GNU build system (automake, autoconf, libtool…) is
one of the most widely used build systems (configure && make).
GPL-1.0-or-later
- Autotools
project skeleton - A simple autotools skeleton (template) to quickly
bootstrap new projects.
BSD-2-Clause
- CMake - Cross-platform family of
tools designed to build, package and test software.
BSD-3-Clause
- GNU Make - Tool
which controls the generation of executables and other non-source files
of a program.
GPL-3.0-or-later
- Meson - Extremely fast,
user-friendly build system. Based on Ninja.
Apache-2.0
- Premake - Command-line
utility which reads a scripted definition of a software project and uses
it to generate project files for Visual Studio and GNU Make. Other
targets are also being worked on.
BSD-3-Clause
- SCons - Software construction
tool using Python.
MIT
- xmake - Cross-platform build
utility.
Apache-2.0
- zproject - Project
generator and build system support tool.
MPL-2.0
Compilers
Compilers, as well as compiler- and compilation-related tooling.
- ccache - Compiler cache designed
to speed up recompilation.
GPL-3.0-or-later
- Clang - Compiler for LLVM.
Supports C11.
NCSA
- cproc - A C11 compiler
using QBE as a backend.
ISC
- distcc - Program that
allows builds to be distributed among several machines.
GPL-2.0-or-later
- Firm - Library that
provides a graph-based intermediate representation, optimizations and
assembly code generation suitable for use in compilers. Comes with an
example C front-end under the same license.
LGPL-2.1-only
- GCC - Provides a C compiler as
part of its compiler set. Supports C11.
GPL-3.0-or-later
- PCC - Venerable compiler.
Supports C99. Various
licenses, all open source.
Compression
- blosc -
Extremely fast, multi-threaded, meta-compressor library. Various
licenses, all open source.
- Brotli -
General-purpose lossless compression algorithm library. Has speeds
comparable to DEFLATE, but much higher compression ratios.
MIT.
- clzip - C version of
the high-quality data compressor Lzip (LZMA implementation).
GPL-2.0-or-later
- CRoaring - C
implementation of Roaring
bitmaps.
Apache-2.0
- FiniteStateEntropy
- Two highly efficient compression codecs optimized for modern CPUs.
BSD-2-Clause
- DENSITY -
Super-fast compression library.
BSD-3-Clause
- heatshrink
- Data compression/decompression library for embedded and real-time
systems.
ISC
- fast_zlib -
Improved zlib, which runs 2 to 10 times faster.
BSD-3-Clause
- fastLZ -
Lightning-fast lossless compression library (LZ77 type). Embbedable on
small target like ARM Cortex-M families. Source code directly embbedable
on your project ( a pair of h/c files), no dynamic memory allocation.
MIT
- huffandpuff -
Minimal Huffman encoder and decoder. Public domain.
- libzip - C library
for reading, creating and modifying zip archives.
BSD-3-Clause
- libbzip2 - Patent-free,
high-quality data compression library.
BSD-4-Clause
- Lizard - Formerly
LZ5; an efficient compressor with fast decompression. Achieves
compression ratios comparable with zip and zlib at decompression speeds
of 1000MB/s and faster.
BSD-2-Clause
- lz4 - Library for an
extremely fast compression algorithm.
BSD-2-Clause
- lzo - Fast
data compression library.
GPL-2.0-or-later
- pixz - Parallel, indexed
xz compressor.
BSD-2-Clause
- shoco -
Compressor for small text strings.
MIT
- SIMDComp - Simple
library for compressing lists of integers using binary packing. Makes
use of SIMD instructions on x86.
BSD-3-Clause
- smaz - Efficient
string compression library.
BSD-3-Clause
- squash - Compression
abstraction library, complete with some utilities.
MIT
- TurboPFor -
Fastest integer compression.
GPL-2.0-or-later
- TurboRLE - Most
efficient run-length encoding.
GPL-2.0-or-later
- zip - Really really
small zip archive processing library.
Unlicense
- Zlib - Massively spiffy yet delicately
unobtrusive compression library.
BSD-3-Clause
- libarchive -
libarchive is a portable, efficient C library that can read and write
streaming archives in a variety of formats.
BSD-3-Clause
- zlib-ng - Zlib
replacement with optimizations for ‘next-generation’ systems.
BSD-3-Clause
- Zstandard - Fast,
lossless compression algorithm, targeting real-time compression
scenarios at zlib-level or better compression ratios.
BSD-3-Clause
Concurrency and Parallelism
- cchan - Small library
for channel constructs for inter-thread communication. Public
domain.
- checkedthreads - A
simple library for parallelism, with built-in checking for race
conditions.
BSD-2-Clause
- ck - Concurrency primitives,
safe memory reclamation mechanisms and non-blocking data structures.
BSD-2-Clause
- FCFS RWLock -
First-come first-served Readers/Writers lock for POSIX threads.
CC0-1.0
- Libaco - A blazing fast
and lightweight C asymmetric coroutine library.
Apache-2.0
- libconcurrent
- Concurrent programming library, using coroutines, for C11.
BSD-3-Clause
- libcsp - High
performance concurrency C library influenced by the CSP model.
MIT
- libdill - Library which makes
structured concurrent programming easy.
MIT
- libhl - Library
implementing a thread-safe API to manage a range of data structures.
Also provides some supporting functions and structures for concurrent
and lockfree programming.
LGPL-3.0-only
- liburcu - Data synchronization
library, which scales linearly with the number of cores.
LGPL-2.1-or-later
- mill - Go-style concurrency.
MIT
- oclkit - Two-file
OpenCL wrapper.
GPL-3.0-or-later
- OCL-MLA - OpenCL
Mid-Level Abstractions.
BSD-3-Clause
- OpenMP - Set of pragmas
designed to allow for easy parallelization of code. Standard (licensing
not applicable).
- Open MPI - Message
passing interface implementation.
BSD-3-Clause
- pal - Optimized
library for maths, parallel processing and data movement.
Apache-2.0
- pth - Portable
implementation for non-preemptive priority-based scheduling for multiple
threads of execution.
GPL-3.0-or-later
- pthreads -
POSIX thread library. Standard (no license applicable).
- TinyCThread - Portable,
small implementation of the C11 threads API.
Zlib
Crypto
Mostly library implementations of well-known cryptographic algorithms
or protocols.
- GNU SASL -
Implementation of the Simple Authentication and Security Layer and a few
common SASL mechanism.
GPL-3.0-or-later
- GnuTLS - Secure communication
library, implementing SSL, TLS and DTLS.
LGPL-2.1-or-later
- libgcrypt
- General-purpose cryptography library, with a range of available
ciphers.
LGPL-2.1-or-later
- OpenSSL - Implementation of
the SSL and TLS protocols. Also includes a cryptography library. Dual Licensed under
the OpenSSL License and the SSLeay License.
- liboqs - Library for
quantum-resistant cryptographicl algorithms.
MIT
- libsodium - Modern
and easy-to-use crypto library.
MIT
- libtomcrypt - Fairly
comprehensive, modular and portable cryptographic toolkit. Public
domain.
- mbed TLS - Another crypto
implementation.
Apache-2.0
- MIRACL -
Multiprecision Integer and Rational Arithmetic Cryptographic Library; an
SDK for elliptic curve cryptography.
AGPL-3.0-or-later
- retter -
Collection of hash functions, ciphers, tools, libraries and materials
related to cryptography and security. Public domain.
- s2n - C99
implementation of the TLS/SSL protocols, designed to be simple, fast and
with security as a priority.
Apache-2.0
- sphlib - Set of
implementations of various hash functions, including several
cryptographic ones.
MIT
- trezor-crypto
- Heavily optimized crypto algorithms for embedded devices.
MIT
- bfish - A single
include ANSI-C Blowfish ECB crypto library. Public domain.
Database
Databases and data stores with C APIs.
- BerkeleyDB
- Library for a high-performance embedded database for key-value data.
AGPL-3.0-only
- DuckDB - Fast in-process
analytical database, with C API.
MIT
- EJDB2 - Embeddable JSON Database
engine.
MIT
- Groonga - Columnar
store with full-text search.
LGPL-2.1-only
- Hiredis -
Minimalistic client library for Redis.
BSD-3-Clause
- libmongoc - High-performance client
library for MongoDB.
Apache-2.0
- LMDB - Ultra-fast,
ultra-compact key-value embedded data store.
OLDAP-2.8
- MySQL - The
world’s most popular open source database.
GPL-2.0-only
- PostgreSQL - Powerful
object-relational database system.
PostgreSQL
- Redis - Advanced key-value store.
BSD-3-Clause
- sophia - Modern, embeddable
key-value database.
BSD-2-Clause
- sparkey - Simple
constant key/value storage library. Designed for read-heavy loads with
infrequent, large bulk inserts.
Apache-2.0
- SQLite - Self-contained,
serverless, zero-configuration, transactional SQL database engine.
Public domain.
- UnQLite - Self-contained,
serverless, zero-configuration, transactional NoSQL engine.
BSD-2-Clause
- WhiteDB -
Lightweight database library, operating entirely in main memory.
GPL-3.0-or-later
Data Structures
- C-Macro-Collections
- Generate simple and generic data structures using macros.
MIT
- CLIST - Simple
and lightweight dynamic array
implementation.
BSD-2-Clause
- Collections-C -
Library of generic data structures.
LGPL-3.0-or-later
- ds - Common Data Structures
and Algorithms.
MIT
- igraph - A graph processing
library.
GPL-2.0-or-later
- kdtree - Simple
library for working with KD-trees.
BSD-3-Clause
- libavl -
Library containing a range of self-balancing binary trees.
GPL-3.0-or-later
- libcdada - A small,
portable, MACRO-less library for basic data structures (list, set, map,
queue…) in C (C++ backend).
BSD-2-Clause
- liblfds - Portable lock-free data
structure library. Public domain (more exactly, whatever license you
want).
- libsrt - Soft
and hard real-time data structures.
BSD-3-Clause.
- list.h -
Implementations for singly linked and doubly linked list functions.
GPL-3.0-only
- M*LIB - Library for
generic, but typesafe C containers. Implemented as header-only.
BSD-2-Clause
- offbrand -
Collection of generic, reference-counted data structures.
MIT
- PackedArray -
Random-access array of tightly packed unsigned integers of any desired
width. Has a SIMD-optimized implementation.
WTFPL
- rb3ptr
- Red-Black tree. Exposes almost all implementation primitives, so can
be used for scenarios like augmentation, multiple compatible ordering
functions, and more.
MIT
- uthash -
Single-file hash table implementation.
BSD-1-Clause
- vector.h - Header
library for typed lists.
MIT
Debugging
Because we all have to do it sometimes. Various tools for making
debugging easier or better, as well as libraries or code that allows
better debugging work.
- C-Reduce - Tool
that takes a large C file with a property of interest and automatically
produces a much smaller C file that has the same property. Intended to
help create minimal bug-demonstrating cases in complex code.
BSD-3-Clause
- CBMC - C Bounded Model
Checker; a tool for verification of array bounds, pointer safety and
user-specified assertions.
BSD-4-Clause
- cflow - Analyzes a
collection of source files and prints a graph charting control flow in
the program.
GPL-3.0-or-later
- Complexity -
Tool for measuring the complexity of source code.
GPL-3.0-or-later
- CScout - Source code
analyzer and refactoring browser for C programs.
GPL-3.0-only
- DDD -
Graphical front-end for a range of command-line debuggers.
GPL-3.0-or-later
- debug - One-header
library for easier ‘printf debugging’.
MIT
- ESBMC - Efficient SMT-based Bounded
Model Checker; a tool for verification of single and multithread
programs, user assertions, overflow, and pointer/memory safety.
Apache-2.0
- GDB - GNU Project
debugger.
GPL-3.0-or-later
- lldb - LLVM debugger.
NCSA
- rr - Debugger that records
non-deterministic executions to allow for deterministic debugging.
BSD-2-Clause
- Valgrind - Range of dynamic
analysis tools, including a leak checker.
GPL-2.0-only
Documentation Generation
- Cxref -
Generates documentation in either LaTeX, HTML, RTF or SGML.
GPL-2.0-only
- DocOnce -
Modestly tagged markup language that can be used to generate a range of
formats.
BSD-3-Clause
- Doxygen - De-facto standard
tool for generating documentation from annotated sources. Can generate a
large range of formats.
GPL-2.0-only
Editors
Fancier, IDE-type editors. If you want a programmer’s text editor,
look elsewhere. Besides, whatever you use most likely supports C
anyway.
Embeddable Scripting Engines
When C isn’t the right solution, or when you need a more dynamic
configration engine:
- Duktape - Embeddable Javascript
engine with a focus on portability and compact footprint
MIT.
- MetaCall -
Cross-platform Polyglot Runtime which supports NodeJS, JavaScript,
TypeScript, Python, Ruby, C#, Wasm, Java, Cobol and more.
Apache-2.0
Frameworks
Big libraries that provide data structures and other stuff you expect
of a ‘modern’ standard library.
- APR - Apache Portable Runtime;
another library of cross-platform utility functions.
Apache-2.0
- C Algorithms -
Collection of common algorithms and data structures.
ISC
- CPL - The Common
Pipeline Library; a set of libraries designed to be a comprehensive,
efficient and robust software toolkit.
GPL-2.0-only
- EFL - Large collection
of useful data structures and functions. Various licenses, all open
source.
- GLib - Library of
utility functions and structures, designed to be portable, efficient and
powerful.
LGPL-2.1-only
- klib -
Small and lightweight implementations of common algorithms and data
structures.
MIT
- libcork -
Utility functions and structures, designed for resource-constrained
systems. Can be embedded.
BSD-3-Clause
- libnih - Lightweight
library of functions and structures.
GPL-2.0-only
- libU - Small library of
basic utilities, including memory allocation, string manipulation and
logging.
BSD-3-Clause
- PBL - Large
library of utilities, featuring data structures, among other things.
LGPL-2.1-or-later
- plibsys -
Cross-platform system C library. Zero third-party dependencies, uses
only native system calls.
MIT
- qlibc - Simple and
powerful library, designed as a replacement for GLib while focusing on
being small and light.
BSD-2-Clause
- sc - Common libraries and
data structures for C.
MIT
- TBOX - Multi-platform
library with a large number of capabilities.
Apache-2.0
- pspsdk - An
open-source SDK for PSP homebrew development. Various
licences.
Game Programming
Engines, libraries and other helpful things specifically for making
games.
- Allegro - Cross-platform, video
game development and multimedia library.
Zlib
- AssetKit 🎨 3D asset
importer/exporter/util library based on COLLADA/glTF specs
MIT
- astera - C99 Cross
Platform 2D Game Library
MIT
- cglm - 📽 Optimized
OpenGL/Graphics Math (glm) for C.
MIT
- Chipmunk2D - Fast and
lightweight 2D game physics library.
MIT
- cmt - 🎮 C
Bindings/Wrappers for Apple’s METAL Graphics Framework.
MIT
- Corange - Game
engine in pure C.
BSD-2-Clause
- CSFML -
Binding for SFML.
Zlib
- Darkplaces -
Modified version of the Quake2 engine.
GPL-2.0-only
- Epoxy - Library for
handling OpenGL function pointer management.
MIT
- exengine - 3D game
engine in C99 with a starting template.
MIT
- Flecs - A
Multithreaded Entity Component System written for C89 & C99
MIT
- Freecell Solver -
Set of libraries and command-line programs for automatically solving
FreeCell and some similar variants of card Solitaire.
MIT
- FreeGLUT - Alternative
to the OpenGL Utility Toolkit. Allows the creation and management of
windows with OpenGL contexts.
X11
- GLFW - Multi-platform library
for creating windows with OpenGL contexts.
Zlib
- ioquake3 - Quake3 engine, freed
at last.
GPL-2.0-only
- kazmath - Maths
library for games.
BSD-2-Clause
- libao - Cross-platform audio
library with a wide variety of outputs.
GPL-2.0-or-later
- librg - Pure C99 game
networking library for building simple and elegant cross-platform
multiplayer client-server solutions.
Apache-2.0
- MATHC - Math
library for 2D and 3D programming.
ZLib
- Orx - Portable, lightweight,
plugin-based, data-driven, 2D-oriented game engine.
Zlib
- Quake - Quake
engine.
GPL-2.0-only
- Quake2 - Quake2
engine.
GPL-2.0-only
- raylib - Simple and easy-to-use
library to learn video game programming.
Zlib
- RetroArch -
Reference frontend for libretro.
GPL-3.0-only
- SDL2 - Cross-platform library
designed to provide low-level access to audio, keyboard, mouse, joystick
and graphics hardware via OpenGL.
Zlib
- sdl-gpu - Library
for high-performance, modern 2D graphics. Based on SDL.
MIT
- SIGIL - Sound, Input and
Graphics Integration Library; a simple alternative to other libraries
for doing all those things. Various licenses, all open source.
- uastar -
Minimal A* implementation.
ZLib
Graphics
Programmatic manipulation of graphics in C; if you want to make a
GUI, the Graphical User Interface section has what you need.
- AssetKit 🎨 3D asset
importer/exporter/util library based on COLLADA/glTF specs
MIT
- Cairo - 2D graphics library.
LGPL-2.1-only
or MPL-1.1.
- cmt - 🎮 C
Bindings/Wrappers for Apple’s METAL Graphics Framework.
MIT
- giflib -
Library for reading and writing gif images.
MIT
- graphene - Thin
layer of graphical data types.
MIT
- heman - Tiny library
of image utilities dealing with height maps, normal maps, distance
fields and the like.
MIT
- libcaca - ASCII
renderer for terminal-based interfaces.
WTFPL
- libgd - Library for the
dynamic creation of images by programmers.
MIT
- libimagequant - Small,
portable library for high-quality conversion of RGBA images to 8-bit
indexed colour images.
GPL-3.0-or-later
- libjpeg-turbo -
Faster library for reading and writing JPEG files. Various
licences.
- libpng - Official PNG reference
library.
Libpng
- libRSVG
- Library to render SVG files using Cairo.
LGPL-2.1-or-later
- libsixel - Library
implementing the SIXEL protocol, allowing beautiful graphics in your
terminal.
MIT
- libspng - A simpler interface for
reading and writing PNG files.
BSD-2-Clause
- libvips - Image
processing library.
LGPL-2.1-or-later
- libxmi - Function
library for rasterizing 2D vector graphics.
GPL-3.0-or-later
- lightmapper -
Single-file library for lightmap baking, using an existing OpenGL
renderer. Public domain.
- little CMS - A Color Management
System. It provides fast transforms between ICC profiles.
MIT
- mozjpeg - Improved
JPEG encoder.
BSD-3-Clause
- nanovg -
Anti-aliased 2D vector drawing library on top of OpenGL, for UI and
visualizations.
Zlib
- OpenGL - Industry standard for
high-performance graphics, with a native C binding. Various
licenses.
- PlutoVG - A
standalone 2D vector graphics library in C
MIT
- SAIL - ⛵ The
missing small and fast image decoding library for humans (not for
machines)
MIT
Graphical User Interface
Widget toolkits, or things meant to be used in a similar way to
them.
- GTK+ - Cross-platform widget
toolkit.
LGPL-2.1-only
- IUP -
Another cross-platform widget toolkit.
MIT
- microui - Tiny
immediate-mode UI library written in portable ANSI C.
MIT
- nuklear -
Small, C89, single-header widget toolkit. Public domain.
- tinyfiledialogs
- Single-file library for simple dialogs. Compatible with many other
toolkits and OSes.
Zlib
- Tk - Basic widget toolkit. Part of
Tcl/Tk.
TCL
- XForms Toolkit - Widget
toolkit designed for the XWindow system.
LGPL-2.1-only
- LVGL - embedded GUI with easy-to-use
graphical elements, beautiful visuals and a low memory footprint.
MIT
- luigi - A barebones
single-header GUI library for Win32, X11 and Essence.
MIT
Hashing
Hash function implementations for non-crypto purposes.
Cryptographic hashes can be found in the Crypto section.
- CLHash - Library
implementing the ridiculously fast CLHash hashing function. Only works
on Intel Haswell or newer.
Apache-2.0
- HighwayHash -
Fast, strong, SIMD-using hash function. Also contains an implementation
of SipHash (although this is slower).
Apache-2.0
- SpookyHash -
Extremely fast hash function.
BSD-3-Clause
- t1ha - Fast
Positive Hash - a portable, fast hash function.
BSD-3-Clause
- xxHash - Extremely
fast hashing algorithm. Comes in 32 and 64-bit varieties.
BSD-2-Clause
Learning, Reference and
Tutorials
Resources for learning C programming in general, or something useful
relating to C programming.
Reference resources online
Beginner resources online
Advanced resources online
Reference books
Beginner books
Advanced books
Lexing and Parsing
Libraries specifically for lexical analysis (or lexing) and syntactic
analysis (or parsing).
- flex - Fast lexical
analyzer generator.
BSD-2-Clause
- GNU Bison -
General-purpose parser generator that converts an annotated context-free
grammar into a range of parsers.
GPL-3.0-or-later
- hammer -
Parser combinators for binary formats.
GPL-2.0-only
- mpc - Parser
combinator library.
BSD-2-Clause
- owl - A parser generator
for visibly pushdown languages.
MIT
- re2c - Lexer generator,
producing fast lexers, with access to its internals. Public domain.
Memory Management
Whether a different, faster malloc or outright garbage collection,
anything to do with managing C memory lives here.
Networking and Internet
Low-level networking and internet-related stuff. If you want
something more comprehensive and high-level, you may want the Web
Frameworks section.
- asnlc -
Compiler of ASN.1 specifications into C source code.
BSD-2-Clause
- CHL - C Hypertext Library
- A library for writing web applications in C.
GPL-3.0-only
- czmq - High-level binding for
ZeroMQ.
MPL-2.0
- Dyad.c - Lightweight,
easy, asynchronous networking library.
MIT
- GNU adns -
Advanced, easy-to-use, asynch-capable DNS client library and utilities.
GPL-3.0-or-later
- gumbo-parser -
HTML5 parsing library in C99.
Apache-2.0
- H20 - A new-generation HTTP
server.
MIT
- llhttp - HTTP request/response
parser.
MIT
- ldns
- Library to simplify DNS programming.
BSD-3-Clause
- libcurl - Client-side
URL transfer library, supporting a wide range of formats.
curl
- LibEtPan - Mail library providing
an efficient network for IMAP, SMTP, POP and NNTP.
BSD-3-Clause
- libev - Yet
another event loop.
BSD-2-Clause
- libevent - Event loop replacement
for network servers.
BSD-3-Clause
- libhttpd
- Library to add basic web server capabilities to an application or
embedded device.
GPL-2.0-only
- libhv - Cross
platform event loop library.
BSD-3-Clause
- libidn -
Implementation of the Stringprep, Punycode and IDNA specifications.
GPL-3.0-or-later
- libmicrohttpd
- Small library that makes it easy to run an HTTP server as part of
another application.
LGPL-2.1-or-later
- libnl -
libnl is a collection of libraries to provie APIs to the
Netlink protocol (replacement for ioctl). It’s primary use is to
communicate with the Linux kernel, to modify networking state
(interfaces, routing etc…). LGPL-2.1-only
- libonion - HTTP
server library, designed to be easy to use.
Apache-2.0
- libpcap -
API provides to various kernel packet capture mechanism.
BSD-3-Clause
- libquickmail -
Library intended to give developers a way to send email from their
applications. Supports multiple To/Cc/Bcc recipients and attachments
without size limits.
GPL-3.0-or-later
- libsagui -
Library for cross-platform HTTP servers.
LGPL-3.0-or-later
- libuhttpd - A
very flexible, lightweight and fully asynchronous HTTP server library
based on libev and http-parser for Embedded Linux.
MIT
- LibVNCServer -
Cross-platform libraries to implement VNC server and/or client
functionality.
GPL-2.0-or-later
- libwebsock -
Easy-to-use and powerful web socket library.
LGPL-3.0-only
- libzmq - Core ZeroMQ
library, a high-performance asynchronous messaging library, aimed at use
in distributed or concurrent applications. C API (backend C++)
GPL-3.0-or-later
with static linking exception
- lwan - Experimental, scalable,
high-performance HTTP server.
GPL-2.0-only
- mongoose - Embedded web server.
GPL-2.0-only
- MQTT-C - A
portable MQTT C client for embedded systems and PCs alike.
MIT
- nanomsg - C-based
implementation of ZeroMQ.
MIT
- NNG -
nanomsg-next-generation - lightweight brokerless messaging.
MIT
- oSip - SIP
implementation without additional dependencies.
LGPL-2.1-or-later
- silgy - Asynchronous
HTTP(S) engine for C/C++ projects.
MIT
- socket99 -
C99 wrapper for the BSD sockets API.
ISC
- twitc - Mini
library for interacting with the Twitter OAuth API.
MIT
- uriparser - Strictly RFC
3986-compliant URI parsing and handling library.
BSD-3-Clause
- Wslay - WebSocket
library. Implements version 13 of the WebSocket protocol, as described
in RFC 6455.
MIT
- zyre - Framework for
proximity-based peer-to-peer applications.
MPL-2.0
Numerical
- apophenia - Library for
statistical and scientific computing.
GPL-2.0-only
- Arb - Library
for arbitrary-precision interval arithmetic.
LGPL-2.1-or-later
- ATLAS -
Automatically Tuned Linear Algebra Software.
BSD-3-Clause
- clBLAS -
BLAS functions written in OpenCL.
Apache-2.0
- cmathl - Math
library with a great variety of mathematical functions with CMake build
support. Seeks to be close to C89/C90 compliant for portability.
MIT
- Cuba - Library for
multidimensional numerical integration.
LGPL-3.0-only
- fft-c - A
high-performance Fourier Transform from netlib’s fftpack; wrapped in a
user-friendly format
MIT
- FFTW - The Fastest Fourier
Transform in the West; a highly optimized fast Fourier transform
routine.
GPL-2.0-or-later
- FLINT - Fast Library for Number
Theory; a library supporting arithmetic with numbers, polynomials, power
series and matrices, among others.
GPL-2.0-or-later
- GLPK - GNU Linear
Programming Kit; a package designed for solving large-scale linear
programming, mixed integer programming and other related problems.
GPL-3.0-or-later
- GMP - GNU Multple Precision
Arithmetic Library; a library for arbitrary-precision arithmetic.
GPL-2.0-only
or LGPL-3.0-only
- GNU MPC - Library
for complex number arithmetic.
LGPL-3.0-or-later
- GNU MPFR - Library for
arbitrary-precision floating-point arithmetic.
LGPL-3.0-or-later
- GNU MPRIA - Portable
mathematics library for multi-precision rational interval arithmetic.
GPL-3.0-or-later
- GSL - The GNU
Scientific Library; a sophisticated numerical library.
GPL-3.0-only.
- KISS FFT -
Simple fast Fourier transform library.
BSD-3-Clause
- LAPACKE -
Interface to LAPACK.
BSD-3-Clause
- LibTomMath -
Portable, number-theoretic, multiple-precision integer library. Supports
algebra, digit manipulation, modular reductions, and various
number-theoretic routines. Public domain.
- LibTomPoly -
Polynomial-related maths library. Public domain.
- PARI/GP - Computer
algebra system for number theory; includes a compiler to C.
GPL-2.0-or-later
- PETSc - Suite of data
structures and routines for scalable parallel solution of scientific
applications modelled by partial differential equations.
BSD-2-Clause
- SCS - Splitting Conic
Solver; a numerical optimization package for solving large-scale convex
cone problems.
MIT
- SLEPc - Library for the solution
of large, sparse eigenvalue problems on parallel computers.
LGPL-3.0-only
- TomsFastMath - Set
of optimized maths operations (in assembly), suitable for cryptographic
use. Public domain.
- Yeppp! - Fast,
SIMD-optimized mathematical library.
BSD-3-Clause
Profiling
PDF
- pdfio - PDFio
is a simple C library for reading and writing PDF files.
Apache-2.0
Regex
- Onigmo - Fork of
Oniguruma, supporting more advanced regexps.
BSD-2-Clause
- Oniguruma - Regex
library supporting a wide range of encodings, and incorporating many
security-oriented fixes.
BSD-2-Clause
- PCRE - Implementation of regexes
identical to that of Perl 5.
BSD-3-Clause
- SLRE - Super Light
Regular Expression library; a small implementation of a subset of Perl
regex syntax.
GPL-2.0-only
- TRE -
POSIX-compliant, feature-full regex library.
BSD-2-Clause
Serialization
- binn - Binary
serialization format, meant to be compact, fast and easy-to-use.
Apache-2.0
- c-capnproto
- Implementation of the Cap’n Proto serialization protocol.
MIT
- cmp - Implementation of
the MessagePack serialization
protocol.
MIT
- flatcc - FlatBuffers compiler
and library.
Apache-2.0
- libavro
- Implementation of the Avro data serialization system.
Apache-2.0
- mpack - Another
implementation of the MessagePack
serialization protocol.
MIT
- OPIC - Object Persistence in C; a
revolutionary serialization framework, with matching on-disk and
in-memory representations.
GPL-3.0-or-later
- protobuf-c -
Implementation of Google Protocol Buffer.
BSD-2-Clause
- tpl - Small binary
serialization library.
MIT
- xdr
- External Data Representation; a standard for data serialization.
Standard (no license applicable).
- pbtools - Google
Protocol Buffers C source code generator.
MIT
Source Code Collections
Collections of small source code. If you want something big and
integrated, check the Frameworks section.
- CCAN - Modelled after Perl’s
CPAN, this is a big collection of code that does stuff. The full list is
here. Various licenses,
all open source.
- clib - Something of a
package manager. Comes with a bunch of libraries of
its own.
MIT
- gnulib -
Collection of common GNU code. Various licenses, all open source.
- libdjb - Collection of
libraries doing various things. (Apparently) public domain.
- mmx - Collection of
single-header libraries. Various licenses, all open source.
- par - Bunch of
single-file libraries.
MIT
- Snippets -
Useful code snippets and header-only libraries. Public domain.
- stb - Range of
single-file libraries. Public domain.
- tinyheaders -
Collection of header-only libraries, primarily oriented toward game
development.
Zlib
- zpl - C99 cross-platform
header-only library with many goodies. [
BSD-3-Clause,
Unlicense][BSD-3-Clause, Unlicense]
Standard Libraries
Implementations of the (standard-mandated) C standard library.
Template libraries
- CTL - C CONTAINER
TEMPLATE LIBRARY (CTL)
MIT
String Manipulation
Structured File Processing
This includes libraries for things like XML, JSON, CSV, and other
similar formats.
CSV
JSON
INI
Others
- libbson - BSON
utility library.
Apache-2.0
- libcbor: CBOR protocol
implementation for C and others.
MIT
- libconfuse -
Small configuration file parser library.
ISC
- libelf - Simple
library for parsing ELF files.
MIT
- libucl - Universal
configuration library parser.
BSD-2-Clause
- libxo - Allows an
application to generate plain text, XML, JSON and HTML output using a
common set of function calls. The application decides at runtime what
output style should be produced.
BSD-2-Clause
XML
- Expat - Stream-oriented
XML parser. MIT
- libxml2 - Standards-compliant,
portable XML parser. MIT
- xml - Simple,
low-memory-use XML parser / tokenizer.
MIT
YAML
Signal Processing
- libsigrok - signal
analysis software suite that supports various device types (such as
logic analyzers, oscilloscopes, multimeters, and more).
[
GPL][GPL]
Testing
- CHEAT - Simple
unit testing framework.
BSD-2-Clause
- Check - Unit testing
framework.
LGPL-2.1-only
- ciut -
A modern minimal hassle unit test framework.
MIT
- clar - Clear and simple
unit testing framework.
MIT
- CMock - Mock/stub
generator.
MIT
- cmocka - Unit testing framework
with support for mock objects.
Apache-2.0
- Criterion -
KISS, non-intrusive test framework.
MIT
- ctest - Yet another
unit testing framework.
Apache-2.0
- CUnit - Another unit
testing framework.
LGPL-2.1-or-later
- greatest -
Unit testing library in one file, with no memory allocation.
ISC
- minctest - Unit
testing microlibrary.
BSD-3-Clause
- munit - Small unit
testing framework.
MIT
- Nala - A test
framework for C projects.
MIT
- Rexo -
Framework for C89/C++ featuring automatic registration of tests and a
polished API.
Unlicense
- Tau - A Micro Unit
testing framework for C/C++ (~1k lines of code). Includes a rich set of
assertion macros, supports automatic test registration and can output to
multiple formats, like the TAP format or JUnit XML. Supported on Linux,
macOS, FreeBSD, and Windows.
MIT
- theft -
Property-based testing (similar to Quickcheck).
MIT
- Unity - Simple
unit testing framework.
MIT
- utest -
Single-header unit testing library.
Unlicense
Text Editor Extensions
While practically any decent programmer’s text editor supports C,
there are some extensions that make it more pleasant. These are labelled
by editor.
Useful programs to help you write and debug C code which are
not editors, libraries or compilers.
Utilities
A ‘catch-all’ category for anything that doesn’t fit well anywhere
else.
- ApeTagLibs
- Library for working with APEv2 tags.
MIT
- argparse -
Command-line argument parsing library, inspired by Python’s argparse
module.
MIT
- attr -
Commands for manipulating filesystem extended attributes.
GPL-2.0-or-later
- bfd - Library
for manipulating binary object files. Part of GNU binutils.
GPL-3.0-or-later
- Caffeine - Library for
building daemons and services for Linux and FreeBSD systems.
LGPL-2.1-or-later
- CException -
Implementation of exceptions.
MIT
- CommonMark -
Implementation of the CommonMark spec.
- cosmopolitan -
fast portable static native textmode containers (build C programs for
Linuxin one go) Variety
of licenses, all open source.
- cpu_features -
Get CPU features at runtime.
Apache-2.0.
- CRIU - Checkpoint/Restore
In Userspace; a software tool (with a C API) for ‘freezing’ a running
application to disk, then restoring it.
GPL-2.0-only
or LGPL-2.1-only
- D-Bus
- Simple way for applications to talk to one another.
AFL-2.1
or GPL-2.0-or-later
- Discount -
Simple implementation of a Markdown parser.
BSD-3-Clause
- dlx - Implementation of
Knuth’s
Algorithm X, with example solvers.
GPL-3.0-or-later
- docopt.c -
Implementation of a command-line option parser.
MIT
- dyncall - Another foreign
function interface library.
MIT
- GNU
FreeIPMI - In-band and out-of-band IPMI implementation.
GPL-3.0-only
- GNU gperf -
Perfect hash function generator, given a list of strings. Outputs C
code.
GPL-3.0-or-later
- GNU Libffcall -
Collection of libraries for building foreign function interfaces.
GPL-3.0-or-later
- Hoedown - Fully
standards-compliant, extension-supporting, UTF-8 aware, fast Markdown
parser.
MIT
- Kitsune - Efficient,
general-purpose framework for dynamic software updating.
LGPL-3.0-or-later
- libCello - Library introducing
higher-level programming to C.
BSD-3-Clause
- libcmark - Library for
parsing the CommonMark dialect of Markdown.
BSD-2-Clause
- libcoap -
Implementation of the Constrained
Application Protocol.
GPL-2.0-or-later
or BSD-2-Clause
- libcox - Library which
permits cross-platform system calls and standard utilities across
different operating systems.
BSD-2-Clause
- libffi - Portable
foreign-function interface library.
MIT
- libgeohash -
Pure C implementation of the Geohash algorithm.
BSD-3-Clause
- libgit2 - Portable implementation
of the Git core methods, provided as a re-entrant linkable library. Custom
license.
- libgss - Generic
Security Service.
GPL-3.0-or-later
- libimobiledevice
- Cross-platform protocol library to communicate with iThings.
LGPL-2.1-or-later
- libnfc -
Platform-independent Near-Field Communication library.
LGPL-3.0-only
- libpostal -
Library for parsing and normalization of street addresses around the
world. Powered by statistical NLP and open geo data.
MIT
- libtrading - Implementation of
network protocols for communicating with exchanges, dark pools and other
trading venues. Supports FIX, FIX/FAST and many proprietary protocols.
BSD-2-Clause
- libusb - Provides generic access
to USB devices.
LGPL-2.1-or-later
- libuv - Cross-platform asynchronous
I/O.
MIT
- libvldmail -
Your friendly email validation library. No external dependencies (not
even regexps).
WTFPL
- linenoise -
Small, self-contained alternative to readline and libedit.
BSD-2-Clause
- libXDGdirs
- An implementation of XDG Base Directory Specification
MIT
- MegaMimes -
Library for getting the MIME types of a file.
MIT
- ncurses - Coloured
terminal UI library.
MIT
- netbsd-curses
- Simplified and small version of ncurses, with the same interface.
BSD-3-Clause
- nope.c - Ultra-light
software platform for scalable server-side and networking applications
(think node.js for C programmers).
GPL-2.0-only
- obj.h - A
single-header supports OOP in pure C.
MIT
- parg - A single-file
reimplementation of
getopt with better defaults. CC0-1.0
- pbc - Protocol buffers
library.
MIT
- progressbar -
Easy-to-use library for displaying text progress bars.
BSD-3-Clause
- rabbitmq-c -
Client library for RabbitMQ.
MIT
- Ragel - DSL for
state machines that compiles to C.
GPL-2.0-only
- rmw - safe-remove utility
for the command line that can purge items from your waste directories
after x number of days.
GPL-3.0-or-later
- Rogueutil -
Cross-platform library for creating text-based user interfaces (TUI)
Apache-2.0
- sort - Collection of
sorting routines, which type-specialize at compile-time with a
user-defined type.
MIT
- termbox - Library for
writing text-based interfaces.
MIT
- tinyexpr - Tiny
recursive-descent parser, compiler and evaluation engine for simple
mathematical expressions.
BSD-3-Clause
- tm - ⏱ Timer and Timeline
Utils for C.
MIT
- Tulip Indicators -
Library of functions for technical analysis of financial data.
LGPL-3.0-or-later
- whereami -
One-file library for locating the current executable on the file system.
WTFPL
- XLSX I/O -
Cross-platform library for reading and writing .xlsx files.
MIT
- xlsx_drone -
Fast Microsoft Excel’s *.xlsx reader.
MIT
- zlog - Reliable,
pure C logging library.
LGPL-2.1-only
- zproto - Protocol
framework for ZeroMQ.
MIT
- Metalang99 -
Full-blown preprocessor metaprogramming.
MIT
- Datatype99 -
Algebraic data types for C99.
MIT
Web Frameworks
Comprehensive and integrated solutions for building the next
brilliant web application in C.
- Concord - A
Discord API wrapper library written in C.
MIT
- facil.io - Mini-framework for web
applications. Includes a fast HTTP and Websocket server, and also
supports custom protocols.
MIT
- kcgi - CGI and FastCGI
library for C
ISC.
- KLone - Fully
featured, multi-platform, web application development framework,
targeted especially at embedded systems and appliances.
BSD-3-Clause
- Kore - Easy-to-use web application
framework for writing scalable web APIs in C.
ISC
Windows Environments
Technologies designed to bring Windows into the 21st century with
respect to support for C.
- Cygwin - Designed to emulate a
POSIX-compatible environment extensively under Windows. Various licenses, all open
source.
- MinGW-w64 -
Minimalist environment for C development on Windows with 64 bit support.
Various licenses, all open
source.
- MSYS2 - Minimal SYStem 2; aims
to provide support for a POSIX environment on Windows, with a package
manager based on Arch Linux’s pacman. Packages have individual licenses,
otherwise, as MinGW and Cygwin.