Tau is a bitemporal time-series database built for financial workloads. Every fact keeps when it was true and when you learned it. Corrections are appends — nothing is ever overwritten. AT … AS OF replays exactly what you believed at any past moment, so backtests can't see restated prices. Lua triggers compute Sharpe ratios, rolling stats, and risk signals on write or on a schedule.
Quickstart · Finance examples · Lua scripting · GitHub
One question, two honest answers. The restated value never deletes the original — it stacks on top, the newest layer wins, and both clocks stay queryable forever. No look-ahead bias. No lost corrections. No mutable state.
Why Tau for finance
Most time-series stores have one axis of time and mutate in place. A restated price overwrites the original. A backtest sees the corrected data and silently cheats. Tau keeps both axes and mutates nothing.
Valid time
When a fact was true in the world — the half-open interval [start, end) you query with AT, RANGE and REDUCE.
Transaction time
When Tau learned it — stamped on every append, wound back with AT … AS OF, and audited with HISTORY.
What that buys you
- Corrections are appends. Exchange restatements, corporate actions, recalibrated feeds — the newest layer wins at any overlap; the belief it replaced stays queryable forever.
- Point-in-time backtesting.
AT LENS px t AS OF <trade-day>gives you exactly the price your strategy saw that day. No look-ahead bias, ever. - Stack transformations on the same data.
DERIVEfor lazy re-evaluation against the latest corrections.XDERIVEfor materialised auto-refreshing signals. Compose a spread, a rolling stat, a risk metric — all over the same base lens, all time-travel-aware. - Lua triggers. Write Sharpe ratios, rolling stddev, VaR, or position-keeping logic in Lua. Fire on write, on a schedule, or on demand. Sandbox-gated host API:
tau.exec,tau.range,tau.clock. - N-dimensional lenses.
CREATE LENS quote float AXES (time, instrument, venue)— box-shaped facts, one coordinate per axis. Query a single instrument at a venue, or sweep time across the whole grid. - Proven correct. Compaction preserves every
AT,RANGE,REDUCE,AS OF, andHISTORYresult — enforced by property-based tests and deterministic simulation on every build.
Quickstart
Install the server and client — release binary, cargo, or Docker:
# Release binary (Linux x86_64)
curl -fsSL https://github.com/bxrne/tau/releases/latest/download/tau-x86_64-linux -o tau
chmod +x tau && sudo mv tau /usr/local/bin/
# …or cargo
cargo install --git https://github.com/bxrne/tau tau tauctl
# …or Docker
docker run -p 7070:7070 ghcr.io/bxrne/tau:latest
Start an in-memory server on 127.0.0.1:7070 with tau, then drive it from tauctl:
τ: connect demo 127.0.0.1:7070
τ: CREATE DATABASE market
τ: CREATE LENS px float
τ: APPEND LENS px 0 3600 100.0, 3600 7200 101.2
τ: AT LENS px 1800
VAL f100
Where next
- Lua Scripting — triggers, cron, host API, finance examples (Sharpe, rolling stddev)
- Examples — copy-pasteable: backtesting, spreads, IoT, observability
- Tutorial — a full correction-and-audit story, end to end
- TauQL reference — every statement, the grammar, and the wire protocol
- How it works — the kernel, layers, compaction, storage and the WAL
- Simulation testing — the oracle, fault injection, and why seeds reproduce bugs
- Configuration — backends, TLS, auth, metrics, and limits
Open source under the Apache 2.0 license. Correctness is enforced by property-based tests, deterministic simulation, and fuzzing — see Testing.