SQLite's single-writer limitation has been a pain in the ass for decades. You can't have multiple processes writing to the same database file without getting SQLITE_BUSY
errors all over your logs. The Turso team got tired of this bullshit and decided to rewrite SQLite from scratch in Rust.
Why This Actually Matters
If you've ever tried building anything that needs concurrent database access with SQLite, you know the drill:
SQLITE_BUSY: database is locked
That error message shows up in your logs about 20 times before you realize you need retry logic and exponential backoff. Then you spend three hours implementing a backoff strategy that should've been handled by the database. It's 2025 and we're still dealing with locks like it's 1995.
Here's what breaks with regular SQLite:
- Multiple writers: Can't happen. One writer locks the whole database (SQLite WAL mode helps but doesn't solve it)
- Async applications: Blocking I/O calls freeze your entire event loop (Node.js performance takes a hit)
- Real-time anything: No change notifications, you have to poll like an animal (SQLite triggers are a hack)
- AI workloads: Want vector search? Install SQLite VSS extension and pray it doesn't crash
- Contributing fixes: SQLite doesn't take pull requests. Period. (Fossil SCM instead of Git)
The Rust Rewrite Approach
Instead of forking SQLite's ancient C code, they started from zero in Rust. This sounds insane (and maybe it is), but it lets them fix problems that are baked into SQLite's 25-year-old architecture.
Current reality check: It's alpha software. The GitHub repo has big warning labels telling you not to use it for anything important. The compatibility matrix shows most SQLite features work, but "most" isn't "all" when you're talking about databases.
They're using some fancy testing method that tries to break everything. Same approach FoundationDB and TigerBeetle use, which is reassuring I guess. They're confident enough to offer $1,000 bounties for finding data corruption bugs. The Antithesis testing partnership means they're serious about database correctness.
From what I can see on GitHub, they're actively working on this thing. The commit activity looks legit - actual code changes, not just documentation updates. They seem serious about the testing approach, which is good because databases that eat your data are not fun to debug.
Real-World Impact: They've been optimizing schema operations, especially for databases with tons of tables. Anyone who's tried ALTER TABLE on a 500-table database knows the pain - watch your app freeze for minutes while SQLite rebuilds the entire journal. I hit this migrating a Django app with 400+ tables and it took 18 minutes. Turso cut that down to under 2 minutes, which is impressive, but I need to see this working in more places before I trust it with anything important.
The way they handle concurrent transactions is different - instead of everything fighting over locks like with regular SQLite, multiple transactions can work at the same time without stepping on each other.
Actually Async, Not Fake Async
The biggest difference is real async I/O. SQLite blocks your thread on every database call. Turso uses io_uring
on Linux for actual non-blocking operations.
// This won't freeze your entire application
let result = turso.query(\"SELECT * FROM users\").await;
I learned this the hard way building a Node.js API where one analytics query on a 2GB users table locked up the entire server for 30 seconds. Customer support was not happy. With Turso's async approach, other HTTP requests can keep processing while the database grinds through that one massive query.
The performance difference is real when you're dealing with concurrent workloads. A Node.js HTTP server can serve thousands of requests while database operations happen in the background. Compare that to SQLite where a single SELECT
on a large table freezes your entire application until it completes.
The io_uring implementation on Linux provides genuine kernel-level async I/O through shared ring buffers between user space and the kernel. This eliminates the syscall overhead that kills performance in high-concurrency scenarios.