Configuration

Tau is configured entirely through command-line flags and environment variables. There is no config file yet (TOML/YAML config is on the roadmap for v1.0).


Server (tau)

Usage: tau [OPTIONS] [ADDR]

Arguments:
  [ADDR]   TCP address to listen on [default: 127.0.0.1:7070]

Storage

flagdefaultdescription
--waloffEnable write-ahead logging for durability
-w, --wal-path <PATH>(required with --wal)Path for the WAL file
--compact-threshold <N>8Number of layers per lens before auto-compaction fires

When --wal is enabled, every write is fsynced to the WAL before being applied to the in-memory store. On startup, the WAL is replayed to reconstruct state. Without --wal, data is in-memory only and lost on process exit.

TLS

flagdefaultdescription
--tlsoffEnable TLS
--tls-cert <PATH>(ephemeral self-signed)PEM certificate file
--tls-key <PATH>(ephemeral self-signed)PEM private key file

With --tls and no cert/key paths, an ephemeral self-signed certificate is generated at startup; convenient for development but not verifiable by clients. For production, provide a real cert and key.

Authentication

flagdefaultdescription
--authoffEnable per-connection authentication
--username <NAME>(none)Bootstrap admin username (requires --auth)
--password <PASS>(none)Bootstrap admin password, hashed with Argon2id at startup
--users-file <PATH>(none)Persistent multi-user store; file is created on first run

Two user-store modes:

In-memory single user: --auth --username admin --password s3cr3t. Bootstraps one global-admin user with no persistence. Every restart requires the same flags.

Persistent multi-user: --auth --users-file /var/lib/tau/users. On first run with --username/--password, the file is seeded with that user as global admin. Subsequent CREATE USER, DROP USER, GRANT, and REVOKE statements are atomically written to the file.

Observability

flagdefaultdescription
--metrics-port <PORT>(none)Expose Prometheus /metrics and /healthz on this HTTP port
-l, --log-level <LEVEL>infoerror | warn | info | debug | trace

Connection management

flagdefaultdescription
--max-connections <N>1024Maximum concurrent client connections; beyond the cap, new connections receive ERR server at connection limit
--idle-timeout-secs <SECS>300Per-connection idle timeout in seconds; 0 disables

Environment variables

variabledescription
TAU_ENCRYPTION_KEY64 hex characters (32 bytes). When set, WAL entries are encrypted per-entry with AES-256-GCM. Without this key, an encrypted WAL file cannot be replayed.

Example:

export TAU_ENCRYPTION_KEY=$(openssl rand -hex 32)
tau --wal -w /var/lib/tau/data.wal

Interactive REPL (ctl)

ctl has no flags beyond --version and --help. Configuration is done at runtime through REPL commands.

variabledescription
TAU_HISTORY_FILEPath to the readline history file. Default: $HOME/.tau_history.

Simulation tester (dst)

flagdefaultdescription
--quickoffEmbedded mode: use the library executor directly, no server processes
--seed <N>time-basedRNG seed for reproducibility
--duration <N>30Seconds to run in embedded mode
--ops <N>2000Operations per config cell in full mode
--readers <N>8Concurrent reader threads in embedded mode
--fault-interval <N>500Inject a fault every N ops in full mode
--scratch <DIR>$TMPDIRWAL scratch directory (use a real disk path for accurate fsync timing)
--out <PATH>(none)Write CSV results to path
--label <NAME>runTag attached to every CSV row
--log-level <LEVEL>infotracing log level

Metrics reference

When --metrics-port is set, the server exposes:

GET http://127.0.0.1:<PORT>/metrics    Prometheus text-format
GET http://127.0.0.1:<PORT>/healthz    Liveness probe (returns "ok")
metrictypedescription
tau_statements_total{type=...}counterStatements processed, by type
tau_statement_duration_microseconds_bucket{type=...,le=...}histogramPer-type latency histogram
tau_connections_totalcounterTCP connections accepted since startup
tau_rejected_connections_totalcounterConnections refused at the max-connections cap
tau_auth_attempts_totalcounterAUTH messages received
tau_auth_failures_totalcounterFailed AUTH attempts
tau_errors_totalcounterERR responses sent
tau_process_resident_bytesgaugeResident memory (Linux: VmRSS)
tau_process_open_fdsgaugeOpen file descriptors
tau_process_uptime_secondsgaugeSeconds since startup

Permission model

When --auth is enabled, every statement is checked against the caller's CRUDA bitmap:

bitgrants
CCREATE LENS, DERIVE LENS
RAT, RANGE, REDUCE, SHOW LENSES
UAPPEND LENS, COPY LENS FROM
DDROP LENS
AAdmin: manage users, GRANT/REVOKE, CREATE DATABASE, DROP DATABASE

Effective permissions for a user on database db = grants[db] | grants["*"]. A user with A on "*" is a global admin.

SHOW DATABASES is post-filtered for non-admins: only databases the caller holds any grant on are returned.