dope-rs
Zero cost abstractions.
query(…).fetch_one(&pool).await - fetch_one → Box<dyn Future>~80
- Semaphore::acquire atomic~20
- ArrayQueue::pop lock-free~20
- ⇅ flume::send channel~3000
- StatementCache::get LruCache~60
- sqlite3_reset cache hit~50
- sqlite3_bind_int64~20
- sqlite3_step~800
- sqlite3_column ×3~90
- build SqliteRow Box+Arc · heap~120
- ⇅ flume::send channel~3000
- try_get ×3 → Decode by-name HashMap~150
Users::by_id(&client, 1).await - run_one::<Q> generated~5
- stmt by name prepared at startup~5
- frame_typed Bind+Execute → o3 buf~40
- io_uring send_msg vectored~60
- ↻ await same core resumes~30
- decode_row fn ptr → Row::decode~40
01
Compile‑time abstractions
Generics monomorphized; SQL and routes generated before the program runs. No dyn, no vtables.
02
No hidden bullshit
No pool, no worker thread, no scheduler behind your back. You see every call.
03
Thread‑per‑core
One runtime per core, shared-nothing. No atomics, no Arc, no channels between cores.
04
io_uring‑first
Built and tuned for io_uring. kqueue is just a dev stand-in for macOS — not a second target.
The stack
dope the runtime · 狂
The thread-per-core runtime everything else stands on.
shin the TLS layer · 神Hand-rolled TLS 1.3 — one suite, one group, no atomics.
sark the typed web frameworkShared-nothing HTTP: routes compiled, requests zero-copy.
cartel the data layerNative Postgres, Redis & SQLite drivers with compile-time SQL.
tent the template engineCompile-time templates rendered straight into the reply.
MIT-license, 2026 @dope-rs