Dedicated Rust engine
✓ functionalLet a multithreaded, carefully tested Rust engine handle completion and queries without turning every keystroke into a wait.
Completion and query execution run in a dedicated, multithreaded, thoroughly tested Rust engine. That separation is what lets the editor stay with you while the heavier database work happens alongside it.
Native drivers, not a driver manager
SQLly speaks each wire protocol itself - TDS for SQL Server, the PostgreSQL and MySQL protocols, and SQLite directly - with SSH, SOCKS, and HTTP-proxy tunnelling built into the same layer. There is no ODBC hop, no JDBC bridge, and no per-platform driver install to go wrong. It also means SQLly can do things a generic driver layer cannot, such as cancel a running statement properly on every engine.
Warm connections
Connections are pooled per connection lane: a completed query checks its client back in, and the next small query reuses it instead of paying for a fresh handshake. This matters most on Microsoft Entra profiles, where every new connection pays token validation at the Azure SQL gateway - a cost that dominates the time of a small query.
- No head-of-line blocking. Concurrent queries on the same lane open parallel connections rather than queueing behind each other.
- Stale clients are handled honestly. If a pooled connection turns out to have been dropped by the server while idle, and the failure is provably before execution, it is retried once on a fresh connection. Once any result has been emitted there is no retry - a side effect must never happen twice.
- Idle clients are reaped in the background, and switching or editing a connection evicts its warm clients instead of leaving them to surprise you later.
Work that stays off your keystrokes
Schema refreshes
Metadata is fetched on background tasks and cached per connection and database, so a refresh never interrupts you mid-thought.
Targeted invalidation
A change invalidates the part of the model it affects rather than the whole thing, so being up to date does not mean starting over.
Streaming results
Rows arrive through a back-pressured channel and paint as they land - see spill-to-disk results.
Why Rust, concretely
Not for the language argument - for two properties that show up in the product. Concurrency that is checked at compile time is what makes it reasonable to run completion, schema loading, and a streaming query at once and keep the interface responsive. And a library layer with no runtime of its own is what lets the very same code run in the desktop app, a CLI subprocess, a language server, and a browser build compiled to WebAssembly.