Versions 0.8 and 0.9 shipped almost no visible features — and were two of the most important releases we've done. This is the unglamorous work that makes everything after it faster and safer.
New Foundations
Electron 40, MongoDB driver 7, TypeScript 5.9 — plus ESLint 9 with type-checked rules and a CI pipeline that runs lint, typecheck and the unit suite on every push. Boring? Very. But every future feature in this blog rides on it.
Goodbye keytar, Hello safeStorage
Credentials used to live in the OS keychain via keytar — an unmaintained
native dependency. 0.8 replaced it with Electron's built-in safeStorage:
secrets are encrypted with OS-level encryption and stored locally, and existing
credentials are migrated automatically on first start. One less native
addon (see why we care about that), and no
action needed from you.
The End of the UI Freeze
The most-hated bug in Sutido's history: run a query that returns thousands of rows and watch the whole window freeze while the table renders. Result tables are now virtualized — only the visible rows exist in the DOM — and the app boot sequence was parallelized while we were in there. Large results scroll like small ones.
Under the Hood
- Connection-pool race conditions fixed across all engines — including MSSQL database isolation per request
- SSH tunnels get proper cleanup on disconnect
- Production hardening: CSP headers, a safeStorage guard, migration edge cases
- The monolithic state store was split into focused slices; the 1400-line IPC file became domain modules
And Some Features After All
0.9 snuck in cross-database queries via db.getSiblingDB(), parallel query
execution across tabs, and duplicating collections and tabs from the context menu.