single binary, no daemons
Engine, wire protocols, admin UI, telemetry, Wasm runtime — all link into one executable. Laptop, Pi, bare VM — no compose file, no sidecars.
a single binary, two wire protocols, fourteen research tracks, one author.
SkeinDB is a teaching database engine that also runs production. It speaks MySQL and PostgreSQL on the wire, ships with its own admin panel built in, and exposes fourteen hardened research surfaces — from MVCC reclamation to sandboxed Wasm extensions — so you can study real systems without losing the thread.
The five-minute version. What & why.
Most production database engines hide their interesting choices behind layers of operations sprawl: separate sidecars for the admin panel, separate processes for replication, separate teams for everything else. SkeinDB compresses that down to one binary, two wire protocols, and a control surface you can read in an afternoon.
It exists so I — and anyone reading the source — can study real database behavior without a docker-compose file. The fourteen research tracks aren't marketing checkboxes; they're each instrumented, benchmarked, and discussed in companion notes. Wasm extensions let third parties experiment without rebuilding the engine.
One binary, drawn out. Each box is replaceable, each is instrumented.
Six things that make it different from another rust DB toy.
Engine, wire protocols, admin UI, telemetry, Wasm runtime — all link into one executable. Laptop, Pi, bare VM — no compose file, no sidecars.
Protocol shim sniffs the handshake and routes accordingly. Your existing ORM, your existing CLI, your existing dashboards — nothing on the client knows.
Each is a hardened path: optimistic vs pessimistic MVCC, vectorized vs row-at-a-time, LSM vs page-heap. Pick one, bench it, read the notes.
Not a separate service. Same binary, same Axum router, same auth, same logs, same lifecycle. Bind to the port you want.
User-defined functions in a capability-restricted Wasm sandbox. No arbitrary FS or net — extension authors get a typed handle to the row stream.
Group-commit WAL, fsync barriers, deterministic recovery, startup verification pass. You opt out of safety, not in.
2024 M2 Pro, 16GB. Reproducible — scripts in /bench. No tuning beyond defaults.
./skeindb to first query accepted.It feels like any other DB. That's the point.
Point your existing tooling at SkeinDB — mysql://, postgres://, doesn't matter. The wire shim picks up the handshake, the dispatcher routes the parsed statement to the same planner, you get the same row stream back.
This is what makes it useful as a teaching engine: the surface is familiar, but you can pop the hood any time and read what just happened in /admin/explain or /admin/trace.
src/main.rs · embed SkeinDB1use skeindb::{Server, Config, Wire}; 2 3// one binary. two protocols. no sidecars. 4#[tokio::main] 5async fn main() -> Result<()> { 6 let cfg = Config::load("./skeindb.toml")?; 7 8 Server::builder() 9 .wire(Wire::Mysql) // 3306 10 .wire(Wire::Postgres) // 5432 11 .admin("127.0.0.1:9001") // embedded UI 12 .track("mvcc.reclaim_v2") // 1 of 14 13 .extension("./udf/cosine.wasm") 14 .durability(Durability::FsyncEach) 15 .build(cfg)? 16 .run() 17 .await 18} 19 20// $ ./skeindb 21// ◆ wire: mysql:3306, postgres:5432 22// ◆ admin: http://127.0.0.1:9001 23// ◆ track: mvcc.reclaim_v2 [active] 24// ◆ ready in 88ms
Fourteen real paths through the engine. Each has notes. Each has a bench.
Six quarters. Honest about what's shipped vs shipping.
Separate research thread from the same workstation.
Computational Knightian Uncertainty belongs to my cyber-risk quantification research line. It is included here as adjacent reading from the broader workstation, not as a foundation or companion paper for SkeinDB.
▸ read on IJRCCite as — copy the BibTeX block. Also indexed on Scholar.
@article{nguyen2026cku, title = {Computational Knightian Uncertainty: Undecidability and the Limits of Cyber Risk Quantification in Software-Intensive Firms}, author = {Nguyen, Mich\'el}, journal= {Intl. J. of Research in Computing}, year = {2026}, month = {jan}, url = {https://www.ijrcom.org/.../192}, }
The four questions I get most often. Honest answers.
Pre-1.0. I run it for my own services. I would not run it as a system of record for someone else's payments. Stable tracks are reliable; beta and draft tracks change shape without warning. 1.0 is targeted for Q4 2026 with a written stability commitment.
Because the goal isn't a faster Postgres — it's a database you can read end-to-end in a weekend. Forks inherit thirty years of incidental complexity. SkeinDB is built so the planner, executor, and storage layer each fit in one head.
Yes, and please do. The engine handbook is being written specifically for that case. Reach out — I'm happy to walk through a track with anyone teaching from it.