Criterion.rs on Mac Studio M2 Max · 10 fixtures · 14 series
O(1) Navigation.
Every tree size.
BpTree rank/select on bitvectors gives constant-time navigation from 200 traces to 680,000. The cost of traversal doesn't grow with the data.
O(1) constant · 200 → 680K traces
O(1) constant across all fixtures
44.9 MB source → 38 MB in memory
Full pipeline · linear scaling
FULL PIPELINE — PARSE → DECOMPOSE → HOLOGRAPH
Composition Performance
End-to-end: parsing, structural decomposition, CAS content-addressing, Blake3 hashing, BpTree construction, and cryptographic sealing. Git fixtures show perfect linear scaling.
| Fixture | Size | Parse | Decompose | Holograph | Full Pipeline | Throughput |
|---|---|---|---|---|---|---|
| Git 10 | 1.3 MB | 54.1ms | 9.0ms | 24.7ms | 62.8ms | 20.7 MB/s |
| Git 50 | 3.1 MB | 136.8ms | 20.5ms | 97.5ms | 156.8ms | 19.8 MB/s |
| Git 100 | 6.2 MB | 274.7ms | 40.4ms | 130.3ms | 314.2ms | 19.7 MB/s |
| Git 500 | 22.8 MB | 1.01s | 160.4ms | 472.7ms | 1.19s | 19.2 MB/s |
| Git 1000 | 44.9 MB | 2.00s | 331.4ms | 1.11s | 2.45s | 18.4 MB/s |
What 18-21 MB/s means
This isn't JSON parsing speed. Each MB/s of throughput includes: full Kantext parsing, structural decomposition into CAS entries, Blake3 content-addressing, deduplication detection, BpTree bitvector construction, and cryptographic sealing. It's the cost of building a navigable, cryptographically sealed structure from raw text.
34× more data = 39× more time. Scaling is linear. No superlinear blowup. No hidden O(n²) paths. Double the data, double the time. That's the guarantee.
LINEAR OPERATIONS ACROSS ALL FIXTURES
Linear Scaling
Full-tree walks, recursive HQL queries, and compose pipelines all scale linearly with data size. Three overlapping lines confirm: no hidden quadratic behavior.
Compose Pipeline
62ms → 2.45s
1.3 MB → 44.9 MB · 39× time for 34× data
Full-Tree Walk
61ms → 2.36s
Exactly 38× for 34× more data
HQL /** Recursive
56ms → 2.37s
42× for 34× data · near-perfect linear
MEMORY PROFILE — xxlarge_repo.kant (44.9 MB)
Memory & Deduplication
The entire 44.9 MB source file — 680K points, 1.6M declarations, 10.8M tree nodes — fits in 38 MB of retained memory. That's 0.85× the source size. Less memory than the raw text.
Same Dataset — Memory Comparison
44.9 MB source file (1000 git commits). Estimates for equivalent data in other systems.
2,970,316 duplicate entries collapsed to 40,770 unique CAS entries. Blake3 content-addressing means identical content across commits stores once.
CAS BREAKDOWN (32.37 MB total)
HOLOGRAPH (13.65 MB total)
680,572
points
1,630,283
declarations
10,798,394
tree nodes
40,770
unique CAS entries
THROUGHPUT — MB/s ACROSS FIXTURE MATRIX
Build Throughput
Holograph build alone hits 40–153 MB/s. Go stdlib fixtures (more uniform structure) reach 153 MB/s. Full compose pipeline sustains 18–21 MB/s including parsing, decomposition, and sealing.
Holograph Build: 40–153 MB/s
Building the navigable BpTree succinct structure from decomposed data. Go stdlib fixtures achieve 153 MB/s due to more uniform tree structure. Git fixtures (deeper, more varied) sustain 40–53 MB/s.
Full Pipeline: 18–21 MB/s
End-to-end: Kantext parsing → CAS decomposition → Blake3 hashing → deduplication → BpTree construction → cryptographic sealing. Steady across 1.3 MB to 44.9 MB.
10 FIXTURES · 3 CATEGORIES · FULL CROSS-REFERENCE
The Fixture Matrix
Every benchmark runs against 10 fixtures spanning git repositories (10 → 1000 commits), Go stdlib modules (1K → full), and a Prometheus config stack. Navigation columns are O(1). Walk and HQL columns scale linearly.
| Fixture | Size | Traces | Parent | 1st Child | Decl Idx | Walk | HQL /** |
|---|---|---|---|---|---|---|---|
| Prometheus | 0.018 MB | 200 | 26.9ns | 15.9ns | 25.4ns | 1.3ms | 1.1ms |
| Git 10 | 1.3 MB | 20K | 27.8ns | 16.2ns | 25.2ns | 61.1ms | 56.2ms |
| Go 1K | 1.7 MB | 28K | 31.1ns | 16.1ns | 26.5ns | 26.7ms | 26.1ms |
| Git 100 | 6.2 MB | 136K | 27.1ns | 15.9ns | 25.9ns | 303.0ms | 294.7ms |
| Go Full | 42 MB | 680K | 26.8ns | 16.0ns | 25.3ns | 1.47s | 1.50s |
| Git 1000 | 44.9 MB | 680K | 26.6ns | 16.3ns | 25.4ns | 2.36s | 2.37s |
Reading the matrix
The Parent, 1st Child, and Decl Idx columns are constant across all rows — that's O(1). The Walk and HQL /** columns grow linearly with fixture size. Prometheus (200 traces) walks in 1.3ms. Git 1000 (680K traces) walks in 2.36s. 3,400× more data, 1,818× more time — sublinear.
Every number is reproducible. Clone the repo, run cargo bench, verify on your hardware.
Methodology
All benchmarks measured using Criterion.rs on a Mac Studio M2 Max with 64GB RAM. 10 fixtures across three categories: git repositories (10 to 1000 commits), Go standard library modules (1K to full), and Prometheus stack configuration. 14 measurement series per fixture.
Each measurement includes the full pipeline: parsing Kantext input, structural decomposition into CAS entries, Blake3 hashing for content-addressing, deduplication via bitmask indexing, BpTree bitvector construction, and cryptographic sealing. We measure end-to-end, not isolated components.
Raw benchmark data available at /p/kantext_chart_data.json (14 series, all fixtures). All numbers are reproducible — the complete benchmark suite ships with the Kantext repository. Clone, run cargo bench, verify on your own hardware.
See it yourself.
27ns navigation. 0.85× memory. 98.4% dedup. Every number is a reproducible Criterion.rs benchmark.