Memory is explicit
Allocation happens where you can see it. An operation that needs memory takes the allocator it uses — usually an arena. There is no implicit global allocator and no garbage collector.
Basalt is a framework, in the sense that Qt is a framework, rather than a collection of helpers you pick from. The types agree with each other and the contracts hold across modules.
It is built for programs where the cost of things matters: where you want to see where memory is allocated, where failure appears in a function’s signature, and where the data layout is yours to choose.
Memory is explicit
Allocation happens where you can see it. An operation that needs memory takes the allocator it uses — usually an arena. There is no implicit global allocator and no garbage collector.
Data-oriented by default
Plain data and free functions, not encapsulated objects. Types stay copyable, relocatable and cheap to pass by value.
Failure is in the signature
No exceptions. A fallible operation returns Result<T, E>, so you cannot miss the failure path by accident.
Concurrency is designed in
Every component states its concurrency contract: what is safe to call from where, and what synchronization it assumes.
Each page here explains the ideas behind one type: the problem it solves, the model to hold in your head, the mistakes it invites, and when to reach for something else instead. Parameters, assertions and invariants are documented in the headers, next to the code they describe.
Design principles is the shortest route into the framework as a whole — the handful of ideas every API follows, and what each one buys.
Arena
The default allocator. Group allocations by lifetime, free them together, and keep every pointer valid.
Containers
Seven of them, and one question picks between them: who owns the storage. Sequences, maps, and what each answer costs.
Strings
String8 is a view, not a container. Which operations allocate, and how UTF-8 is handled without a Unicode library.
File I/O
An open file with no cursor, so every read names its offset — and the two numbers a file layer must not trust.
Basalt is not a game engine, not an entity-component system, and has no garbage collector. It does not use the C++ standard library’s containers, exceptions, or RTTI.