The planning cube, rebuilt in Rust.
Kubka is an open-source OLAP server built on Essbase ideas: outlines and hierarchies, MDX over XMLA, an Excel add-in your planners already know, and a calc language for real reforecasts.
Try the cube: pick a scenario to slice it, then run the reforecast.
Columnar enginenot run Today's block enginenot run
A cube server for people who plan in Excel.
- Outlines you recognise
- Dimensions, hierarchies, consolidation operators, shared members, attributes and time balance, defined in TOML or imported from an Essbase XML outline.
- Excel stays the front end
- A SmartView-style add-in for ad hoc grids, zoom, pivot and writeback, talking MDX over XMLA. A browser admin console handles cubes, security and calc scripts.
- Calcs written like calcs
- CalcDSL, a native calculation language with a web IDE, runs allocations, FX translation, amortization and forecast seeding inside the server.
- Ledgers in, cleanly
- Declarative adapters load an ERP general ledger as a star, check the trial balance before writing, and switch versions atomically.
Minutes become seconds.
The next storage engine keeps leaf data in embedded DuckDB columns and runs big calcs as a few set-based passes. These are engineering spike measurements from November 2026 on a 16-core desktop, not shipped benchmarks.
| Workload | Today | Columnar | Change |
|---|---|---|---|
| Full studio reforecast3,000 titles, seed + amortization + FX | 160.5 s | 0.27 s | 593× |
| Quarterly forecast seed | 86 s | 0.04 s | ≈2,000× |
| Grids under load50 concurrent sessions, 2M-line ledger | ≈2 q/s | ≈1,240 q/s | p95 28 s → 80 ms |
| Cold ledger queries2M general-ledger lines, root to depth-7 rollups | baseline | 20–230× faster | exact |
| Memory for the 2M ledger | 9.7 GB | ≈1 GB | ≈10× less |
Every compared cell matched exactly. A planner's typed value is logged to disk and acknowledged in 0.35 ms.
One Rust binary underneath.
- ClientsExcel add-in · Admin web UI · any XMLA client
- ProtocolsXMLA / SOAP · REST management API · OpenTelemetry
- QueryMDX parser, cost-based planner, result cache
- CalcCalcDSL interpreter, allocations, writeback
- StorageBlock, aggregate and hybrid stores · columnar DuckDB in v13
- ComputeCPU, Vulkan and CUDA aggregation
# build the server
cargo build --release
# load a demo outline and data
kubka-server load --outline demo/outline.toml \
--csv demo/data.csv --data-dir demo/data
# serve XMLA on :8080, then query
kubka-server --config demo/server.toml
kubka-cli --server http://localhost:8080 \
--user admin --password test repl
Where it stands.
- v11CalcDSL engine and calc IDEShipped
- v12Ledger import, adapters, storage seam, drill-throughShipped
- v13Columnar hybrid: DuckDB leaves, bulk calcs, convert existing cubesIn progress
- v13.1Direct Oracle, SQL Server and Postgres fact sourcesPlanned
Read the code. Run a cube.
View the source on GitHubNamed after František Kupka, the Czech painter who took colour and planes into pure abstraction.