Nightly build (develop)
Pre-release
Pre-release
Fixed
- Editing a connection no longer wipes its fields — changing a connection's AI access, read-only or
other settings could reset host / port / database / username to the provider defaults and drop the saved
password. Editing now preserves the stored values, and setting AI access from the tree no longer
round-trips (and so can't clear) the password. - Startup restores the tab you left on — with "Restore tabs on startup", the previously selected tab is
now reselected instead of always landing on the last one in the row. - Small UI polish: the results Export action now reads as a button (not a text link); and the AI activity
panel's toggle only appears while the MCP server is running (it live-appears/disappears as you start/stop the
server).
Added
- Schema Diff tool — a new first-party tool compares this database against a second one you pick — another
connection and one of its databases — and generates the migration (an ALTER script that would make this one
match the other), opening it in a new query tab on this connection/database so you review and run it in the
normal editor. It diffs tables, columns (type / nullability / default), primary keys, unique constraints and
foreign keys, and produces dialect-correct DDL for Postgres, MySQL and SQL Server. Reads via
information_schema, so the picker offers same-provider connections only; SQLite and cross-engine diffs are
not covered yet. Built on new plugin-SDK seams —ToolFieldType.ConnectionPickerandDatabasePickerplus
IToolHost.ListConnections()/ListDatabasesAsync()/OpenConnection()/OpenQueryEditor()— so any
tool can take a second connection and database and hand generated SQL to a query tab. - Icons in SQL completion — each suggestion in the code-completion popup now carries an icon for its kind
(table, column, function, foreign-key join condition, keyword), reusing the shared Lucide glyphs from the
schema tree so a table reads the same in both places. The type / signature / join-condition detail alongside
each item is unchanged. - Containers are tagged for Kontena — containers created by the Local Containers plugin now carry
kontena.managed=true/kontena.source=sqlexplorerlabels (in both the compose file and thedocker run
snippet), so the Kontena desktop app can recognise them as SQL-Explorer-managed and leave them alone. - Query Log shows why it's empty — when logging is off (or only one source is enabled), the Query Log
window now shows a banner explaining it, instead of just an empty list. - Paged query results — running a single
SELECTwith noTOP/LIMITof its own now shows the results one
page at a time with Previous/Next (DataGrip/DBeaver-style, default 200 rows/page), so a stray
SELECT * FROM big_tabledoesn't pull the whole table at once; the row-range indicator shows which rows
you're viewing. Queries with their ownTOP/LIMIT, other statement types and multi-statement scripts run
unchanged. Toggle and page size live under Settings → Query. - Scope-aware SQL completion — code completion now understands query structure instead of scanning for
FROM/JOINwith a regex. It resolves aliases through CTEs (WITH x AS (…)) and derived tables
((SELECT …) d), suggests the columns of the sources actually in scope, offers CTE names alongside real
tables afterFROM/JOIN, and never suggests from another statement in the editor. Expression positions
(SELECT list, WHERE, …) now also suggest the engine's built-in functions with their signature —
Postgres, MySQL, SQL Server and SQLite each ship their own catalogue (plugins declare theirs via the new
ISqlDialect.Functions). And right afterJOIN … ON, it offers the foreign-key join condition between
the tables in scope (e.g.o.user_id = u.id) as the top suggestion. - Service auto-registration for plugins and the host (plugin SDK) — classes can opt into dependency
injection by implementing a lifetime marker (ISingletonService/ITransientService/IScopedService)
instead of being wired up by hand. Extensions that declare the newservicescapability get their own
services registered and resolvable viaIPluginRuntimeContext.Services, scoped so a plugin can add
services but never replace or read the app's. Plugin host API is now v4; extensions built for earlier
versions keep loading. - Panel plugins can supply a toggle icon (plugin SDK) —
IPanelPlugin.Iconlets an extension's docked
panel show its own glyph on the bottom bar instead of the generic default. The Local Containers panel now
uses a container icon. - Provider-declared container recipes (plugin SDK) — a database provider can declare how to spin up an
empty local container matching its engine (IDbProvider.ContainerRecipe: image, port, data path, and the
environment/command that carry credentials). The Local Containers plugin reads every installed provider's
recipe through a new read-onlyproviderscapability, so a third-party engine becomes containerisable with
no change to the host. Every first-party engine now ships its own recipe, so the plugin is purely
provider-driven: the recipe travels with the engine and is the single source of truth.
Changed
- Double-click a result cell to open its value in a window — long text and JSON are shown pretty-printed in
a standalone, resizable window you can copy from, and several can be open side by side. This replaces the
always-on strips below the grid (the click-to-view cell value and the selection count/sum/avg summary), which
are gone. - The connection tree's AI access submenu now marks the active level (None / Read-only / Read-write)
with a check, so the current setting is visible at a glance instead of having to remember it. - Refreshed icon set — the schema tree, tabs, toolbars and Settings now use a consistent
Lucide-based line-icon set, drawn as crisp vectors that tint with the theme (no
icon font, no bundled raster assets). The AI-activity panel gets its own icon. - New local SQL Server containers use the 2025 image — the Local Containers "create" flow now defaults
tomcr.microsoft.com/mssql/server:2025-latest(was 2022). Every first-party provider (PostgreSQL, MySQL,
SQL Server, MongoDB, Redis, DragonflyDB, Elasticsearch) now declares its own container recipe, so the
recipe travels with the engine instead of being hardcoded in the Local Containers plugin.
These builds are unsigned / not notarized.
macOS: after moving to /Applications, clear quarantine: xattr -cr "/Applications/SQL Explorer.app".
Windows: pick the -setup.exe (per-user, no admin) or the .zip; SmartScreen may warn on first launch.