Skip to content

Basalt

A C++20 framework for native applications, built on explicit memory and data-oriented design.

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.

Read the page

Containers

Seven of them, and one question picks between them: who owns the storage. Sequences, maps, and what each answer costs.

Read the page

Strings

String8 is a view, not a container. Which operations allocate, and how UTF-8 is handled without a Unicode library.

Read the page

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.

Read the page

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.