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.

Parent navigation
27ns

O(1) constant · 200 → 680K traces

First child
16ns

O(1) constant across all fixtures

Memory retained
0.85×

44.9 MB source → 38 MB in memory

Compose throughput
18-21 MB/s

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.

FixtureSizeParseDecomposeHolographFull PipelineThroughput
Git 101.3 MB54.1ms9.0ms24.7ms62.8ms20.7 MB/s
Git 503.1 MB136.8ms20.5ms97.5ms156.8ms19.8 MB/s
Git 1006.2 MB274.7ms40.4ms130.3ms314.2ms19.7 MB/s
Git 50022.8 MB1.01s160.4ms472.7ms1.19s19.2 MB/s
Git 100044.9 MB2.00s331.4ms1.11s2.45s18.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.

0ms500ms1.0s1.5s2.0s2.5sPrometheus0.018MBGit 101.3MBGo 1K1.7MBGit 503.1MBGit 1006.2MBGo 5K8.5MBGo 10K17MBGit 50022.8MBGo Full42MBGit 100044.9MB

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

0MB250MB500MB750MB1.0GB1.3GB1.5GBKantext38MB (0.85x source)PostgreSQL500MBNeo4j850MBPydantic~1.4GB

44.9 MB source file (1000 git commits). Estimates for equivalent data in other systems.

Dedup Rate98.4%

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)

Decomposed Vec
25.30 MB
StoredString
2.96 MB
Trace
1.62 MB
Point
0.91 MB
Declaration
0.81 MB

HOLOGRAPH (13.65 MB total)

Matrix
6.45 MB
BpTree (bitvectors)
5.41 MB
ValueIndex
1.79 MB

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.

0 MB/s25 MB/s50 MB/s75 MB/s100 MB/s125 MB/s150 MB/sPrometheus0.018MBGit 101.3MBGo 1K1.7MBGit 503.1MBGit 1006.2MBGo 5K8.5MBGo 10K17MBGit 50022.8MBGo Full42MBGit 100044.9MB

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.

FixtureSizeTracesParent1st ChildDecl IdxWalkHQL /**
Prometheus0.018 MB20026.9ns15.9ns25.4ns1.3ms1.1ms
Git 101.3 MB20K27.8ns16.2ns25.2ns61.1ms56.2ms
Go 1K1.7 MB28K31.1ns16.1ns26.5ns26.7ms26.1ms
Git 1006.2 MB136K27.1ns15.9ns25.9ns303.0ms294.7ms
Go Full42 MB680K26.8ns16.0ns25.3ns1.47s1.50s
Git 100044.9 MB680K26.6ns16.3ns25.4ns2.36s2.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.