Awesome Modern C++
A collection of resources on modern C++.
The goal is to collect a list of resources to help people learn about
and leverage modern C++11 and beyond.
Contributing
To add, remove or change things on the list:
please submit a pull request to the GitHub repository.
Books
For a comprehensive guide to C++ books see the
Stackoverflow Definitive C++ Book Guide and List.
Find the latest C++ news and updates:
Listen to the latest C++ podcasts:
Read the latest C++ standard proposals:
Discuss everything related to C++:
Ask your C++ questions:
Maybe your question was already answered in a FAQ?:
Go to one of the many C++ conferences:
Find C++ user groups:
Talks
TODO curate list of good talks on how to simplify code using C++11/17/20 features
Start with SG20 Education and Recommended Videos for Teaching C++.
Blogs
Websites
Project Starter Templates
- ModernCppStarter - A template for kick-starting modern C++ projects using CMake, CI, code coverage, clang-format, reproducible dependency management and more.
- modern-cpp-template - A template for modern C++ projects using CMake, Clang-Format, CI, unit testing and more, with support for downstream inclusion.
- cmake_template - A template CMake project to get you started with C++ and tooling.
- Pitchfork - Pitchfork is a Set of C++ Project Conventions.
Libraries
This is not supposed to be a comprehensive list of all C and C++
libraries. It is a list of high-quality modern libraries with general
applicability (serialization, database, testing, etc) or high-quality
libraries with novel use of new C++ features.
Kitchensink / Framework
- abseil - Abseil is an open-source collection of C++ code (compliant to C++11) designed to augment the C++ standard library.
- Boost - Collection of C++ libraries.
- Folly - Facebook Open-source Library.
- POCO - The POCO C++ Libraries are powerful cross-platform C++ libraries for building network- and internet-based applications that run on desktop, server, mobile, IoT, and embedded systems.
- nonstd-lite - Parent of *-lite repositories, a migration path to post-C++11 features for pre-C++11 environments.
- xtd - Modern C++17/20 framework to create console (CLI), forms (GUI like WinForms) and tunit (unit tests like Microsoft Unit Testing Framework) applications on Windows, macOS, Linux, iOS and android.
Testing
- Approval Tests for C++ - Native ApprovalTests for C++ on Linux, Mac and Windows.
- autocheck - QuickCheck and SmallCheck clones for C++.
- Bandit - A header-only framework for C++11 that wants to make working with unit tests a pleasant experience.
- Boost:UT - C++20 μ(micro)/Unit Testing framework, single-header, without need for macros.
- Boost.Test - Boost testing framework.
- Catch 🔥 - A modern, C++-native, header-only, framework for unit-tests, TDD and BDD.
- clean-test - A modern C++-20 testing framework.
- doctest 🚀 - The fastest feature-rich C++11/14/17/20 single-header testing framework for unit tests and TDD.
- Fakeit - C++ mocking made easy. A simple yet very expressive, headers only library for c++ mocking.
- Googletest - Google Testing and Mocking Framework.
- Mull - Practical mutation testing tool for C and C++
- rapidcheck - QuickCheck clone for C++.
- snitch - Lightweight C++20 testing framework.
Benchmarking
Libraries and frameworks for creating micro-benchmarks.
- Celero -
C++ Benchmark Authoring Library/Framework.
- Google Benchmark 🌟 - A microbenchmark support library.
- hayai - the C++ benchmarking framework.
- Nonius - A C++ micro-benchmarking framework.
C++ Benchmark Authoring Library/Framework.
- nanobench - Simple, fast, accurate single-header microbenchmarking functionality for C++11/14/17/20
Logging
- fmtlog - A fmtlib-style logging library with latency in nanoseconds.
- spdlog - Fast C++ logging library.
- loguru - A lightweight and flexible C++ logging library
Threading
- concurrentqueue - A fast multi-producer, multi-consumer lock-free concurrent queue for C++11.
- Cpp-Taskflow - Modern C++ Parallel Task Programming Library
- Junction - Concurrent data structures in C++.
- MPMCQueue - A bounded multi-producer multi-consumer lock-free queue written in C++11.
- SPSCQueue - A bounded single-producer single-consumer wait-free and lock-free queue written in C++11.
- Threading Building Blocks - Threading Building Blocks (TBB) is a C++ template library developed by Intel for parallel programming on multi-core processors. Using TBB, a computation is broken down into tasks that can run in parallel. The library manages and schedules threads to execute these tasks.
- execq - Smart queue that executes tasks in threadpool-like manner (serial / concurrent) in C++11.
- concurrencpp - A general concurrency library containing tasks, executors, timers and C++20 coroutines to rule them all.
Parsing & Serialization
- json 🥇 - JSON for Modern C++.
- jsoncpp - A C++ library for interacting with JSON.
- toml++ - A header-only C++17 library for parsing TOML v0.5.0 and later.
- tinytoml -A header only C++11 library for parsing TOML.
- yaml-cpp - A YAML parser and emitter in C++.
- cpptoml - A header-only library for parsing TOML configuration files.
- cereal - A C++11 library for serialization.
- cista - A C++17 library for high-performance zero-copy binary serialization.
- simdjson - Accelerate the parsing of JSON per se using commonly available SIMD instructions
- Boost.JSON - A JSON library with robust support for custom allocators.
- hjson-cpp - A C++11 library for reading and writing Hjson and/or JSON files.
- json_struct - High performance, single header JSON parser, parsing directly to and from C++ structs.
- daw_json_link - Fast, convenient JSON serialization and parsing in C++
- {fmt} - Small, safe and fast formatting library.
- Inja - A Template Engine for Modern C++.
- Mustache - Mustache text templates in C++11.
- tinyformat.h - Minimal, type safe printf replacement library for C++.
- pprint - Pretty Printer for Modern C++.
Scripting
- sol2 - C++ library binding to Lua.
- ChaiScript - An easy to use embedded scripting language for C++.
- pybind11 - Seamless operability between C++11 and Python.
Web / HTTP
- Beast - HTTP and WebSocket built on Boost.Asio in C++11.
- cpprestsdk - The C++ REST SDK is a Microsoft project for cloud-based client-server communication in native code using a modern asynchronous C++ API design. This project aims to help C++ developers connect to and interact with services.
- cpr - C++ Requests: Curl for People, a spiritual port of Python Requests.
- Crow - A Fast and Easy to use microframework for creating webservers (inspired by Python Flask).
- dmbcs-micro-server - C++20-based JSON, HTML, text and PNGs over HTTP; simple way to embed a server into your application to provide a web-based UI.
- Drogon - A C++14/17 based, high-performance HTTP application framework
- oat++ - High-performance Web framework (C++11, zero-dependency).
- pistache - An elegant C++ REST framework.
- restbed - Restbed framework brings asynchronous RESTful functionality to C++11 applications.
Database
- mongo-cxx-driver - C++ Driver for MongoDB.
- redox - Modern, asynchronous, and wicked fast C++11 client for Redis.
- sqlite_orm - powerful header only SQLite3 ORM library for C++14.
- sqlite3pp - C++ wrapper of SQLite3 API.
- sqlpp11 - A type safe SQL template library for C++.
- libpqxx - The official C++ client API for PostgreSQL.
- TinyORM - Modern C++ ORM library.
BioC++
- SeqAn - The modern C++ library for sequence analysis (C++17, C++20).
Misc
- ASAP - header-only library to parse, display, operate and iterate on dates.
- BigIntegerCPP - A C++11 large integer library with effective high performance, simplistic in nature and also clean in the eyes.
- CAF - An Open Source Implementation of the Actor Model in C++.
- Cinder - Cinder is a free and open source library for professional-quality creative coding in C++.
- Conduit - High Performance Streams Based on Coroutine TS.
- cppitertools - itertools (python) implementation for C++14
- cxxopts - Lightweight C++ command line option parser.
- date - A date and time library based on the C++11/14/17 header.
- docopt.cpp - docopt creates beautiful command-line interfaces.
- EnTT - A header-only, fast and, reliable entity-component system (ECS) for modern C++.
- Font Chef - A C99 and C++14 library to cook fonts and render text
- HashLibPlus - A C++11 library that provides an easy to use interface for computing hashes and checksums of strings, files, streams, bytearrays and untyped data to mention but a few. It also supports Incremental Hashing.
- IntX - A C++11 port of IntX arbitrary precision Integer library with speed, about O(N * log N) multiplication/division algorithms implementation.
- iod - Meta programming utilities for C++14.
- Magic Enum - Static reflection for enums (to string, from string, iteration) for modern C++, work with any enum type without an