Home

Awesome

Windows Linux+macOS Coverage

Sane C++ Libraries

YouTube X (formerly Twitter) Follow Discord GitHub Repo stars

Sane C++ Libraries is a set of C++ platform abstraction libraries for macOS, Windows and Linux.

Sane Cpp

Principles:

✅ Fast compile times
✅ Bloat free
✅ Simple readable code
✅ Easy to integrate
⛔️ No C++ Standard Library / Exceptions / RTTI
⛔️ No third party dependencies (prefer OS API)

Visit the documentation website for more information.

Libraries

LibraryDescription
Algorithms🟥 Placeholder library where templated algorithms will be placed
Async🟨 Async I/O (files, sockets, timers, processes, fs events, threads wake-up)
Async Streams🟥 Read, transform and write data concurrently from async sources to destinations.
Build🟨 Minimal build system where builds are described in C++
Containers🟨 Generic containers (SC::Vector, SC::SmallVector, SC::Array etc.)
File🟩 Synchronous Disk File I/O
File System🟩 File System operations { exists, copy, delete } for { files and directories }
File System Iterator🟩 Enumerates files and directories inside a given path
File System Watcher🟩 Notifications {add, remove, rename, modified} for files and directories
Foundation🟩 Primitive types, asserts, limits, Function, Span, Result, Tagged Union
Hashing🟩 Compute MD5, SHA1 or SHA256 hashes for a stream of bytes
Http🟥 HTTP parser, client and server
Plugin🟨 Minimal dependency based plugin system with hot-reload
Process🟩 Create child processes and chain them (also usable with Async library)
Reflection🟩 Describe C++ types at compile time for serialization
Serialization Binary🟨 Serialize to and from a binary format using Reflection
Serialization Text🟨 Serialize to / from text formats (JSON) using Reflection
Socket🟨 Synchronous socket networking and DNS lookup
Strings🟩 String formatting / conversion / manipulation (ASCII / UTF8 / UTF16)
Testing🟨 Simple testing framework used by all of the other libraries
Threading🟥 Atomic, thread, thread pool, mutex, condition variable
Time🟨 Time handling (relative, absolute, high resolution)

Each library is color-coded to signal its status:

C Bindings

Some Libraries have C bindings

BindingDescription
sc_hashingBindings for the Hashing Library

Building

Libraries can be used as is, adding a single file to your project and without needing any build system.
See Building (user) to just use the library

Shortly:

Windows

macOS / iOS

Linux

Examples

SCExample showcases integration of Sane C++ Libraries together with Dear ImGui and sokol libraries (see Examples page).

macOS

https://github.com/user-attachments/assets/2a38310c-6a28-4f86-a0f3-665dc15b126d

iOS

https://github.com/Pagghiu/SaneCppLibraries/assets/5406873/5c7d4036-6e0c-4262-ad57-9ef84c214717

Tests

Tests are built with the self-hosted SC::Build project generator, describing the builds in C++.
Check Building (contributor) to run the tests.

Getting in touch

Alternatively I am also reading the following discords too:

Contributing

Please take some time to read the Principles and Coding Style.

After that you can read the CONTRIBUTING.md guide.

License

Sane C++ Libraries are licensed under the MIT License, see LICENSE.txt for more information.

Videos

On this YouTube Channel there are some videos showing bits of the development process.

Blog posts

On Sane Coding Blog there is a series of blog posts about this project.