README.md 284 KB

# Awesome C #

A curated list of C good stuff. Contributions are welcome.

An important note: first and foremost linked resources are for C, therefore C++ is an afterthought.

Note: there are several awesome-c lists already, but they are having somewhat different sets of libraries in them. This list tries to incorporate them all, and many more other resources. Consider it my personal cheat sheet and index for easier search instead of github stars. Also, original list categories are a mess.

Note: all licenses after project descriptions are leading to actual license text or declaration, if any provided. Source code with no license attached is considered as automatically copyrighted by law or it is falling under the case of terms of service of provided source code publication and hosting service, so keep this in mind. Also, probably sometimes license can be provided or mentioned, but I've failed to find it.

Incorporated lists:


Index




Meta

Standards

### ^ Standards ###


Tooling

Build Systems

#### ^ Build Systems ####

  • aimake - Build tool designed to avoid complex configurations. GPL 3
  • Autoconf - Extensible package of M4 macros that produce shell scripts to automatically configure software source code packages. Part of the Autotools. GPL 2
  • Automake - Tool for automatically generating Makefile.in files compliant with the GNU Coding Standards. Requires the use of Autoconf. Part of the Autotools. GPL 2
  • Bazel - Build system for various operating systems and targets. Apache 2
  • Buck - Build system created and used by Facebook. Apache 2
  • CMake - Cross-platform family of tools designed to build, package and test software. Written in C++11. BSD 3-Clause
  • GNU Make - Tool which controls the generation of executables and other non-source files of a program. GPL 3
  • jamplus/jamplus - Jamplus is a generic code and data build system derived from the original Perforce version of Jam. License
  • Libtool - Generic library support script. Part of the Autotools. GPL 2
  • Meson - Build system based on Ninja and Python. Apache 2
  • ninja-build/ninja - Small, simple build system with a focus on speed. Apache 2
  • Premake - Generates project files for Visual Studio, Xcode and GNU Make. Targets suppport can be extended via modules. BSD 3-Clause
  • Qbs - Modern build tool for software projects. Licenses
  • qmake - Build system included with the Qt Framework. Licenses
  • SCons/scons - Software construction tool based on Python. License
  • gittup/tup - Tup is a file-based build system. GPL 2
  • xmake-io/xmake - Cross-platform build utility based on Lua. Apache 2
  • zeromq/zproject - Project generator and build system support tool for ZeroMQ project. MPL 2
  • michaelforney/samurai - ninja-compatible build tool written in C. Licenses
  • matricks/bam - Build system with Lua scripting. License

Compilers

#### ^ Compilers ####

Debugging and Analysis

#### ^ Debugging and Analysis ####

  • 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. License
  • CBMC - C Bounded Model Checker; a tool for verification of array bounds, pointer safety and user-specified assertions. License
  • cgdb/cgdb - Console front-end to the GNU debugger. GPL 2
  • GNU cflow - Analyzes a collection of source files and prints a graph charting control flow in the program. GPL 3
  • ClangCheck - Static analysis tool, designed to work with Clang. NCSA
  • GNU Complexity - Tool for measuring the complexity of source code. GPL 3
  • Cppcheck - Static analysis tool. Despite the name, works well with C. GPL 3
  • CScout - Source code analyzer and refactoring browser for C programs. GPL 3
  • agl/ctgrind - Checking that functions are constant time with Valgrind. No license
  • GNU DDD - Graphical front-end for a range of command-line debuggers. Licenses
  • GDB - GNU Project debugger. Licenses
  • lldb - LLVM debugger. NCSA
  • rr - Debugger that records non-deterministic executions to allow for deterministic debugging. License
  • SVF-tools/SVF - Pointer Analysis and Program Dependence Analysis for C and C++ Programs. License
  • Valgrind - Range of dynamic analysis tools, including a leak checker. GPL 2

Documentation Generation

#### ^ Documentation Generation ####

  • Cxref - Generates documentation in either LaTeX, HTML, RTF or SGML. GPL 2
  • 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
  • GTK-Doc - Tool for generating C documentation from annotated sources. Has support for the Autotools. GPL 2

Editors

#### ^ Editors ####

Microsoft Windows Environment

#### ^ Microsoft Windows Environment ####

  • Cygwin - Designed to emulate a POSIX-compatible environment extensively under Windows. Licenses
  • MinGW-w64 - Minimalist environment for C development on Windows with 64 bit support. Licenses
  • 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. BSD 3-Clause
  • reactos - A free Windows-compatible Operating System. GPL 2

Profiling

#### ^ Profiling ####

  • gperftools - Collection of utilities for measuring and improving performance. BSD 3-Clause
  • gprof - Performance analysis tool. Part of GNU binutils. Licenses
  • OProfile - Statistical profiler for Linux. Can profile any code (including the kernel!) with low overhead and without recompilation. GPL 2
  • perf - Linux kernel-based profiler with a lot of functionality. GPL 2

Text Editor Extensions

#### ^ Text Editor Extensions ####

  • CCompletion - Notepad++ autocompletion plugin. Works with all identifiers recognized by Ctags. This is a download link. [GPL 2]
  • CEDET - Collection of Emacs Development Environment Tools; designed to provide IDE-like features to Emacs. Built-in. GPL 2
  • lvzixun/Clang-Complete - an autocomplete plugin for sublimetext3. No license
  • editorconfig-core-c - EditorConfig core library written in C (for use by plugins supporting EditorConfig parsing). License
  • Flycheck - Modern syntax checking for Emacs. For C, it can use either GCC or Clang as a back-end. GPL 3
  • AtomLinter/linter-clang - Lint C code in Atom, using Clang. No license
  • hebaishi/linter-gcc - Lint C code in Atom, using GCC. MIT
  • Neomake - make and linting framework for Neovim/Vim. MIT
  • Syntastic - Syntax checking and linting for Vim. WTFPL
  • YASnippet - Emacs code template system, with C templates for common snippets. EPLA
  • YouCompleteMe - Code completion engine for Vim. GPL 3

Utilities

#### ^ Utilities ####


Reading Material

Books

#### ^ Books #### ##### Reference Books #####

##### Beginner Books #####

##### Intermediate Books #####

##### Advanced Books #####

Articles and Other Resources

Benchmarks

##### ^ Benchmarks #####

Beginner Level

##### ^ Beginner Level #####

Intermediate Level

##### ^ Intermediate Level #####

Advanced Level

##### ^ Advanced Level #####

Code Examples

Operating Systems

##### ^ Operating Systems #####

Emulators, VMs

##### ^ Emulators, VMs #####

UI, Windowing, Graphics

##### ^ UI, Windowing, Graphics #####

Language Implementations

##### ^ Language Implementations #####

Challenges

##### ^ Challenges #####

Other Examples

##### ^ Other Examples #####


AI

## ^ AI ## Neural nets, machine learning, pattern recognition etc.

Algoritm Implementations

## ^ Algoritm Implementations ## Some generic agoritms or ones with no specific attachments.

Argument Parsing

## ^ Argument Parsing ##

Calculations and Math

## ^ Calculations and Math ##

  • b-k/apophenia - Library for statistical and scientific computing. GPL 2
  • fredrik-johansson/arb - Library for arbitrary-precision interval arithmetic. LGPL 2.1
  • ATLAS - Automatically Tuned Linear Algebra Software. License
  • BLAS - Basic Linear Algebra Subprograms; a set of routines that provide vector and matrix operations. License
  • Lichtso/CCWT - Complex Continuous Wavelet Transformation. MIT
  • CDFLIB - Library with routines to evaluate cumulative density functions for a variety of standard probability distributions. Also can compute one parameter of the CDF given the others. No license
  • ScientificC/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. LGPL
  • adis300/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
  • FLINT - Fast Library for Number Theory; a library supporting arithmetic with numbers, polynomials, power series and matrices, among others. LGPL 2.1
  • gjrand - Library of random-number generation routines. GPL 2
  • GLPK - GNU Linear Programming Kit; a package designed for solving large-scale linear programming, mixed integer programming and other related problems. GPL 3
  • GMP - GNU Multple Precision Arithmetic Library; a library for arbitrary-precision arithmetic. Licenses
  • GNU MPC - Library for complex number arithmetic. LGPL 3
  • GNU MPFR - Library for arbitrary-precision floating-point arithmetic. LGPL 3
  • GNU MPRIA - Portable mathematics library for multi-precision rational interval arithmetic. GPL 3
  • GSL - The GNU Scientific Library; a sophisticated numerical library. GPL3
  • HdrHistogram/HdrHistogram_c - C port of the HdrHistogram. License
  • igraph- Library for creating and manipulating large graphs. GPL2
  • KISS FFT - Very simple fast Fourier transform library. BSD
  • LAPACKE - C interface to LAPACK. License
  • PARI/GP - Computer algebra system for number theory; includes a compiler to C. GLP
  • PETSc - Suite of data structures and routines for scalable parallel solution of scientific applications modelled by partial differential equations. License
  • PROB - Library that handles various discrete and continuous probability density functions. LGPL 3
  • PetteriAimonen/libfixmatrix - C library for fixed point matrix, quaternion and vector calculations. MIT
  • canonizer/libgpuvm - library which simplifies host-GPU data transfer using userspace pagefault handling. No license
  • libtom/libtommath - LibTomMath is a free open source portable number theoretic multiple-precision integer library written entirely in C. Unlicense
  • JuliaMath/openlibm - High quality system independent, portable, open source libm implementation. License
  • imneme/pcg-c - PCG — C Implementation. Apache 2
  • imneme/pcg-c-basic - PCG — Minimal C Implementation. Apache 2
  • libtom/tomsfastmath - TomsFastMath is a fast public domain, open source, large integer arithmetic library written in portable ISO C. Licenses
  • cvxgrp/scs - C package that solves convex cone problems via operator splitting. MIT
  • SLEPc - Library for the solution of large, sparse eigenvalue problems on parallel computers. BSD 2-Clause
  • slim-curve/slim-curve - SLIM Curve: a package for exponential curve fitting of combined spectral lifetime image data. GPL 3
  • tinyexpr - Tiny recursive-descent parser, compiler and evaluation engine for simple mathematical expressions. Zlib
  • Yeppp! - Very fast, SIMD-optimized mathematical library. License
  • PetteriAimonen/libfixmath - Cross Platform Fixed Point Maths Library.MIT
  • datenwolf/linmath.h - Linear math as required for computer graphics. WTFPL

Compression

## ^ Compression ##

Concurrency and Parallelism

## ^ Concurrency and Parallelism ##

Cryptography

## ^ Cryptography ##

Databases

## ^ Databases ##

Data Structures and Types

## ^ Data Structures and Types ##

Events

## ^ Events ##

Foreign Function Interfaces

## ^ Foreign Function Interfaces ##


Filetype Targets

Libraries for working with specific filetypes or classes of filetypes.

╠════ Binaries

### ^ Binaries ###

╠════ CSV

### ^ CSV ###

╠════ HTML

### ^ HTML ###

╠════ JSON

### ^ JSON ###

╠════ INI

### ^ INI ###

╠════ Markdown

### ^ Markdown ###

╠════ XML

### ^ XML ###

╚════ Other Filetypes

### ^ Other Filetypes ###


Flow Control and Language Extension

## ^ Flow Control and Language Extension ##


Game Development

Engines, libraries and other helpful things specifically for making games.

╠════ Game Engines

### ^ Game Engines ###

╠════ Graphics Rendering

### ^ Graphics Rendering ### Everything related to video rendering only. Also visit awesome-opengl and awesome-vulkan.

╚════ Gamedev Helping Libraries

### ^ Gamedev Helping Libraries ###


Geography

## ^ Geography ## Geodata, street maps, navigation and so on

GUI

## ^ GUI ##

Hardware Oriented

## ^ Hardware Oriented ##

Hashing

## ^ Hashing ## Hash function implementations for non-cryptographic purposes.

Image Processing and Computer Vision

## ^ Image Processing and Computer Vision ##

Integrated Debugging and Logging

## ^ Integrated Debugging and Logging ##

I/O

## ^ I/O ##

  • Lajnold/falloc - falloc creates files of a user-specified size. It uses the posix_fallocate syscall for allocating the right size directly, instead of copying data like the commonly used dd tool does. GPL 3
  • cgaebel/pipe - A simple thread-safe FIFO in C. MIT
  • cxong/tinydir - Lightweight, portable and easy to integrate C directory and file reader. License
  • reverbrain/eblob - Eblob is an append-only low-level IO library, which saves data in blob files. Created as low-level backend for elliptics. LGPL 3
  • tronkko/dirent - C/C++ library for retrieving information on files and directories. MIT
  • jwerle/fs.c - File system API much like Node's fs module. MIT
  • zevv/duc - Library and suite of tools for inspecting disk usage. LGPL 3
  • kwhat/libuiohook - A multi-platform C library to provide global keyboard and mouse hooks from userland.GPL 3
  • dr-soft/dr_fs - Single file libraries for working with file system. Public Domain
  • mpaland/printf - Standalone printf, sprintf and (v)snprintf implementation. MIT

Lexing and Parsing

## ^ Lexing and Parsing ##

  • GNU Bison - General-purpose parser generator that converts an annotated context-free grammar into a range of parsers. GPL 3
  • bbu/simple-interpreter - A hackable and extensible lexer, parser and interpreter for a minimalistic, imperative, C-like language. No license
  • dcreager/libpush - An arrow-based parser combinator library for C. BSD 3-Clause
  • kmussel/Moment - Natural Language Date Parser Using Lex/Yacc/C. MIT
  • skvadrik/re2c - lexer generator for C/C++. License
  • westes/flex - The Fast Lexical Analyzer - scanner generator for lexing in C and C++. License
  • orangeduck/mpc - Parser combinator library. BSD 2-Clause
  • transceptor-technology/libcleri - Libcleri is a powerful tool to build languages. From a built language, libcleri can automatically create parse trees, which are data structures representing how a grammar matches input. It also provides feedback in case the input does not match the language. This can be useful for auto-completion, suggestions or error handling. MIT
  • dr-soft/url - URL parsing in C. BSD 2-Clause

Memory Management

## ^ Memory Management ##

Multimedia

## ^ Multimedia ## Audio and video processing.

Multiple Purpose Libraries

## ^ Multiple Purpose Libraries ##

  • parallella/pal - Optimized library for maths, parallel processing and data movement. Apache 2
  • APR - Apache Portable Runtime; another library of cross-platform utility functions. Apache 2
  • GLib - Library of utility functions and structures, designed to be portable, efficient and powerful. LGPL 2.1
  • keybuk/libnih - Lightweight library of C functions and structures. GPL 2
  • wolkykim/qlibc - Simple and powerful C library, designed as a replacement for GLib while focusing on being small and light. License
  • chutsu/cog - C common library containing common data structures, sorting algorithms and utility functions. MIT
  • cs50/libcs50 - CS50 Library for C. MIT
  • dcreager/libcork - A simple, easily embeddable cross-platform C library. BSD 3-Clause
  • faragon/libsrt - C library for writing fast and safe C code, faster. It provides string, vector, bit set, set, map, hash set, and hash map handling. Suitable for soft and hard real-time. Allows both heap and stack allocation. BSD 3-Clause
  • koanlogic/libu - LibU is a multiplatform utility library written in C, with APIs for handling memory allocation, networking and URI parsing, string manipulation, debugging, and logging in a very compact way, plus many other miscellaneous tasks. License
  • letoram/arcan - Display Server, Multimedia Framework, Game Engine-> "Desktop Engine". Licenses
  • saprykin/plibsys - Highly portable C system library: threads and synchronization primitives, sockets (TCP, UDP, SCTP), IPv4 and IPv6, IPC, hash functions (MD5, SHA-1, SHA-2, SHA-3, GOST), binary trees (RB, AVL) and more. Native code performance. MIT
  • tboox/tbox - A glib-like multi-platform c library. Apache 2
  • zpl-c/zpl - Your C99 Powerkit. Licenses
  • dmw/caffeine - C Application Framework. LGPL 2.1
  • breckinloggins/libuseful - A collection of useful data structures, algorithms, and utilities for C programming. MIT
  • erimatnor/libckit - A kit of C-based utilities and data structures. Apache 2
  • pforemski/libpjf - A C library of data structures with tools (based on libasn). GPL 3
  • stevedekorte/basekit - C based OO portable data structure library. BSD 3-Clause
  • mjansson/foundation_lib - Cross-platform foundation library in C providing basic support data types and functions to write applications and games in a platform-independent fashion. Unlicense
  • happyfish100/libfastcommon - Functions including: string, logger, chain, hash, socket, ini file reader, base64 encode / decode, url encode / decode, fast timer, skiplist, object pool etc. detail info please see the c header files. LGPL
  • sabit/libcprops - C prototyping tools. LGPL 2.1
  • JulNadeauCA/libagar - Library providing GUI, networking, audio, vector graphics, math and other things. License


Networking

╠════ DNS

### ^ DNS ###

╠════ HTTP

### ^ HTTP ###

╠════ Mail

### ^ Mail ###

╠════ Messaging and Brokers

### ^ Messaging and Brokers ###

╠════ Remote Desktops

### ^ Remote Desktops ###

  • FreeRDP/FreeRDP - FreeRDP is a free remote desktop protocol library and clients. Apache 2
  • LibVNC/libvncserver - LibVNCServer/LibVNCClient are cross-platform C libraries that allow you to easily implement VNC server or client functionality in your program. GPL 2

╠════ RPC

### ^ RPC ###

╠════ TCP, UDP, Sockets

### ^ TCP, UDP, Sockets ###

╠════ Web Servers

### ^ Web Servers ###

╠════ Web Service APIs

### ^ Web Service APIs ###

╠════ Websockets

### ^ Websockets ###

╚════ Uncategorized Networking

### ^ Uncategorized Networking ###


OpenCL

## ^ OpenCL ##

OpenCL, CUDA, OpenMP and other similar APIs.

OS Specifics

## ^ OS Specifics ##

Procedural Generation

## ^ Procedural Generation ##

Processes and IPC

## ^ Processes and IPC ##

Regex and Search

## ^ Regex and Search ##

Serialization

## ^ Serialization ##

Source Code Collections

## ^ Source Code Collections ##

Scientific

## ^ Scientific ## Math mostly located in Calculations category

Special Purpose

## ^ Special Purpose ## Libraries with very narrow non-generic purpose.

  • TulipCharts/tulipindicators - Library of functions for technical analysis of financial data. LGPL 3
  • MatthewLM/cbitcoin - Low-level bitcoin library written in C. MIT
  • RhysU/ESIO - Provides simple, high throughput input and output of structured data sets using parallel HDF5. ESIO is designed to support reading and writing turbulence simulation restart files within C, C++, and modern Fortran applications. LGPL 2.1
  • Unidata/netcdf-c - Official GitHub repository for netCDF-C libraries and utilities. BSD 3-Clause
  • jgarzik/picocoin - A bitcoin library in C, SPV wallet & more. License
  • libtrading/libtrading - Ultra low-latency trading connectivity library for C and C++. BSD 2-Clause
  • nayuki/QR-Code-generator - High-quality QR Code generator library in Java, JavaScript, Python, C++, C. MIT
  • qiq/Czech-morphology - Czech morphology library, using data files compatible with PDT 2.0 License
  • sleuthkit/sleuthkit - The Sleuth Kit® (TSK) is a library and collection of command line digital forensics tools that allow you to investigate volume and file system data. The library can be incorporated into larger digital forensics tools and the command line tools can be directly used to find evidence. Licenses
  • hroptatyr/uterus - universal tick encoder library to efficiently transport huge amounts of tick data. BSD 3-Clause
  • luke-jr/bfgminer - Modular ASIC/FPGA miner written in C, featuring overclocking, monitoring, fan speed control and remote interface capabilities. GPL 3

Standard Libraries

## ^ Standard Libraries ## Implementations of the C standards

String Manipulation

## ^ String Manipulation ##

Testing

## ^ Testing ##

TUI

## ^ TUI ## Textual User Interface


Uncategorized

# ^ Uncategorized #