awesome-modern-cpp
A collection of resources on modern C++
https://github.com/rigtorp/awesome-modern-cpp
Last synced: 8 days ago
JSON representation
-
Tools
-
[Build system](https://en.wikipedia.org/wiki/Build_automation)
- CMake - Cross-platform family of tools designed to build, test and package software.
- Meson - is an open source build system meant to be both extremely fast, and, even more importantly, as user friendly as possible.
- Bazel - is a fast, scalable, multi-language and extensible build system.
- build2 - is a cross-platform build toolchain for developing and packaging C and C++ code.
-
[Fuzzing](https://en.wikipedia.org/wiki/Fuzzing)
- American fuzzy lop - American fuzzy lop is a security-oriented fuzzer.
- hongfuzz - A security oriented, feedback-driven, evolutionary, easy-to-use fuzzer with interesting analysis options.
- libFuzzer - A library for coverage-guided fuzz testing.
- hongfuzz - A security oriented, feedback-driven, evolutionary, easy-to-use fuzzer with interesting analysis options.
-
Misc
- Compiler Explorer - Interactively explore the assembly output of your C++ code.
- clang-format - A tool to format C++ code.
- clangd - understands your C++ code and adds smart features to your editor: code completion, compile errors, go-to-definition and more.
- ccls - C/C++/ObjC language server supporting cross references, hierarchies, completion and semantic highlighting, forked from cquery, which is under active development
- modern-cpp-font-lock-mode - Syntax highlighting support for Modern C++ with emacs
- irony-mode - A C/C++ minor mode for Emacs powered by libclang.
- cquery - C/C++ language server supporting multi-million line code base, powered by libclang. Emacs, Vim, VSCode, and others with language server protocol support. Cross references, completion, diagnostics, semantic highlighting and more (No more commits since Nov 27, 2018)
-
[Static analysis](https://en.wikipedia.org/wiki/Static_program_analysis)
- clang-tidy - is a clang-based C++ “linter” tool. Its purpose is to provide an extensible framework for diagnosing and fixing typical programming errors, like style violations, interface misuse, or bugs that can be deduced via static analysis. clang-tidy is modular and provides a convenient interface for writing new checks.
- clang-analyzer - is a source code analysis tool that finds bugs in C, C++, and Objective-C programs. It implements path-sensitive, inter-procedural analysis based on symbolic execution technique.
- cppcheck - is a static analysis tool for C/C++ code. It provides unique code analysis to detect bugs and focuses on detecting undefined behaviour and dangerous coding constructs.
-
[Package management](https://en.wikipedia.org/wiki/Package_manager)
-
[Dynamic analysis](https://en.wikipedia.org/wiki/Dynamic_program_analysis)
- sanitizers - This project is the home for Sanitizers: AddressSanitizer, MemorySanitizer, ThreadSanitizer, LeakSanitizer, and more.
- Valgrind - is an instrumentation framework for building dynamic analysis tools. There are Valgrind tools that can automatically detect many memory management and threading bugs, and profile your programs in detail. You can also use Valgrind to build new tools.
-
-
Libraries
-
Misc
- Cinder - Cinder is a free and open source library for professional-quality creative coding in C++.
- openFrameworks - an open source C++ toolkit for creative coding.
- CAF - An Open Source Implementation of the Actor Model in C++.
- range-v3 - Experimental range library for C++11/14/17.
- date - A date and time library based on the C++11/14/17 <chrono> header.
- cxxopts - Lightweight C++ command line option parser.
- iod - Meta programming utilities for C++14.
- cppitertools - itertools (python) implementation for C++14
- docopt.cpp - docopt creates beautiful command-line interfaces.
- Vireo - A lightweight and versatile video processing library by Twitter.
- rang - A simple, modern & header only C++11 library for colors in your terminal.
- tweeny - A header only interpolation library with 30+ easing functions.
- PEGTL - Parsing Expression Grammar Template Library (C++11, header-only).
- simple_match - Simple header only pattern matching for c++14.
- indicators - Activity Indicators for Modern C++.
- Nameof - A header-only C++17 library provides nameof macros and functions to obtain the simple name of variable, type, function, macro, and enum.
- Magic Enum - Static reflection for enums (to string, from string, iteration) for modern C++, work with any enum type without any macro or boilerplate code.
- tabulate - Table Maker for Modern C++.
- 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
- Wise Enum - Static reflection for enums similar to Magic Enum but works with C++ 11/14/17.
- ASAP - header-only library to parse, display, operate and iterate on dates.
- random - A simple, convenient, header only Random for modern C++.
- BigIntegerCPP - A C++11 large integer library with effective high performance, simplistic in nature and also clean in the eyes.
- Conduit - High Performance Streams Based on Coroutine TS.
- 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.
- SimpleBaseLib4CPP - A simple C++11 Base Encoding library that provides at the moment support for encoding and decoding various bases such as Base16, Base32 (various variants), Base58 (various variants), Base64 (various variants). [MIT]
- SRL-CPP - A Simple Regex Language builder library written in C++11 that provides an easy to use interface for constructing both simple and complex regex expressions. [MIT]
- AssociatedEnum - header-only library for C++ for enumerations with associated values.
-
Kitchensink / Framework
- 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.
- Boost - Collection of C++ libraries.
- abseil - Abseil is an open-source collection of C++ code (compliant to C++11) designed to augment the C++ standard library.
- 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.
- Folly - Facebook Open-source Library.
- nonstd-lite - Parent of *-lite repositories, a migration path to post-C++11 features for pre-C++11 environments.
-
Testing
- Boost.Test - Boost testing framework.
- Catch - A modern, C++-native, header-only, framework for unit-tests, TDD and BDD.
- rapidcheck - QuickCheck clone for C++.
- Fakeit - C++ mocking made easy. A simple yet very expressive, headers only library for c++ mocking.
- autocheck - QuickCheck and SmallCheck clones for C++.
- Googletest - Google Testing and Mocking Framework.
- clean-test - A modern C++-20 testing framework.
- Mull - Practical mutation testing tool for C and C++
- Approval Tests for C++ - Native ApprovalTests for C++ on Linux, Mac and Windows.
- 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.
- doctest - The fastest feature-rich C++11/14/17/20 single-header testing framework for unit tests and TDD.
- snitch - Lightweight C++20 testing framework.
-
String formatting & templating
- {fmt} - Small, safe and fast formatting library.
- tinyformat.h - Minimal, type safe printf replacement library for C++.
- Mustache - Mustache text templates in C++11.
- Inja - A Template Engine for Modern C++.
- pprint - Pretty Printer for Modern C++.
-
Scripting
- ChaiScript - An easy to use embedded scripting language for C++.
- pybind11 - Seamless operability between C++11 and Python.
- sol2 - C++ library binding to Lua.
-
Web / HTTP
- 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.
- pistache - An elegant C++ REST framework.
- restbed - Restbed framework brings asynchronous RESTful functionality to C++11 applications.
- 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.
- Beast - HTTP and WebSocket built on Boost.Asio in C++11.
- oat++ - High-performance Web framework (C++11, zero-dependency).
- pistache - An elegant C++ REST framework.
- Drogon - A C++14/17 based, high-performance HTTP application framework
- cpr - C++ Requests: Curl for People, a spiritual port of Python Requests.
-
Parsing & Serialization
- yaml-cpp - A YAML parser and emitter in C++.
- jsoncpp - A C++ library for interacting with JSON.
- cereal - A C++11 library for serialization.
- cpptoml - A header-only library for parsing TOML configuration files.
- json - JSON for Modern C++.
- daw_json_link - Fast, convenient JSON serialization and parsing in C++
- json_struct - High performance, single header JSON parser, parsing directly to and from C++ structs.
- toml++ - A header-only C++17 library for parsing TOML v0.5.0 and later.
- cista - A C++17 library for high-performance zero-copy binary serialization.
- hjson-cpp - A C++11 library for reading and writing Hjson and/or JSON files.
- simdjson - Accelerate the parsing of JSON per se using commonly available SIMD instructions
- tinytoml - A header only C++11 library for parsing TOML.
- Boost.JSON - A JSON library with robust support for custom allocators.
-
Logging
-
Threading
- concurrentqueue - A fast multi-producer, multi-consumer lock-free concurrent queue for C++11.
- Junction - Concurrent data structures in C++.
- concurrencpp - A general concurrency library containing tasks, executors, timers and C++20 coroutines to rule them all.
- MPMCQueue - A bounded multi-producer multi-consumer 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.
- SPSCQueue - A bounded single-producer single-consumer wait-free and lock-free queue written in C++11.
- execq - Smart queue that executes tasks in threadpool-like manner (serial / concurrent) in C++11.
- Cpp-Taskflow - Modern C++ Parallel Task Programming Library
-
Database
- sqlpp11 - A type safe SQL template library for C++.
- mongo-cxx-driver - C++ Driver for MongoDB.
- sqlite_orm - powerful header only SQLite3 ORM library for C++14.
- redox - Modern, asynchronous, and wicked fast C++11 client for Redis.
- sqlite3pp - C++ wrapper of SQLite3 API.
- libpqxx - The official C++ client API for PostgreSQL.
- TinyORM - Modern C++ ORM library.
-
Benchmarking
- Celero
- hayai - the C++ benchmarking framework.
- Nonius - A C++ micro-benchmarking framework.
- Google Benchmark - A microbenchmark support library.
- nanobench - Simple, fast, accurate single-header microbenchmarking functionality for C++11/14/17/20
-
-
Community
-
- CppCast - The first podcast by C++ developers for C++ developers!
- Cpp.chat - Comments on c++ and issues of interest to c++ programmers.
- News, Status & Discussion about Standard C++
- r/cpp - The C++ subreddit.
- C++ Weekly - Educational videos by Jason Turner.
- C++ Standards Committee Papers
- C++ Slack
- CoreHard Telegram group
- r/cpp_questions - A subreddit for C++ questions and answers.
- Stackoverflow C++ - Stackoverflow questions about C++.
- C++ Super-FAQ
- C++11 FAQ
- List of upcoming and past C++ conferences
- Meeting C++ list of user groups
- List of user groups in the C++ Super-FAQ
- C/C++ meetups
- C++ Weekly - Educational videos by Jason Turner.
-
Blogs
- Guru of the Week (older posts) - Older Guru of the Week posts.
- Sticky Bits - A blog looking at developing software for real-time and embedded systems.
- Paul Fultz II's Blog
- Embedded in Academia - John Regehr, Professor of Computer Science, University of Utah, USA.
- Simplify C++ - Write clean and maintainable C++.
- Fluent C++ - Expressive Code in C++.
- Guru of the Week (new posts) - A regular series of C++ programming problems created and written by Herb Sutter.
- Preshing on Programming
- Andrzej's C++ blog - Guidelines and thoughts about C++.
- Anthony Williams' blog
- Eric Niebler
- Marshall's C++ Musings
- Sutter's Mill - Herb Sutter on software development.
- The View from Aristeia - Scott Meyers' Professional Activities and Interests.
- Visual C++ Team Blog
- Why is a raven like a writing desk?
- Guru of the Week (older posts) - Older Guru of the Week posts.
- Anthony Williams' blog
- Why is a raven like a writing desk?
-
Talks
- Going Native 2013: Sean Parent - "C++ Seasoning"
- code::dive conference 2014 - Scott Meyers: Cpu Caches and Why You Care - CPUCachesHandouts.pdf))
- code::dive conference 2015 - Andrei Alexandrescu - Writing Fast Code I - ecros.pl/event/codedive/files/presentations/2015/FastCode-handouts.pdf))
- code::dive conference 2015 - Andrei Alexandrescu - Writing Fast Code II - ecros.pl/event/codedive/files/presentations/2015/FastCode-handouts.pdf))
- SG20 Education and Recommended Videos for Teaching C++
- CppCon 2014: Bjarne Stroustrup "Make Simple Tasks Simple!"
- CppCon 2014: Herb Sutter "Lock-Free Programming (or, Juggling Razor Blades), Part I"
- CppCon 2014: Herb Sutter "Lock-Free Programming (or, Juggling Razor Blades), Part II"
- CppCon 2014: Scott Meyers "Type Deduction and Why You Care"
- CppCon 2015: Bjarne Stroustrup "Writing Good C++14"
- CppCon 2015: Herb Sutter "Writing Good C++14... By Default"
- CppCon 2016: Chandler Carruth “Garbage In, Garbage Out: Arguing about Undefined Behavior..."
- CppCon 2016: Herb Sutter "Leak-Freedom in C++... By Default."
- CppCon 2017: Jason Turner "Practical C++17"
- CppCon 2018: Jonathan Boccara “105 STL Algorithms in Less Than an Hour”
- C++Now Talks - Talks from the C++Now conference.
- Going Native 2012: Variadic Templates are Funadic
- Going Native 2013: Stephan T Lavavej - "Don't Help the Compiler"
- CppCon 2016: Chandler Carruth “Garbage In, Garbage Out: Arguing about Undefined Behavior..."
- CppCon 2016: Herb Sutter "Leak-Freedom in C++... By Default."
-
Websites
- C++ Best Practices - Collaborative Collection of C++ Best Practices.
- C++ Patterns - A repository of modern C++ patterns.
- C++ reference - C++ reference.
-
-
Books
- Professional CMake - A practical guide for using CMake to build your C++ projects.
- Stackoverflow Definitive C++ Book Guide and List
- A Tour of C++
- The C++ Programming Language
- Effective Modern C++
- Overview of the New C++
- C++ Concurrency in Action - Reference and guide to writing multi-threaded code with standard C++.
- C++17 - The Complete Guide - Giving guidance on how to use Language and Library Features of C++17.
- Modern C++ Tutorial: C++ 11/14/17/20 On the Fly - The book claims to be "On the Fly". Its intent is to provide a comprehensive introduction to the relevant features regarding modern C++ (before 2020s).
- C++ Concurrency in Action - Reference and guide to writing multi-threaded code with standard C++.
- C++ Core Guidelines - Guidelines for using modern C++.
- A Tour of C++
-
About
-
[Package management](https://en.wikipedia.org/wiki/Package_manager)
-
-
Project Starter Templates
-
Websites
- 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.
- Pitchfork - Pitchfork is a Set of C++ Project Conventions.
- cmake_template - A template CMake project to get you started with C++ and tooling.
-
Programming Languages
Sub Categories
Misc
37
Talks
20
Blogs
19
Parsing & Serialization
13
Testing
13
Web / HTTP
10
[Package management](https://en.wikipedia.org/wiki/Package_manager)
9
Threading
8
Database
7
Websites
7
Kitchensink / Framework
6
Benchmarking
5
String formatting & templating
5
[Build system](https://en.wikipedia.org/wiki/Build_automation)
4
[Fuzzing](https://en.wikipedia.org/wiki/Fuzzing)
4
Scripting
3
Logging
3
[Static analysis](https://en.wikipedia.org/wiki/Static_program_analysis)
3
[Dynamic analysis](https://en.wikipedia.org/wiki/Dynamic_program_analysis)
2
Keywords
cpp
30
c-plus-plus
18
header-only
14
cpp17
12
cpp11
11
cplusplus
9
serialization
7
cmake
6
cpp20
6
no-dependencies
6
single-file
6
json
5
c
5
testing
5
package-manager
4
cpp14
4
reflection
4
benchmark
4
cplusplus-17
4
c-plus-plus-17
4
single-header-lib
4
library
3
http
3
windows
3
mit-license
3
c-plus-plus-11
3
template
3
cplusplus-20
3
modern-cpp
3
single-header
3
test-framework
3
deserialization
3
cpp-library
3
cli
3
clang-format
2
cmakelists
2
ci
2
ccache
2
clang
2
osx
2
networking
2
linux
2
high-performance
2
codecov
2
continuous-integration
2
dependency-manager
2
sqlite
2
open-source
2
orm
2
postgresql
2