# awesome-c

A curated list of C good stuff. This list contains only free software for code, and sellers who aren’t evil for physical resources.

LOOKING FOR MAINTAINERS: This list is currently pretty much inactive. I’m looking for maintainers that can make it great again. See #26 for more info, but the process is simple: add or fix a couple of things in this list and you’ll become a contributor to a 850+ stars list.

This list was previously maintained by @kozross. He decided to switch the list to a new platform, so I’ve decided to fork it so we could keep it on GitHub.

# Contents

- Build Systems
- Compilers
- Compiler libraries
- Compression
- Crypto
- Database
- Deep Learning
- Documentation Generation
- Editors
- Embedded Systems
  - RTOS
- Environments
- Frameworks
- Game Programming
  - Engines
  - Resources
- Generic Programming
- Graphics
  - Graphic APIs
- Graphical User Interface
- Hashing
- Image Processing
- JSON
- Learning, Reference and Tutorials
  - Online
    - Reference
      - Language Standards
    - Beginner
    - Intermediate
    - Advanced
    - Self-study courses
  - Physical
    - Reference
    - Beginner
    - Intermediate
    - Advanced
- Macros
- Memory Allocators
- Multimedia
- Networking and Internet
  - Web Frameworks
- Numerical
- Parallel Programming
- Parsers
- Regex
- Serialization
- Source Code Collections
- Standard Libraries
- String Manipulation
- Testing
- Text Editor Extensions
  - Atom
  - Emacs
  - Vim
- Tools
- Utilities
- XML

## Build Systems

These are tools to automate the building and testing of projects in C.

- aimake - Build tool designed to avoid complex configurations. `GNU GPL3 or later`
- Autoconf - Extensible package of M4 macros that produce shell scripts to automatically configure software source code packages. Part of the Autotools. `GNU GPL3 or later`
- Automake - Tool for automatically generating `Makefile.in` files compliant with the GNU Coding Standards. Requires the use of Autoconf. Part of the Autotools. `GNU GPL3 or later`
- CMake - Tools for cross-platform building, testing, and packaging. `3-clause BSD`
- Jam - Build system, designed to be easier than make. Understands C build rules implicitly. `Jam License`
- Libtool - Generic library support script. Part of the Autotools. `GNU GPL3 or later`
- Meson - Extremely fast, user-friendly build system. Based on Ninja. `Apache 2.0`
- Premake - Build script generator for toolsets like Visual Studio, Xcode, or GNU Make. `3-clause BSD`
- SCons - An easier, more reliable and faster way to build software. `MIT`
- Ninja - Small, simple build system with a focus on speed. `Apache 2.0`
- Bazel - Build system for various operating systems and targets. `Apache 2.0`
- Buck - Build system created and used by Facebook. `Apache 2.0`
- Qbs - Modern build tool for software projects. `LGPL3`
- qmake - Build system included with the Qt Framework. `GNU GPL3 with Qt Exception`
- xmake - Cross-platform build utility based on lua. `Apache 2.0`

## Compilers

- Clang - C compiler for LLVM. Supports C11. `NCSA`
- CompCert - Fully-verified C compiler. Supports almost all of C89. `GNU GPL2.1 or later`
- GCC - Provides a C compiler as part of its compiler set. Supports C11 and OpenMP. `GNU GPL3 or later`
- PCC - Venerable C compiler. Supports C99. `Various free licenses`
- TCC - Tiny C Compiler; a small, fast C compiler. Supports C99 (except complex types). `GNU LGPL2.1`
- Intel SPMD - Compiler for a variant of the C language, for single program, multiple data programming. `Various licenses`
- ccache - Compiler cache designed to speedup recompilation. `GNU GPL3 or later`

## Compiler libraries

Libraries for use in compilers, interpreters, and low-level based projects.

- yasm - Yasm Modular Assembler Project. `2-clause BSD`

## Compression

- libzip - A C library for reading, creating, and modifying zip archives. `3-clause BSD`
- lzo - Very fast data compression library. `GNU GPL2.1`
- zlib - Massively-spiffy yet delicately-unobtrusive compression library. `3-clause BSD`
- bzip2 - Patent free, high quality data compressor. `3-clause BSD`
- lz4 - Fast Compression algorithm.
- snappy - Fast compression library (implementation in C++, native bindings to C).
- zstd - Fast real-time compression algorithm `3-clause BSD`
- brotli - Generic lossless compression algorithm based on LZ77, Huffman coding and 2nd order context modelling `MIT`
- quicklz - Fast compression library. `GNU GPL2.1`
- pixz - Pixz (pronounced pixie) is a parallel, indexing version of `xz`. `2-clause BSD`

## Crypto

- GnuTLS - Secure communication library, implementing SSL, TLS and DTLS. `GNU LGPL2.1 or later`
- libgcrypt - General-purpose cryptography library, with a range of available ciphers. `GNU LGPL2.1or later (code)` and `GNU GPL2.1 or later (manual and tools)`
- OpenSSL - Implementation of the SSL and TLS protocols, and also includes a cryptography library. `Dual Licensed under the OpenSSL License and the SSLeay License`
- libsodium - Modern and easy-to-use crypto library. `Expat`
- libtomcrypt - Fairly comprehensive, modular and portable cryptographic toolkit. `Public Domain`
- mbed TLS - Another crypto implementation for C. `Apache 2.0`
- libressl - Modernized fork of OpenSSL. `Various Licenses`

## Database

This lists databases and data stores with C APIs.

- BerkeleyDB - Library for a high-performance embedded database for key-value data. `GNU AGPLv3`
- Hiredis - Minimalistic client library for Redis. `3-clause BSD`
- LMDB - Ultra-fast, ultra-compact key-value embedded data store. `OpenLDAP License`
- MariaDB - Robust, scalable and reliable SQL server, designed to be a drop-in replacement for MySQL. `3-clause BSD`
- mongo-c-driver - High-performance client library for MongoDB. `Apache 2.0`
- PostgreSQL - Powerful object-relational database system. `PostgreSQL licence`
- recutils - Set of tools and a C library for accessing human-editable, plaintext database files called recfiles. `GNU GPL3 or later`
- Redis - Advanced key-value store. `3-clause BSD`
- sophia - Modern, embeddable key-value database. `FreeBSD`
- SQLite - Self-contained, serverless, zero-configuration, transactional SQL database engine with a C interface. `Public Domain`
- UnQLite - Self-contained, serverless, zero-configuration, transactional NoSQL engine with a C interface. `FreeBSD`

## Deep Learning

- Darknet - Open source neural network framework written in C and CUDA. It is fast, easy to install, and supports CPU and GPU computation.

## Documentation Generation

- Cxref - Generates documentation of C programs in either LaTeX, HTML, RTF or SGML. `GNU GPL2.1`
- DocOnce - Modestly-tagged markup language that can be used to generate a range of formats. `3-clause BSD`
- Doxygen - The de-facto standard tool for generating C documentation from annotated sources. Can generate a large range of formats. `GNU GPL2.1`
- GTK-Doc - Tool for generating C documentation from annotated sources. Has support for the Autotools. `GNU GPL2.1 (code)` or `GNU FDL1.1`

## Editors

These are specifically fancier, IDE-type editors. If you want a programmer’s text editor, look elsewhere. Besides, whatever choice you make most likely supports C anyway.

- Anjuta DevStudio - The GNOME IDE. `GNU GPL2.1`
- Atom - Hackable text editor for the 21st century. `MIT`
- Code::Blocks - Extensible, configurable IDE supporting C. `GNU GPL3`
- CodeLite - Cross-platform IDE. `GNU GPL2.1`
- Eclipse - IDE written in Java. `EPL`
- Geany - Very small and fast IDE. `GNU GPL2.1 or later`
- KDevelop - The KDE IDE. `GNU GPL2.1`
- Qt Creator - Cross-platform IDE written with C++ and Qt, part of the Qt SDK. Supports Clang Code Model. `GNU GPL3 with Qt exception`
- Visual Studio Code - Code editing, redefined. Visual Studio Code.

## Embedded Systems

These are projects that allow one to work with microcontrollers and other resource constrained architectures.

### RTOS

A real-time operating system (RTOS) is intended to serve real-time applications that process data with low latency delay.

- Amazon FreeRTOS - RTOS for microcontrollers that makes small, low-power edge devices easy to program. `MIT`
- ChibiOS - RTOS with complete development environment (HAL, drivers, support files, and tools). `Various Licenses`
- Contiki - Connect low-cost, low power microcontrollers to the Internet. `3-clause BSD`
- Zephyr Project - Scalable real-time RTOS supporting multiple hardware architectures, optimized for resource constrained devices. `Apache 2.0`
- RIOT OS - Real-time multi-threading operating system that supports a range of devices that are typically found in the Internet of Things. `LGPL-2.1`

## Environments

This is a list of 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`
- MinGW-w64 - Minimalist environment for C development on Windows with 64 bit support. `Various Licenses`

## Frameworks

This section has 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 for C. `ISC`
- C Macro Collections - Header only, macro generated, generic and type-safe Collections in C. `MIT`
- CPL - The Common Pipeline Library; a set of libraries designed to be a comprehensive, efficient and robust software toolkit. `GNU GPL2.1`
- EFL - Large collection of useful data structures and functions.
- GLib - Library of utility functions and structures, designed to be portable, efficient and powerful. `GNU LGPL2.1`
- GIO - Modern and easy-to-use VFS API. `GNU LGPL2.1`
- GObject - Object-oriented system and object model for C. `GNU LGPL2.1`
- libnih - Lightweight library of C functions and structures. `GNU GPL2.1`
- libU - Small library of basic utilities, including memory allocation, string manipulation and logging. `3-clause BSD`
- PBL - Large library of utilities, featuring data structures, among other things. `GNU LGPL2.1 or later (library)` or `GNU GPL2.1 or later (test code)`
- qlibc - Simple and powerful C library, designed as a replacement for GLib while focusing on being small and light. `qLib license` (similar to `FreeBSD`)
- stb - Range of single-file libraries for C. `Public Domain`
- libsrt - Safe Real-Time library for C. `3-clause BSD`

## Game Programming

### Engines

These are provided as examples of C game programming code.

- Corange - Game engine in pure C. `FreeBSD`
- Darkplaces - Modified version of the Quake2 engine. `GNU GPL2.1`
- ioquake3 - The Quake3 engine, freed at last. `GNU GPL2.1`
- Orx - Portable, lightweight, plugin-based, data-driven, 2D-oriented game engine. `zlib`
- Quake - The Quake engine. `GNU GPL2.1`
- Quake2 - The Quake2 engine. `GNU GPL2.1`
- Spearmint - Engine designed for FPS games. `GNU GPL3 or later`

### Resources

These are libraries of all sorts that are useful for game programming.

- Allegro - Cross-platform, video game development and multimedia library. `zlib`
- Chipmunk2D - Fast and lightweight 2D game physics library. `Expat`
- CSFML - Binding for SFML in C. `zlib`
- 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`
- libao - Cross-platform audio library with a wide variety of outputs. `GNU GPL2.1 or later`
- RetroArch - The reference frontend for libretro. `GNU GPL3`
- SDL and SDL2 - Cross-platform development library designed to provide low-level access to audio, keyboard, mouse, joystick and graphics hardware via OpenGL. SDL2 is the most current version. `zlib`
- raylib - Simple and easy-to-use library to learn videogames programming. `zlib`

## Generic Programming

- klib - Small and lightweight implementations of common algorithms and data structures. `MIT`

## Graphics

- Cairo -2D graphics library. `GNU LGPL2.1` or `MPLv1.1`
- Cogl - GPU graphics and utilities API. `Expat`
- Clutter - UI library based on OpenGL. `GNU LGPL2.1`
- giflib - Library for reading and writing gif images. `MIT`
- heman - Tiny library of image utilities dealing with height maps, normal maps, distance fields and the like. `Expat`
- libcaca - ASCII renderer for terminal-based interfaces. `WTFPLv2`
- libimagequant - Small, portable library for high-quality conversion of RGBA images to 8-bit indexed colour images. `FreeBSD`
- libjpeg-turbo - Faster library for reading and writing JPEG files. `Various Licenses`
- libpng - The official PNG reference library. `libpng license`
- libxmi - Function library for rasterizing 2D vector graphics. `GNU GPL3 or later`
- mozjpeg - Improved JPEG encoder. `3-clause BSD`

### Graphic APIs

- OpenGL - Industry adopted 2D and 3D graphics API. More resources at awesome-opengl.
- OpenGL ES - Industry adopted 2D and 3D graphics API for mobile and embedded devices.
- OpenGL SC - Graphic and compute standard for industry requiring system safety certification.
- Vulkan - Explicit graphic and compute API for modern cross-platform development. More resources at awesome-vulkan.

## Graphical User Interface

These are specifically widget toolkits.

- GTK+ - Cross-platform widget toolkit. `GNU LGPL2.1`
- IUP - Another cross-platform widget toolkit. `Expat`
- Tk - Basic widget toolkit. Part of Tcl/Tk. `Tcl/Tk License`
- XForms Toolkit - Widget toolkit designed for the XWindow system. `GNU LGPL2.1`
- nuklear - Single-header ANSI C gui library. `Public Domain`
- libui - Simple and portable (but not inflexible) GUI library. `MIT`
- LCUI - Small C library for building user interfaces with C, XML and CSS. `MIT`

## Hashing

All hashing related libraries, cryptographic or not.

- jwHash - Fast hashtable implementation. `Apache 2.0`
- xxHash - Extremely fast non-cryptographic hash algorithm. `2-clause BSD`
- libcrc - Multi platform CRC library. `MIT`
- murmur - C implementation of MurMur Hashing. `Public Domain`
- t1ha - Fast Positive Hash library. `zlib`

## Image Processing

- libccv - Modern Computer Vision Library. `3-clause BSD`

## JSON

- Jansson - C library for encoding, decoding and manipulating JSON. `Expat`
- jsmn - Minimalistic JSON parser. `Expat`
- json-c - Library for working with JSON. `Expat`
- parson - Lightweight JSON library written in C. `MIT`
- WJElement - Advanced JSON manipulation library, with support for JSON Schema. `LGPL, any version`
- YAJL - Fast C JSON streaming parser library. `ISC`

## Learning, Reference and Tutorials

This is a list of resources for learning C programming in general, or something useful relating to C programming.

### Online

#### Reference

- SEI CERT C Coding Standard
- C FAQ - comp.lang.c Frequently Asked Questions
- Comparison of C/POSIX standard library implementations for GNU/Linux
- GNU C Reference Manual
- Robert Pike’s notes on programming in C
- Draft ANSI C Rationale
- Draft C99 Rationale

##### Language Standards

- Draft ANSI C (C89) standard
- Draft C99 standard
- Draft C11 standard

#### Beginner

- Tutorial on pointers
- Building C Projects
- C Programming Wikibook
- Introduction to ‘fun’ C
- Learning C with GDB
- POSIX Threads Programming tutorial (a little dated, but most of it is still valid and useful)
- The GNU C Programming Tutorial (online PDF)
- Templating in C

#### Intermediate

- 8 gdb tricks you should know
- 10 C99 tricks
- Diving into concurrency: trying out mutexes and atomics
- Introduction to OpenMP (video)
- OpenMP tutorial (for the OpenMP3 standard)
- memcpy vs memmove
- MPI tutorial
- Some unknown features or tricks in C language
- The lost art of C structure packing
- What a C programmer should know about memory
- What every C programmer should know about undefined behaviour

#### Advanced

- Advanced metaprogramming in C
- Quick tutorial on implementing and debugging malloc, free, calloc, and realloc
- Bit twiddling hacks
- I do not know C
- Implementing smart pointers for the C programming language
- Inline functions in C
- Metaprogramming custom control structures in C
- Some dark corners of C
- Writing efficient C and C code optimization
- What every programmer should know about memory

#### Self-study courses

- C Programming Language Certified Associate preparation course

### Physical

#### Reference

- C: A Reference Manual 5E - Full reference book for C99.
- C Pocket Reference - Concise reference book for C99.
- The C Programming Language 2E - The original book on C, by its creators.

#### Beginner

- C Primer Plus 6E - Complete tutorial on programming in C11.
- C Programming: A Modern Approach - Excellent book to learn the basics of C.
- Head First C - ‘Head-first’ style book for learning C.

#### Intermediate

- 21st Century C - Very good second programming book on C.
- Understanding and Using C Pointers - In-depth resource on pointers in C.
- ZeroMQ - Book for using ZeroMQ with C.

#### Advanced

- Expert C Programming: Deep C Secrets - Interesting, in-depth and entertaining look at the innards of C.

## Macros

- P99 - Suite of macros to implement advanced features like default function arguments, scope-bound resources, etc. (Requires C99) `Q Public License`

## Memory Allocators

Implementations of memory allocators for various systems and platforms.

- jemalloc - General purpose malloc(3) implementation that emphasizes fragmentation avoidance and scalable concurrency support, commonly used in production systems. `FreeBSD`
- dlmalloc - Doug Lea’s malloc(3) implementation, useful for academic and research purposes. `Public Domain`
- Hoard - A Fast, Scalable, and Memory-efficient Malloc for Linux, Windows, Mac, and Solaris. `GNU GPL2`
- nedmalloc - An EXTREMELY FAST portable thread caching malloc(3) implementation written in C. `GNU GPL2`
- rpmalloc - Cross platform, lock-free memory allocator. `Public Domain`

## Multimedia

- FFMPEG - Complete, cross-platform solution to record, convert and stream audio and video. `GNU LGPL2.1 or later` or `GNU GPL2.1 or later (some parts)`
- GStreamer - Framework for audio and visual media. `GNU LGPL2.1`
- lodepng - Simple PNG image decoder and encoder, requiring no other dependencies. `3-clause BSD`
- libsoup - GNOME HTTP client/server library. Uses GObject. `GNU LGPL2.1`
- libmpv - Music-playing library. Compile with `./waf configure --disable-cplayer --enable-libmpv-shared` to not have the music player. `GNU GPL2.1 or later`
- libsoundio - Library for cross-platform, real-time audio input and output. Has a range of back-ends. `Expat`

## Networking and Internet

- asnlc - Compiler of ASN.1 specifications into C source code. `FreeBSD`
- czmq - High-level binding for ZeroMQ. `MPL2.0`
- GNU adns - Advanced, easy-to-use, asynch-capable DNS client library and utilities. `GNU GPL3 or later`
- GNU SASL - Implementation of the Simple Authentication and Security Layer and a few common SASL mechanism. `GNU GPL3 or later`
- GnuTLS - Secure communication library, implementing SSL, TLS and DTLS. `GNU LGPL2.1 or later`
- gumbo-parser - HTML5 parsing library in C99. `Apache 2.0`
- http-parser - HTTP request/response parser. `Expat`
- ldns - Library to simplify DNS programming. `3-clause BSD`
- libcurl - Client-side URL transfer library, supporting a wide range of formats. `curl license`
- LibEtPan - Mail library providing an efficient network for IMAP, SMTP, POP and NNTP. `3-clause BSD`
- libev - Yet another event loop. `FreeBSD`
- libuv - Cross-platform asynchronous I/O. `Expat`
- libevent - Event loop replacement for network servers. `3-clause BSD`
- libgss - Generic Security Service. `GNU GPL3 or later`
- libhttpd - Library to add basic web server capabilities to an application or embedded device. `GNU GPL2`
- libidn - Implementation of the Stringprep, Punycode and IDNA specifications. `GNU GPL3 or later`
- libmicrohttpd - Small C library that makes it easy to run an HTTP server as part of another application. `GNU LGPL2.1 or later`
- libsagui - Sagui is a cross-platform C library which helps to develop web servers or frameworks. `GNU LGPL3`
- libvldmail - Your friendly e-mail address validation library. `WTFPLv2`
- lwan - Experimental, scalable, high-performance HTTP server. `GNU GPL2.1`
- mongoose - Embedded web server for C. `GNU GPL2.1`
- MQTT-C - Portable MQTT C client for embedded systems and PCs alike. `MIT`
- nanomsg - C-based implementation of ZeroMQ. `Expat`
- OpenSSL - Implementation of the SSL and TLS protocols, and also includes a cryptography library. `Dual Licensed under the OpenSSL License and the SSLeay License`
- oSip - SIP implementation in C without additional dependencies. `GNU LGPLv2.1 or later`
- pig - Linux packet crafting tool. `GPL2`
- s2n - C99 implementation of the TLS/SSL protocols, designed to be simple, fast and with security as a priority. `Apache 2.0`
- socket99 - C99 wrapper for the BSD sockets API. `ISC`
- Tox - Communication platform, designed to be a Skype-killer. `GNU GPL3`
- twitc - Mini C library for interacting with the Twitter OAuth API. `Expat`
- librg - Library for building simple and elegant cross-platform mmo client-server solutions. `Apache 2.0`
- dyad - Asynchronous networking library. `MIT`
- h2o - Optimized HTTP/1, HTTP/2 high performance server/library. `MIT`

### Web Frameworks

- balde - Microframework for C based on GLib. `GNU LGPLv2.1`
- onion - C library to create simple HTTP servers and Web Applications. `Apache 2.0`
- kore - Easy to use, scalable and secure web application framework for writing web APIs in C.
- klone - KLone is a fully-featured, multiplatform, web application development framework.
- duda - Duda I/O is an event-driven and high performant web services framework written in C. `Apache 2.0`

## Numerical

- apophenia - Library for statistical and scientific computing. `GNU GPL2.1`
- ATLAS - Automatically Tuned Linear Algebra Software. `3-clause BSD`
- BLAS - Basic Linear Algebra Subprograms; a set of routines that provide vector and matrix operations. `BLAS license`
- CDFLIB - Library with routines to evaluate cumulative density functions fo a variety of standard probability distributions. Also can compute one parameter of the CDF given the others. (No license given)
- cmathl - Pure-C Math library with a great variety of mathematical functions and CMake build support. Seeks to be close to C89/C90 compliant for portability. `MIT`
- Cuba - Library for multidimensional numerical integration. `GNU LGPLv3`
- FFTW - The Fastest Fourier Transform in the West; a highly-optimized fast Fourier transform routine. `GNU GPL2.1 or later`
- FLINT - Fast Library for Number Theory; a library supporting arithmetic with numbers, polynomials, power series and matrices, among others. `GNU GPL2.1 or later`
- GLPK - GNU Linear Programming Kit; a package designed for solving large-scale linear programming, mixed integer programming and other related problems. `GNU GPL3 or later`
- GMP - GNU Multple Precision Arithmetic Library; a library for arbitrary-precision arithmetic. `GNU GPL2.1` and `GNU LGPLv3`
- GNU MPC - Library for complex number arithmetic. `GNU LGPL3 or later`
- GNU MPFR - Library for arbitrary-precision floating-point arithmetic. `GNU LGPL3 or later` or `GNU LGPL2.1 or later (until version 2.4.x)`
- GNU MPRIA - Portable mathematics library for multi-precision rational interval arithmetic. `GNU GPL3 or later`
- GSL - The GNU Scientific Library; a sophisticated numerical library. `GNU GPL3`
- igraph - Library for creating and manipulating large graphs. `GNU GPL2`
- KISS FFT - Very simple fast Fourier transform library. `3-clause BSD`
- LAPACKE - C interface to LAPACK. `3-clause BSD`
- PARI/GP - Computer algebra system for number theory; includes a compiler to C. `GNU GPL2.1 or later`
- PETSc - Suite of data structures and routines for scalable parallel solution of scientific applications modelled by partial differential equations. `FreeBSD`
- PROB - Library that handles various discrete and continuous probability density functions. `GNU LGPL3`
- Yeppp! - Very fast, SIMD-optimized mathematical library. `3-clause BSD`

## Parallel Programming

- cchan - Small library for channel constructs for inter-thread communication. `Public Domain`
- ck - Concurrency primitives, safe memory reclamation mechanisms and non-blocking data structures. `FreeBSD`
- mill - Go-style concurrency in C. `X11`
- libdill - Structured concurrency in C. `X11`
- MPICH - Another implementation of MPI. `MPICH licence`
- OpenMP - Set of C pragmas designed to allow for easy parallelization of code. `3-clause BSD`
- OpenMPI - Message passing interface implementation. `3-clause BSD`
- pth - Portable implementation for non-preemptive priority-based scheduling for multiple threads of execution. `GNU GPL3 or later`
- pthreads - The POSIX thread library.
- SLEPc - Software library for the solution of large, sparse eigenvalue problems on parallel computers. `GNU LGPL3`
- TinyCThread - Portable, small implementation of the C11 threads API. `zlib`

## Parsers

- hammer - Parser combinators for binary formats. `GNU GPL2.1`
- iniparser - Parser for `.ini` files. `Expat`
- libconfini - Yet another INI parser. `GNU GPL3 or later`
- libYAML - YAML 1.1 parser and emitter. `Expat`
- mpc - Parser combinator library. `FreeBSD`
- libucl - Universal configuration library parser. `FreeBSD`

## Regex

> “Some people, when confronted with a problem, think ‘I know, I’ll use regular expressions’. Now they have two problems.” - Jamie Zawinski.

- PCRE - Implementation of regexes identical to that of Perl 5. `3-clause BSD`
- regexp4 - Simple and complete implementation of regular expressions with its own sintax. `GNU GPL3 or later`
- SLRE - Super Light Regular Expression library; a very small implementation of a subset of Perl regex syntax. `GNU GPL2.1`
- sregex - Non-backtracking NFA/DFA-based Perl-compatible regex engine library. `3-clause BSD`
- TRE - POSIX-compliant, feature-full regex library. `FreeBSD`

## 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. `Expat`
- cmp - Implementation of the MessagePack serialization protocol. `Expat`
- libavro - C implementation of the Avro data serialization system. `Apache 2.0`
- mpack - Another implementation of the MessagePack serialization protocol. `Expat`
- netstring-c - Netstring encoder and decoder. `Public Domain`
- protobuf-c - Implementation of Google Protocol Buffer in C. `FreeBSD`
- xdr - External Data Representation; a standard for data serialization.

Check also: JSON, XML

## Source Code Collections

This contains 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 C code that does stuff. The full list is here.
- clib - Something of a package manager for C. Comes with a bunch of libraries of its own. `Expat`
- gnulib - Collection of common GNU code.
- libdjb - Collection of libraries doing various things. `(Apparently) Public Domain`

## Standard Libraries

This contains standard C libraries.

- Bionic - Google’s C standard library, developed for Android. `3-clause BSD`
- dietlibc - C standard library designed for the smallest possible binaries. `GNU GPL2.1`
- glibc - The GNU C Library; an implementation of the C standard library. `GNU LGPL2.1`
- musl - Standard C library, compatible with POSIX 2008 and C11. Designed for static linking. `Expat`

## String Manipulation

- bstrlib - The Better String Library. `3-clause BSD` and `GNU GPL2.1`
- ICU - International Components for Unicode; a library for Unicode support. `ICU license`
- libunistring - Library for manipulating Unicode strings in C. `GNU LGPL3`
- libgiconv - Text conversion library. `GNU LGPL2.1 (library)` or `GNU GPL3 (*iconv* program)`
- SDS - Simple Dynamic Strings; a library for handling C strings in a simpler way, but one that is compatible with normal C string functions. Available via clib. `FreeBSD`
- shoco - Compressor for small text strings. `Expat`
- smaz - Efficient string compression library. `3-clause BSD`
- utf8.h - Single header utf8 string functions. `Unlicense`
- utf8proc - Small, clean library for processing UTF-8 Unicode data. `License`

## Testing

- CHEAT - Very simple unit testing framework. `FreeBSD`
- Check - Unit testing framework for C. `GNU LGPL2.1`
- CMock - Mock/stub generator for C. `Expat`
- cmocka - Unit testing framework with support for mock objects. `Apache 2.0`
- Criterion - KISS, non-intrusive C test framework. `Expat`
- CUnit - Another unit testing framework for C. `GNU LGPL2.0`
- Cutest - Library for unit testing with memory leak detection (Linux, freeBSD and Windows). `GPL2`
- minunit - Minimal unit testing framework for C. `Expat`
- munit - Small but full-featured unit testing framework for C with no dependencies. `MIT`
- Unity - Simple unit testing framework for C. `Expat`

## Text Editor Extensions

While practically any decent programmer’s text editor supports C, there are some extensions that make it more pleasant. This is categorized by editor.

### Atom

- linter-clang - Lint C code in Atom, using Clang. `MIT`
- linter-gcc - Lint C code in Atom, using GCC. `MIT`

### Emacs

- CEDET - Collection of Emacs Development Environment Tools; designed to provide IDE-like features to Emacs. Built-in. `GNU GPL3 or later`
- Flycheck - Modern syntax checking. For C, it can use either GCC or Clang as a back-end. `GNU GPL3 or later`
- Yasnippet - Template system, with C templates for common code snippets. `GNU GPL3 or later`

### Vim

- Syntastic - Syntax checking and linting. `Do What The Fuck You Want To license`
- YouCompleteMe - Code completion engine for Vim. `GNU GPL3`

## Tools

This is a list of useful programs to help you write and debug C code which are not editors, libraries or compilers.

- Artistic Style - Fast and small automatic source code formatter that supports C. `GNU LGPL3`
- address-sanitizer - Fast memory error detector. `Apache 2.0`
- biicode - Modern dependency manager for C. `Expat`
- c - Compile and execute C “scripts” in one go on the command line. Also has shebang support. `Expat`
- c99sh - Run C files using hash-bang. `FreeBSD`
- CBMC - C Bounded Model Checker; a tool for verification of array bounds, pointer safety and user-specified assertions. `Original BSD`
- cdecl - Online service to translate C declarations into English and vice versa. `Public Domain`
- cinclude2dot - Graphs include dependencies in a C project using Graphviz. `Any GNU GPL version (due to underspecification in the file)`
- Complexity - Tool for measuring the complexity of C source code. `GNU GPL3 or later`
- CScout - Source code analyzer and refactoring browser for collections of C programs. `GNU GPL3`
- DDD - Graphical front-end for a range of command-line debuggers. `GNU GPL3 or later`
- GDB - The GNU Project debugger; a debugger for C. `GNU GPL3 or later`
- Glade - RAD tool to enable quick development of GTK+ GUIs. `GNU GPL2.1`
- GMSL - GNU Make Standard Library; a collection of additional functionality for GNU Make. `3-clause BSD`
- GNU Global - Source code tagging tool which works with C. `GNU GPL3`
- gprof - Performance analysis tool. Part of GNU binutils. `GNU GPL3 or later`
- Highlight - Converts source code to formatted text with nice highlighting. `GNU GPL3`
- include-what-you-use - Helps find unecessary inclusions and make suggestions for fixing them. Based on LLVM/Clang (and only works with it). `NCSA`
- indent - Formats C source code automatically to make it easier to read. Also converts from one style of source to another. `GNU GPLv3 or later`
- rr - Debugger that records non-deterministic executions to allow for deterministic debugging. `FreeBSD`
- tup - Very fast, file-based, cross-platform build system. `GNU GPL2.1`
- unifdef - Removes #ifdef and #if directives with their delimited text without touching any other part of the file. `3-clause BSD` and `FreeBSD`
- Valgrind - Range of dynamic analysis tools, including a leak checker. `GNU GPL2.1`

## Utilities

This is a ‘catch-all’ category for anything that doesn’t fit well anywhere else.

- ApeTagLibs - C library for working with APEv2 tags. `Expat`
- bfd - Library for manipulating binary object files. Part of GNU binutils. `GNU GPL3 or later`
- cf4ocl - The C Framework for OpenCL; a cross-platform object-oriented framework for developing and benchmarking OpenCL projects. `GNU LGPL3 (library)` or `GNU GPL3 (project code)`
- CommonMark - C implementation of the CommonMark spec. `Various Licenses`
- CException - C implementation of exceptions. `Expat`
- docopt.c - C implementation of a command-line option parser. `Expat`
- dyncall - Another foreign function interface library. `Expat`
- FANN - Fast Artifical Neural Network library; an implementation of neural networks. `GNU GPL2.1`
- Firm - C 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. `GNU LGPLv2.1`
- Genann - Simple neural network library in C. `Zlib`
- gjrand - Library of random-number generation routines. `GNU GPL2.1` or `GNU GPLv3`
- GNU FreeIPMI - In-band and out-of-band IPMI implementation. `GNU GPL3`
- GNU gperf - Perfect hash function generator, given a list of strings. Outputs C code. `GNU GPL3 or later`
- GNU Libffcall - Collection of libraries for building foreign function interfaces. `GNU GPL3 or later`
- gperftools - Collection of utilities for measuring and improving performance. `3-clause BSD`
- huffandpuff - Minimal Huffman encoder and decoder. `Public Domain`
- kdtree - Simple library for working with KD-trees. `3-clause BSD`
- Kitsune - Efficient, general-purpose framework for dynamic software updating. `GNU LGPL3 or later`
- libavl - Library containing a range of self-balancing binary trees. `GNU GPL3 or later`
- libbson - BSON utility library. `Apache 2.0`
- libCello - Library introducing higher-level programming to C. `3-clause BSD`
- libffi - Portable foreign-function interface library. `Expat`
- libgit2 - Pure C implementation of Git. `GNU GPL2 only, with a linking exception`
- libimobiledevice - Cross-platform protocol library to communicate with iThings. `GNU LGPLv2.1 or later (library)` or `GNU GPL2.1 or later (tools)`
- libnfc - Platform-independent Near-Field Communication library. `GNU LGPL3`
- libPhenom - Deprecated, here for archival purposes. Eventing framework for building high-scalability and high-performance systems. `Apache 2.0`
- ncurses - Coloured terminal UI library. `GNU GPL3 or later`
- nope.c - C-language-based, ultra-light software platform for scalable server-side and networking applications (think node.js for C programmers). `GNU GPL2.1`
- pbc - Protocol buffers library. `Expat`
- rabbitmq-c - Client library for RabbitMQ. `Expat`
- Ragel - DSL for state machines that compiles to C. `GNU GPL2.1`
- Tinyexpr - Tiny recursive-descent parser, compiler and evaluation engine for simple mathematical expressions. `zlib`
- uthash - Hash table implementation, allowing existing structures to be stored in a hash table easily. `1-clause BSD`
- cpu_features - A cross platform C99 library to get cpu features at runtime. `Apache 2.0`
- pblog - Small, low overhead, structured logging library intended for logging formware events.`Apache 2.0`
- libelf - ELF object file access library in C. `GNU GPL2.1`
- mcpp - Portable C preprocessor. `2-clause BSD`
- libusb - Generic access to USB devices. `LGPL2.1`
- alsa-lib - Userspace library to interact with ALSA. `LGPL2.1`
- Capstone - Dissasembly/disassembler framework. `BSD 3-clause`

## XML

> “XML is crap. Really. There are no excuses. XML is nasty to parse for humans, and it’s a disaster to parse even for computers. There’s just no reason for that horrible crap to exist.” - Linus Torvalds

- Expat - Stream-oriented XML parser. `Expat`
- libxml2 - Standards-compliant, portable XML parser. `Expat`
- mini-xml - Small XML reading and writing library. No dependencies aside from C standard library. `Apache 2.0 with exceptions`

c.md Github