Skip to content

Releases: Lionear/SqlExplorer

Nightly build (develop)

Pre-release

Choose a tag to compare

@github-actions github-actions released this 21 Jul 05:04
9e6cce5

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.ConnectionPicker and DatabasePicker plus
    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=sqlexplorer labels (in both the compose file and the docker 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 SELECT with no TOP/LIMIT of 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_table doesn't pull the whole table at once; the row-range indicator shows which rows
    you're viewing. Queries with their own TOP/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/JOIN with 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 after FROM/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 after JOIN … 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 new services capability get their own
    services registered and resolvable via IPluginRuntimeContext.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.Icon lets 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-only providers capability, 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
    to mcr.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.

SQL Explorer 0.3.0

Choose a tag to compare

@github-actions github-actions released this 19 Jul 21:01
f47cbfe

Added

  • Open & save queries as .sql filesCtrl+O to open (or drag a .sql file onto the window),
    Ctrl+S to save, plus Save As and a File ▸ Recent menu. Tabs show a dirty marker and remember
    their file across sessions, and closing a tab or the app offers to save unsaved changes — a
    preference in Settings ▸ Startup turns that prompt off. Saving pending grid-row edits back to the
    database moved from Ctrl+S to Ctrl+Shift+S.
  • Configurable update-check interval — choose how often the app checks for a new release.
  • A shared "Copied" confirmation for copy actions, shown bottom-centre.
  • SQL formatting options in Settings — keyword casing (UPPERCASE / lowercase / preserve) and
    indent width.
  • Proactive plugin-update notifications — an ambient top-bar badge and a persistent, actionable
    notification when compatible updates are available for your installed plugins, without opening the
    Plugin Store, plus a per-plugin changelog (from the notification or any updatable Store row).
    An opt-in Auto-apply on restart policy can stage compatible, non-pinned updates silently, and
    updates that need a newer app are shown ("Update app…") instead of hidden. Off / Notify / Auto in
    Settings ▸ Plugins.
  • Plugin Store "Updates" section — installed plugins with an available update are grouped at the
    top of the Installed tab under "Updates", so you no longer have to hunt for which ones can update
    (they no longer also appear in the list below).
  • extension plugin type — plugins are no longer only one-shot providers and tools: an
    extension plugin can run as a long-lived subsystem that contributes its own bottom panel,
    background work, Tools-menu items and managed connections, each behind a per-capability consent
    shown when you install it.
  • AI can create connections over MCP — with the MCP server on and the new "Let the AI create
    connections" setting enabled (off by default), an AI client can list the available providers and
    create or delete database connections. Fail-closed: creation is refused unless you opt in, only
    loopback hosts are allowed until you add more, persistent connections are capped at read-write, and
    every create/delete is audited. New connections land in an "MCP" folder; temporary ones are
    session-only and cleared when the app closes.
  • AI-activity panel — a bottom tool panel (toggled from the status bar) showing what an AI does
    over MCP: each call, the connection, and whether it was allowed or denied.
  • AI access on the connection tree — connections carry "AI" and "Temporary" badges, and a
    right-click AI access submenu sets the level (None / Read-only / Read-write) or excludes a
    connection from the AI without opening the Connection Manager.
  • One bottom panel at a time — a Settings ▸ Appearance toggle (on by default) so opening a bottom
    panel (Output, Containers, AI activity) closes the others instead of stacking them.
  • Search the Settings — a search box above the category rail filters categories by name or by the
    settings inside them (e.g. "token" surfaces MCP, "theme" surfaces Appearance).

Changed

  • The Plugin Store type filter is now a dropdown instead of a row of chips — more compact and it
    scales as new plugin types are added.

  • Release notes and the in-app updater now read the curated CHANGELOG.md instead of the raw git
    log, so each release describes what changed for you rather than listing commit subjects.

  • App and plugin update checks now log to the Output panel (channel + result), so you can see when
    a check runs and what it found.

  • The SQL formatter now indents SELECT column lists, parenthesised subqueries and JOIN/AND/OR
    conditions, instead of only breaking clauses onto their own lines. SQL Server gets a dedicated
    T-SQL formatter (Microsoft's official ScriptDom parser); the other engines use the improved generic
    engine.

Fixed

  • The app updater no longer offers a lower version on another channel as an "update" — switching
    channels only surfaces a build with an equal-or-higher core version, so a 0.3.0 build is never
    prompted to "update" to 0.2.0-preview.
  • Nightly and preview builds now stamp the version from the branch they are built from, so the About
    dialog no longer shows a mismatched build version.
  • The bottom tool panels (Output, Containers, AI activity) can now be resized by dragging their
    top edge — previously dragging did nothing, or left an empty band above the status bar.
  • "Restart app" (and the in-app updater's relaunch) now reliably brings the app back: the new
    instance no longer connects to the still-closing old one, defers to it and exits — which could leave
    no window at all. It also relaunches correctly when the app runs through the dotnet muxer.

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.

Stable channel manifest

Choose a tag to compare

@github-actions github-actions released this 19 Jul 21:01
f47cbfe

Update manifest for the Stable channel (points at the latest v-tag release).

Preview build (main)

Preview build (main) Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 19 Jul 20:39
f47cbfe

Added

  • Open & save queries as .sql filesCtrl+O to open (or drag a .sql file onto the window),
    Ctrl+S to save, plus Save As and a File ▸ Recent menu. Tabs show a dirty marker and remember
    their file across sessions, and closing a tab or the app offers to save unsaved changes — a
    preference in Settings ▸ Startup turns that prompt off. Saving pending grid-row edits back to the
    database moved from Ctrl+S to Ctrl+Shift+S.
  • Configurable update-check interval — choose how often the app checks for a new release.
  • A shared "Copied" confirmation for copy actions, shown bottom-centre.
  • SQL formatting options in Settings — keyword casing (UPPERCASE / lowercase / preserve) and
    indent width.
  • Proactive plugin-update notifications — an ambient top-bar badge and a persistent, actionable
    notification when compatible updates are available for your installed plugins, without opening the
    Plugin Store, plus a per-plugin changelog (from the notification or any updatable Store row).
    An opt-in Auto-apply on restart policy can stage compatible, non-pinned updates silently, and
    updates that need a newer app are shown ("Update app…") instead of hidden. Off / Notify / Auto in
    Settings ▸ Plugins.
  • Plugin Store "Updates" section — installed plugins with an available update are grouped at the
    top of the Installed tab under "Updates", so you no longer have to hunt for which ones can update
    (they no longer also appear in the list below).
  • extension plugin type — plugins are no longer only one-shot providers and tools: an
    extension plugin can run as a long-lived subsystem that contributes its own bottom panel,
    background work, Tools-menu items and managed connections, each behind a per-capability consent
    shown when you install it.
  • AI can create connections over MCP — with the MCP server on and the new "Let the AI create
    connections" setting enabled (off by default), an AI client can list the available providers and
    create or delete database connections. Fail-closed: creation is refused unless you opt in, only
    loopback hosts are allowed until you add more, persistent connections are capped at read-write, and
    every create/delete is audited. New connections land in an "MCP" folder; temporary ones are
    session-only and cleared when the app closes.
  • AI-activity panel — a bottom tool panel (toggled from the status bar) showing what an AI does
    over MCP: each call, the connection, and whether it was allowed or denied.
  • AI access on the connection tree — connections carry "AI" and "Temporary" badges, and a
    right-click AI access submenu sets the level (None / Read-only / Read-write) or excludes a
    connection from the AI without opening the Connection Manager.
  • One bottom panel at a time — a Settings ▸ Appearance toggle (on by default) so opening a bottom
    panel (Output, Containers, AI activity) closes the others instead of stacking them.
  • Search the Settings — a search box above the category rail filters categories by name or by the
    settings inside them (e.g. "token" surfaces MCP, "theme" surfaces Appearance).

Changed

  • The Plugin Store type filter is now a dropdown instead of a row of chips — more compact and it
    scales as new plugin types are added.

  • Release notes and the in-app updater now read the curated CHANGELOG.md instead of the raw git
    log, so each release describes what changed for you rather than listing commit subjects.

  • App and plugin update checks now log to the Output panel (channel + result), so you can see when
    a check runs and what it found.

  • The SQL formatter now indents SELECT column lists, parenthesised subqueries and JOIN/AND/OR
    conditions, instead of only breaking clauses onto their own lines. SQL Server gets a dedicated
    T-SQL formatter (Microsoft's official ScriptDom parser); the other engines use the improved generic
    engine.

Fixed

  • The app updater no longer offers a lower version on another channel as an "update" — switching
    channels only surfaces a build with an equal-or-higher core version, so a 0.3.0 build is never
    prompted to "update" to 0.2.0-preview.
  • Nightly and preview builds now stamp the version from the branch they are built from, so the About
    dialog no longer shows a mismatched build version.
  • The bottom tool panels (Output, Containers, AI activity) can now be resized by dragging their
    top edge — previously dragging did nothing, or left an empty band above the status bar.
  • "Restart app" (and the in-app updater's relaunch) now reliably brings the app back: the new
    instance no longer connects to the still-closing old one, defers to it and exits — which could leave
    no window at all. It also relaunches correctly when the app runs through the dotnet muxer.

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.

SQL Explorer 0.2.0

Choose a tag to compare

@github-actions github-actions released this 17 Jul 22:53
29c877c

Features

  • feat: Elasticsearch query sweep + inline update bar with download/install
  • feat(mcp): SE-147 no console window on Windows + Start/Stop toggle in Settings
  • feat(security): SE-145 redact secrets from MCP query results
  • feat(updater): SE-137 Fase 2 — in-place update, rollback, periodic check
  • feat(updater): SE-137 in-app updater with release channels (Fase 0+1)
  • feat(providers): SE-128 show the engine server version (host API v25)
  • feat(ci): version the artifact names and ship a Windows installer
  • feat(legal): SE-127 generate third-party notices from the NuGet closure
  • feat(about): SE-126 diagnostics — system info, plugin list, copy to clipboard
  • feat(main-window): SE-123 tool-window model for Output and History
  • feat(plugin-store): SE-120 version-pin plugins to hold a specific release
  • feat(settings): SE-122 move Plugin Store sources to Settings
  • feat(plugin-store): SE-121 category chip-filter in Browse sidebar
  • feat(mssql): SE-116 login Properties prefill + diff-based Apply
  • feat(connection-manager): drag-to-reorder + provider icons
  • feat(elasticsearch): add Elasticsearch provider + cursor-paging fundament (SE-3)
  • feat(dragonflydb): add DragonflyDB provider plugin (SE-4)
  • feat(sdk,plugins): non-SQL editable-grid writeback + Redis provider (SE-114/SE-20)
  • feat(mssql): server-login management via compiled-AXAML view (host-API v21)
  • feat(plugins): accept a host-API version range; store compat by build version
  • feat(backup): restore per-object selection + Fase 2b + dialog polish
  • feat(mongodb): MongoDB provider + non-SQL provider seam (host API v20)
  • feat(backup): per-object schema/data selection + live checklist (Fase 1+2a)
  • feat(plugins): localization seam + translated tool plugins + built-in Store icons
  • feat(security): optional master password + quick wins
  • feat: quick fixes — context menu, top 1000, MCP query-log tool
  • feat(logging): opt-in query log with source scope + non-modal viewer
  • feat(mcp): host-owned MCP server for AI query access
  • feat(security): user management + ICustomSecurityUi seam
  • feat(monitor): activity monitor + provider-owned cell actions
  • feat(schema): view/table DDL script + folder object counts
  • feat(ci): build on push to main
  • feat(app): quick wins — HTML copy, GUID insert, exit confirm, SQLite backup
  • feat(mssql): admin dialogs, nested tool menus and connection tuning
  • feat(ci): ad-hoc sign macOS bundle and document quarantine workaround
  • feat(ci): publish rolling nightly release with fixed asset links
  • feat(schema): browse and execute procedures, functions and triggers
  • feat(editor): persist editor zoom to the font-size setting
  • feat(app): session restore, system-database toggle, and editor/grid polish
  • feat(tree): size badges, compact rows, and tab/grid polish
  • feat(output): auto-scroll, copy-all, and affected-row count
  • feat(output): copy an output line via right-click
  • feat(store): plugin store UI + wiring — Browse/Installed/Sources, install flow
  • feat(store): plugin store core — dual-root loader, catalog + install pipeline
  • feat(shortcuts): configurable keyboard shortcuts + plugin shortcut SDK
  • feat(app): schema-tree UX, editor/grid quick wins, tab restyle
  • feat(backup): streaming .lbak v2 for large LOBs + datatype-correct restore
  • feat(tools): tool plugin SDK + universal backup/restore
  • feat(settings): plugin settings SDK + redesigned preferences window
  • feat(connections): add connection manager window with nested folders
  • feat(connections): sidebar folders to group connections (FR-6)
  • feat(query): Stop button to cancel a running query (FR-7)
  • feat(connections): keep an open connection alive when editing it
  • feat(app): error banner + output/log panel for failures and notices
  • feat(mssql): render Advanced connection section via Route B custom view
  • feat(connections): Route B seam — provider-supplied advanced connection UI
  • feat(connections): import connection string to prefill fields (FR-1)
  • feat(connections): rich, grouped advanced connection settings
  • feat(desktop): macOS .app bundle packaging with native menu bar
  • feat(app): settings window, menu bar, and copy-result-to-clipboard
  • feat(app): merge command palette into Ctrl+K quick-open
  • feat(app): result export (CSV/JSON/SQL), CSV import, per-column browse filter
  • feat(app): execute-selection/at-cursor, multi-resultset, EXPLAIN, FK-introspectie
  • feat(app): DDL create, connection/db switcher, DROP/ALTER, auto-increment
  • feat(app): schema-aware SQL completion (Ctrl+Space / on ".")
  • feat(app): schema cache + quick-open object search (Ctrl+K)
  • feat(app): selection aggregation strip (count/sum/avg/min/max)
  • feat(app): cell value viewer with JSON pretty-print
  • feat(app): persistent, searchable query history with re-run
  • feat(app): per-connection colour flag + read-only safe mode

Fixes

  • fix(ci): use commit SHA as release target, not the v-tag name
  • fix(about): show all three host API contracts, not just the provider
  • fix(store): SE-136 judge mcp plugins against the McpHostApi window
  • fix(ci): SE-135 harden the build pipeline against injection and unverified tools
  • fix(about): read the informational version so the build channel shows
  • fix(plugin-store): require https for sources and downloads, pin only a deliberate choice
  • fix(about): localize the plugin source and flag labels
  • fix(mssql): correct role diffing, USE parsing and password masking in login properties
  • fix(build): set the product version to 0.1.0
  • fix(app): don't crash on startup when a saved connection's provider is missing
  • fix(ui): colour a connection's status dot when a query auto-connects
  • fix(ui): render plugin icons crisply at small sizes
  • fix(ci): set GH_REPO so nightly release works without a checkout
  • fix(ci): make macOS ad-hoc signing non-fatal
  • fix(ci): pin AppImage arch to x86_64
  • fix(browse): stop the connection switcher nulling a browse tab's connection
  • fix(store): align Plugin Store UI with mockup + polish
  • fix(mssql): full column type with length in schema tree
  • fix(connections): connect on root expand + full-width Advanced section
  • fix(connections): edited advanced values now show in a Route B view on re-edit
  • fix(app): keep SQL editor pane on New Query after a browse tab

Other

  • ci: retry the DMG build when hdiutil reports "Resource busy"
  • ci: build develop nightly and main as preview
  • chore(mssql): bump sqlserver plugin to 0.2.1 with refreshed icon
  • perf(app): fix DataGrid scroll + browse page size, language dropdown, settings polish
  • chore(redis): embed the brand icon (matches MongoDB's icon.png convention)
  • chore(plugins): version bundled plugins at 0.1.0
  • Fix icon paths in build.yml for SqlExplorer
  • Fix publish command path in build.yml
  • refactor(rename)+feat: SqlExplorer namespaces, tray, DB properties tabs
  • Update release condition to include push events
  • chore(ci): skip push builds for docs-only changes
  • docs(ci): update build workflow header for active nightly schedule
  • Enable nightly build schedule in GitHub Actions
  • chore(ci): add multi-platform build workflow
  • refactor(output): consolidate query feedback into the Output panel
  • docs(plugins): document tool plugins, settings/shortcut capabilities
  • docs: add plugin authoring guide (PLUGINS.md)
  • reordenend solution folders
  • refactor(plugins): move dev-only template provider to repo-root plugins/
  • refactor(sdk): align namespaces with folders
  • refactor(sdk): consolidate to one SDK project with folders
  • refactor(sdk)!: manifest provider identity + execute-time database context

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.