Awesome
Sane C++ Libraries
Sane C++ Libraries is a set of C++ platform abstraction libraries for macOS, Windows and Linux.
✅ 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
Library | Description |
---|---|
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:
- 🟥 Draft (incomplete, work in progress, proof of concept, works on basic case)
- 🟨 MVP (minimum set of features have been implemented)
- 🟩 Usable (a reasonable set of features has been implemented to make library useful)
- 🟦 Complete (all planned features have been implemented)
C Bindings
Some Libraries have C bindings
Binding | Description |
---|---|
sc_hashing | Bindings 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:
- Add Bindings/cpp/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
)
Windows
- Nothing else to link (in addition to default libs)
macOS / iOS
- Link
CoreFoundation.framework
- Link
CoreServices.framework
Linux
- Link
libdl
(-ldl
) - Link
libpthread
(-lpthread
)
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
- Sane Coding Discord
- Bluesky
@pagghiu.bsky.social
- Twitter
@pagghiu_
- Mastodon
@pagghiu
- Github Discussion
Alternatively I am also reading the following discords too:
- Italian C++ Discord (
@Pagghiu
from any appropriate channel or just a DM, english and italian are both fine) - Handmade Network discord (
@Pagghiu
from any appropriate channel or just a DM)
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.