
Pure GO SQLite-compatible database. 75× C SQLite & 200× Turso.
I've been building musql (pronounced "muscle"), a SQLite-compatible database written from scratch.
Repo: https://github.com/samyfodil/musql
It has a `database/sql` driver that registers as `sqlite`, so switching from another SQLite driver is usually just changing the import line. It uses its own storage format (`.musq`), with columns stored contiguously and an append-only delta for writes. `musql-convert` converts existing SQLite files in and out, in both directions.
SQL compiles to VDBE bytecode, the same design as C SQLite. A JIT turns hot paths into native code on amd64 and arm64 (Linux, macOS and Windows).
There's also `musqld`, a server that speaks Turso's Hrana protocol. `@libsql/client` and `libsql-client-go` connect unchanged, and there's a 5 MB Docker image. Replication supports CRDT or leader mode; you supply the network.
For performance, these are 100k-row read workloads, averaged over an amd64 and an arm64 machine:
- filtered `count(*)`: ~75x faster than C SQLite, ~210x faster than Turso
- sum over a filter: ~8x faster than C SQLite
- grouped aggregate: ~2.3x faster; `ORDER BY ... LIMIT`: ~2.4x faster
It also runs Doom. The same VM that runs SQL runs unmodified doomgeneric, compiled C -> LLVM IR -> VDBE bytecode. On an Intel i9 it gets ~38 fps on the bytecode interpreter and ~96 fps with the JIT. The idea came from Turso's demo. You can try it with:
It's early. I'd appreciate feedback on the API and the Hrana server, or a bug report if your SQL breaks. A failing query helps a lot.