Architecture

Basalt Field was written for the case where a full cluster is more operational surface than the workload deserves. Logs go to stderr as structured JSON by default, or as plain lines when the output is a terminal.

Limits

Basalt Field accepts events over HTTP and gRPC and writes them to local storage before acknowledging anything. Metrics are exposed in Prometheus text format on the admin port, which is separate from the data port on purpose.

KeyMeaningDefault
basalt.listenAddress the data API binds to0.0.0.0:8080
basalt.data_dirDirectory holding every log segment/var/lib/basalt
limits.max_batchLargest number of events per write1024
retention.defaultHow long a event is kept72h

Defaults

Each topic maps to an independent log segment, which is what lets recovery happen in parallel after a restart. The API is versioned in the path. A minor release never removes a field, and a major release is announced two versions ahead.

Configuration

Basalt Field was written for the case where a full cluster is more operational surface than the workload deserves. Writes land in an append-only log segment; the partition planner compacts them in the background on a fixed interval. Nothing is written outside the data directory. Deleting it resets Basalt Field to a clean state. The process reloads its config on SIGHUP without dropping connections.

$ basalt serve --config /etc/basalt/basalt.toml
$ basalt topic create orders --retention 72h
$ basalt status
  uptime      4d 11h
  topics   36
  throughput  83k events/s

What to watch

Basalt Field treats the on-disk log segment as the source of truth and everything else as a cache that can be rebuilt. The ingest gateway runs on its own goroutine and never blocks the write path, so a slow consumer cannot stall a producer.

KeyMeaningDefault
basalt.listenAddress the data API binds to0.0.0.0:8080
basalt.data_dirDirectory holding every log segment/var/lib/basalt
limits.max_batchLargest number of events per write1024
retention.defaultHow long a event is kept72h