Benchmarks
An executed, reproducible HTTP-level benchmark comparing a Cratebase
release build against PocketBase v0.40.2, run back to back on the same
machine by one script (benchmarks/run.sh). Both servers are driven
identically by a plain-fetch Bun script — no SDKs — across six
categories (create, auth, search, search-wide, search-auth,
delete) at four concurrency levels (1, 20, 50, 100), median of 3 runs
after a discarded warm-up.
22 of 24 cells were faster on Cratebase in the latest idle-host run
(2026-09-04). The standout: search at concurrency 50 — 49,986 vs
4,774 req/s, a 10.47x ratio, with p99 latency at 1.60ms vs 42.05ms.
create at concurrency 100 was 11,960 vs 6,606 req/s (1.81x), p99 8.87ms
vs 57.88ms. The two cells that weren’t faster — delete at concurrency 1
and 20 (0.95x, 0.97x) — are within noise of parity, not a regression:
the same category is 2.23x/2.25x at c50/c100 in the same run.
Read honestly: the auth win (up to 3.87x) is a security-parameter
difference, not engineering work — Argon2id at OWASP parameters is
simply cheaper than PocketBase’s bcrypt cost-12, and shouldn’t be read as
throughput work. This is a shared, virtualized sandbox, not a dedicated
benchmark rig — relative comparisons within one run are more trustworthy
than absolute numbers across runs.
Reproduce it yourself:
benchmarks/run.sh # builds, downloads PocketBase, runs everythingbenchmarks/run.sh --skip-build # reuse target/release/cratebasebenchmarks/run.sh --concurrency=1,20 # any bench.ts flag is forwardedFull methodology, the complete table, and the WAL-checkpoint story behind
an earlier delete regression are in
benchmarks/README.md;
raw numbers in
benchmarks/results/.