Client libraries
At its core Basalt Field is a single process that owns one directory on disk and one listening socket. Everything the admin API exposes is also reachable through `basalt`, so the same operation is scriptable either way.
Limits
An acknowledged write survives a hard kill of the process; it does not survive loss of the underlying disk. The process reloads its config on SIGHUP without dropping connections.
| Key | Meaning | Default |
|---|---|---|
basalt.listen | Address the data API binds to | 0.0.0.0:8080 |
basalt.data_dir | Directory holding every log segment | /var/lib/basalt |
limits.max_batch | Largest number of events per write | 1024 |
retention.default | How long a event is kept | 72h |
What to watch
Basalt Field accepts events over HTTP and gRPC and writes them to local storage before acknowledging anything. The replay worker keeps an in-memory index and rebuilds it from the log segment at startup, which costs about a second per gigabyte. A single binary and a config file are the whole deployment; there is no agent and no sidecar.
$ basalt serve --config /etc/basalt/basalt.toml
$ basalt topic create orders --retention 72h
$ basalt status
uptime 4d 11h
topics 23
throughput 10k events/sDefaults
Every event that reaches Basalt Field is assigned a monotonic sequence number as the first thing that happens to it. Retention is enforced on read as well as on the background pass, so an expired event never becomes visible again after a restart. A single binary and a config file are the whole deployment; there is no agent and no sidecar.
Note. There is no built-in authorization beyond token checks. Put it behind something that does policy properly.
What to watch
Reads are served from a memory-mapped view of the log segment, so the page cache does the caching and Basalt Field does not duplicate it. Ordering is guaranteed within a topic and explicitly not guaranteed across them. Everything the admin API exposes is also reachable through `basalt`, so the same operation is scriptable either way.
Note. The default limits are conservative. Raising them is expected, and the reference below explains what each one actually bounds.