SQLiteDesk
Changelog
Release notes for SQLiteDesk — the desktop manager for SQLite databases on Windows.
Version 1.2.1
Latest
August 28, 2026
A UI pass: the splash screen, the window state, and a grey dark theme that holds together across a live switch — plus the first automated tests of the UI itself. This release also carries everything from 1.0.1, 1.1.0 and 1.2.0 below, so an update from 1.0.0 delivers all of it at once.
Fixed
- The splash screen no longer appears to duplicate itself. It was one window all along, whose transparent outer frame composited a beat later and read as a second rectangle behind it. The splash is now a single opaque window sized to its image, and it closes before the main window is shown.
- The main window opens maximized.
- The dark theme is a neutral mid grey — in the sense Adobe and Blender use the word — rather than near-black. Panels sit lighter than the window ground, and the greys are achromatic, so the chrome recedes instead of tinting the content.
- Toolbar and rail icons follow the theme. They used to stay frozen in the light theme’s dark slate after a switch; chrome icons are also monochrome now, instead of a few reading neon next to the rest.
- Dialogs use the app’s palette instead of the system backdrop, so they no longer stay black while the rest of the shell goes grey.
- Every window paints its full background in the current theme — no strip keeps the previous theme’s colour until a restart after a live switch.
- The status bar belongs to its theme. It was a dark slab in the light theme; it now sits in each theme’s own surface family with a hairline rule above it.
- White text on the dark theme’s accent was illegible at 2.44:1 contrast — found by the new contrast test, not by eye. The dark theme’s accent is light, so it now takes dark text.
Added
- Theme invariant tests — automated checks that both palettes define the same keys, no colour is hardcoded, every foreground / background pair clears a contrast floor, and no window is left unpainted. Each rule corresponds to a defect that shipped in this pass and was caught by a person rather than a test.
- Startup smoke tests — launch the real app and inspect its windows, catching the splash overlap and the maximize state directly.
Version 1.2.0
August 28, 2026
Performance and polish: the remaining items from the 1.0.0 audit. Superseded by 1.2.1 before it reached the Store, so its changes ship as part of that release.
Added
- Foreign keys in the table designer. Add a
FOREIGN KEY row, pick a column, a table to reference and a column in it, and choose ON DELETE / ON UPDATE behaviour — all reflected in the live DDL preview. Previously only the ER Designer could create relationships.
- Confirmation before deleting a row. It was the only destructive action in the app with no prompt and no undo.
Changed
- Far fewer database connections. Opening a query tab used to open one connection per table to build the autocomplete list, and each page of a table opened two. Autocomplete now reads the whole schema in a single pass on one connection, and paging reuses one. On an encrypted database each avoided connection is a full key derivation, so this is most noticeable on SQLCipher files.
- CSV import streams the file instead of reading it entirely into memory, so large files no longer scale memory use with file size. Types are inferred from a sample of the first rows.
- Imported values are stored as their inferred type rather than always as text, so numbers land in the database as numbers.
Fixed
- Duplicate CSV headers no longer fail the import. A file with two
name columns now produces name and name_2; blank headers become column2, column3, and so on.
- The schema tree keeps its expanded branches across a refresh. Creating a single table used to collapse the whole tree.
- Closing a database closes all of its tabs. Query, designer and diagram tabs used to stay open, still bound to a database the explorer had already removed.
- A file that cannot be opened no longer always asks for a password. A locked or unreadable file now reports what actually went wrong; the password prompt is reserved for files that look encrypted.
ALTER TABLE ADD COLUMN validates before it runs. SQLite cannot add a UNIQUE column, a PRIMARY KEY column, or a NOT NULL column without a default; these now explain the problem instead of surfacing a raw engine error.
- CSV parsing handles bare carriage-return line endings and a final row with no trailing newline.
Version 1.1.0
Ships as part of 1.2.1
Completes the fixes from the post-launch audit of 1.0.0, adds query cancellation and a result row cap, and delivers the dark theme properly. Never published on its own; its changes ship with 1.2.1.
Added
- Stop button in the SQL workspace. A running query can now be cancelled; the tab no longer stays busy until the query finishes on its own.
- Row cap for query results (Settings → Maximum rows per query result, default 10,000). An unbounded
SELECT no longer loads an entire table into memory. Capped grids are labelled, and the messages pane says how to see more.
- Set NULL in the data grid’s context menu (Ctrl+0), plus Copy cell. NULL is now something you can ask for explicitly rather than only by clearing a cell.
.db, .sqlite, .sqlite3 and .db3 file associations, so double-click and “Open with” work.
- A full User Guide.
Changed
- The dark theme is now real. The whole shell — window, explorer, welcome screen, dialogs, designers and status bar — is painted from a light / dark palette instead of hardcoded light colours, and switching theme in Settings repaints everything without a restart. The diagram and ER canvases stay on their dark working surface in both themes, by design.
Fixed
- Editing one cell no longer rewrites the whole row. Saving a row used to send every column, so an edit to one cell overwrote concurrent changes elsewhere in the row and silently converted any empty-string column to NULL. Only changed columns are written now, and committing an unchanged row issues no statement at all.
- Unsaved SQL survives switching query tabs. Moving between query tabs used to discard whatever had not been executed yet.
- Encrypt / decrypt / change-password no longer delete the original first. The rewritten file is verified to open with the new key, then swapped in atomically; a failure at any point leaves the original database intact.
- Passwords can no longer reach the log file. A provider error could carry an encryption password into the logs and the error dialog; those statements now fail with a scrubbed message.
Version 1.0.1
Ships as part of 1.2.1
Four defects found in a post-launch audit of 1.0.0, each covered by a regression test. Never published on its own; its changes ship with 1.2.1.
Fixed
- Backup and restore now work on encrypted databases. Every backup of an encrypted database — and every attempt to encrypt a backup — used to fail with “backup is not supported with encrypted databases”. Keyed copies now use SQLCipher’s own export path; plaintext-to-plaintext still uses the online backup API. Restoring into an encrypted database writes a verified replacement file and swaps it in, so a failed restore leaves the original untouched.
- Generated columns are no longer written to.
GENERATED ALWAYS columns used to be treated as ordinary ones, so inserting or editing a row in any table using them failed. They are now shown read-only in the grid and excluded from writes.
- SQL dumps of FTS5 (and other virtual) tables can be replayed. The dump used to emit a virtual table’s internal shadow tables alongside it, so running the script failed. Shadow tables are now skipped and rebuilt by SQLite on replay.
- The table designer keeps
NOT NULL on non-INTEGER primary keys. SQLite only implies NOT NULL for an INTEGER PRIMARY KEY; ticking both boxes used to silently drop the constraint from the generated DDL.
- Backing up or restoring a database over itself is rejected instead of destroying it.
Version 1.0.0
2026
First release of SQLiteDesk — a desktop manager for SQLite databases on Windows.
Added
- Connections — open / create databases, SQLCipher password prompt, recent files, multi-database explorer, open a
.db from the command line or a file association.
- Welcome / home screen — logo hero, “Get started” cards, and a recent-databases list with size and last-modified date.
- Explorer — searchable database list with a count badge, per-database file path, and a summary footer (database count + total size). Rich right-click menus on databases and objects.
- Browse & edit — schema tree (tables, views, indexes, triggers), paged data grid with inline cell edit, insert & delete (rowid / PK-safe), per-table export. Enter moves to the next column (Excel-style), Tab works across cells.
- SQL workspace — editor with SQLite syntax highlighting and schema-aware autocomplete (Ctrl+Space), run script or selection (F5), multiple result grids, persistent query history, and a “Run against” picker so each editor's target database is explicit.
- Schema designer — visually create tables with live DDL preview; rename / drop tables, views, indexes and triggers from the tree.
- Interactive ER Designer — drag tables onto a canvas, edit columns inline, draw foreign-key relationships (field-to-field), preview the SQL live, and create the schema in the selected database in one click.
- ER diagram — visual map of an existing database's tables and foreign-key relationships.
- Import / export — CSV & JSON import with type inference and table creation; run
.sql scripts; export tables / queries to CSV, JSON, or SQL INSERT; dump a whole database to .sql.
- Backup / restore — online backup API (safe on a live database) and restore.
- Maintenance — stats, VACUUM, ANALYZE, REINDEX, integrity check, and encrypt / decrypt / change-password (SQLCipher).
- Settings — light / dark theme (light by default) and default page size.
- UI — professional light theme, highlighted active tab, a vertical utility rail (History, Refresh, Maintenance, Settings, About), splash screen, and an About dialog with version, auto-incrementing build number / date and a link to backendside.com.
- Packaging — self-contained single-file Windows build (
sqlitedesk.exe) and an MSIX package for the Microsoft Store.
Fixed
- New encrypted databases are now actually encrypted on creation (a never-written keyed database used to stay an unencrypted empty file). Passwords are never persisted.
- Inserting a new row no longer fails with “datatype mismatch” when the primary key is blank.
Notes
- The build number increments automatically on every build and is shown in the About dialog.