Sane C++ Libraries is a set of C++ platform abstraction libraries for macOS, Windows and Linux.
-
Principles:
✅ Fast compile times
✅ Bloat free
✅ Simple and readable code
✅ Easy to integrate
⛔️ No C++ Standard Library / Exceptions / RTTI
⛔️ No third party build dependencies (prefer OS API)
Library | Description | Single File |
---|---|---|
Async | 🟨 Async I/O (files, sockets, timers, processes, fs events, tasks) | Download |
Async Streams | 🟨 Concurrently read, write and transform byte streams | Download |
Containers | 🟨 Generic containers (SC::Vector, SC::SmallVector, SC::Array) | Download |
Containers Serialization | 🟨 Containers specializations for Reflection and Serialization | Download |
File | 🟩 Synchronous Disk File I/O | Download |
File System | 🟩 File System operations (like copy / delete) for files / dirs | Download |
File System Iterator | 🟩 Enumerates files and directories inside a given path | Download |
File System Watcher | 🟩 Notifications {add,remove,rename,modify} for files / dirs | Download |
File System Watcher Async | 🟩 Async backend for FileSystemWatcher | Download |
Foundation | 🟩 Primitive types, asserts, macros, Function, Span, Result | Download |
Hashing | 🟩 Compute MD5 , SHA1 or SHA256 hashes for bytes streams |
Download |
Http | 🟥 HTTP parser, client and server | Download |
Memory | 🟩 Custom allocators, Virtual Memory, Buffer, Segment | Download |
Plugin | 🟨 Minimal dependency based plugin system with hot-reload | Download |
Process | 🟩 Create child processes and redirect their input / output | Download |
Reflection | 🟩 Describe C++ types at compile time for serialization | Download |
Serialization Binary | 🟨 Serialize to and from a binary format using Reflection | Download |
Serialization Text | 🟨 Serialize to / from text formats (JSON) using Reflection | Download |
Socket | 🟨 Synchronous socket networking and DNS lookup | Download |
Strings | 🟩 String formatting / conversion / manipulation (UTF8 / UTF16) | Download |
Testing | 🟨 Simple testing framework used by all of the other libraries | Download |
Threading | 🟩 Atomic, thread, mutex, semaphore, barrier, rw-lock, condition | Download |
Time | 🟨 Time handling (relative, absolute, high resolution) | Download |
Each library is color-coded to signal its status:
🟥 Draft (incomplete, WIP, works on basic case)
🟨 MVP (minimum set of features have been implemented)
🟩 Usable (a reasonable set of useful features has been implemented)
- Obtain a specific library:
- Downloading it from the above table or from the Latest Release page
- Assembling it from current
main
branch using the Single File Library browser app
#define SC_COMPILER_ENABLE_STD_CPP=1
if you plan to use the Standard C++ library#include SaneCppLIBRARY.h
in your headers#define SANE_CPP_IMPLEMENTATION
+#include SaneCppLIBRARY.h
in one of your.cpp
files
See Building (user) for details on the (system) libraries to link.
- Clone the entire repo and add it as subfolder of your project
- Add SC.cpp to your build system of choice
#define SC_COMPILER_ENABLE_STD_CPP=1
if you plan to use the Standard C++ library- Include any public header (
Libraries/[Library]/*.h
)
See Building (user) for details on the (system) libraries to link.
Tests are built with the self-hosted SC::Build project generator, describing the builds in C++.
Check Building (contributor) to run the tests.
- Sane Coding Discord
- X
@pagghiu_
- Github Discussion
Sane C++ Libraries are licensed under the MIT License, see LICENSE.txt for more information.
On this YouTube Channel there are some videos showing bits of the development process.
On Sane Coding Blog there is a series of posts about this project.
Relevant yearly posts:
- DeepWiki/SaneCppLibraries (AI-guided walkthrough of the project)