Releases: radix29/gossms
Release list
gossms v0.0.11
Release Notes
What changed in the current goSSMS release. The detail behind each line — and
every earlier release — is in CHANGELOG.md.
v0.0.11 — 2026-09-15
Install it from a package manager, and sign in with Microsoft Entra ID.
⭐ Homebrew — macOS and Linux
brew install radix29/tap/gossmsApple silicon, Intel and Linux (amd64/arm64). brew upgrade gossms tracks
every new release. This is the first release the tap actually serves: the
v0.0.10 release job rendered the formula correctly and then pushed nothing, so
brew install radix29/tap/gossms returned 404 for that whole cycle. Fixed
here, and the job now fails instead of going green on an empty push.
⭐ APT — Debian, Ubuntu and derivatives
sudo install -d -m 0755 /etc/apt/keyrings
curl -fsSL https://radix29.github.io/apt/gossms.asc \
| sudo tee /etc/apt/keyrings/gossms.asc > /dev/null
echo "deb [signed-by=/etc/apt/keyrings/gossms.asc] https://radix29.github.io/apt stable main" \
| sudo tee /etc/apt/sources.list.d/gossms.list > /dev/null
sudo apt-get update && sudo apt-get install gossmsGPG-signed, amd64 and arm64, at
radix29.github.io/apt. apt-get upgrade
tracks new versions.
⭐ Microsoft Entra ID sign-in
Seven methods — MFA, Device Code, Password, Service Principal,
Managed Identity, Default and Azure CLI — all but Managed Identity
verified end to end against a live tenant. Device Code is the one that
makes goSSMS usable where a browser is not: it shows a code to enter at
Microsoft's sign-in page from a phone or another machine, so a server reached
over SSH signs in like any other. One sign-in covers the whole session —
Object Explorer, every query window, Activity Monitor and every reconnect, on
every server in the same tenant.
Also in this release: query windows keep a real SQL Server session, long
writes run behind a cancellable progress dialog, and Object Explorer gained
the remaining SSMS database families. Updates gosmo to v0.0.13.
New
- ⭐ Homebrew tap that works —
brew install radix29/tap/gossms, macOS
(Apple silicon and Intel) and Linux. - ⭐ APT repository — GPG-signed,
amd64andarm64, at
radix29.github.io/apt. - ⭐ Microsoft Entra ID sign-in, seven methods, verified against a live
tenant; TenantID optional, as in SSMS. - ⭐ Device Code sign-in in a dialog, with Copy Code — for a machine with
no browser, or over SSH. - File > Clear Microsoft Entra Sign-ins — switch accounts without a
restart. - Query windows hold a session: temp tables,
SEToptions,USEand open
transactions survive between runs, and the connection bar shows the SPID and
any open transaction count. - A progress dialog for long writes — spinner, elapsed time and a Cancel
that really cancels the statement; greyed with a reason on a failover or a
revert to a snapshot. - Database Snapshots in Object Explorer, with New Snapshot...,
Revert to Snapshot and Properties. - Programmability > Types (all five folders), XML Schema Collections,
Assemblies, Rules, Defaults and Plan Guides — Plan Guides
can be enabled and disabled. - External Resources — external data sources, file formats and libraries.
- Tables now has System, FileTables, External and Graph sub-folders.
- Move to another schema for the new type families that permit it.
- Resource Governance page on Azure databases — usage shown against the
limit it is a percentage of. - Disk-usage charts in Object Explorer Details, with a pinned readout.
- Live row counter while a query runs —
Executing... | 128413 rows. - IPv6 addresses in the Connect dialog.
Fixes
- Copy and paste garbled non-ASCII text on Windows in both directions.
- Object Explorer selection jumped to a different node after a background
load. - A Properties dialog's previous showing could deliver loads and errors into
the next one. - SQL Server Agent Start/Stop/Enable/Disable/Delete had no permission gate.
- Closing a Query Store panel did not cancel its reads.
- Refresh leaked every node it replaced and never re-read server-scope
permissions. - Check for Updates reported "up to date" for a development build newer than
the last tag. - The Restore dialog showed an empty set for a database whose only backups are
Azure automated ones; it now says why. - An empty
varbinaryscripted as0x00— a different value. - A schema-qualified security policy or trigger was named unqualified in its
confirmation prompt. - A long server or database name overflowed the Connect dialog's list.
Changes
gosmov0.0.12 → v0.0.13,tcell/v3v3.4.2 → v3.5.0.- New connections encrypt by default —
Encrypt: Mandatorywith Trust
Server Certificate ticked. Saved connections keep their own setting. - A saved password is bound to its server, port, user, authentication method
and encryption settings, so it cannot be moved to another server by
editingconfig.json. - The Connect dialog greys the fields the chosen authentication method does
not use, and sends only those. - Recent connections: 30, up from 15.
- Closing a panel cancels its reads and returns its memory to the OS.
- Permission gating understands per-securable
CONTROL— on an assembly, a
type or an XML schema collection — and names the right at its real scope. - The Detail Browser cancels a fetch it has moved past; the per-database
capability probe is single-flight. - Log File Viewer merges SQL Server and SQL Agent files together.
- Agent screens show Yes/No instead of
true/false. InstanceKeyincludes the port for an address with no instance name.
gossms v0.0.10
Release Notes
What changed in the current goSSMS release. The detail behind each line — and
every earlier release — is in CHANGELOG.md.
v0.0.10 — 2026-09-09
goSSMS installs from a package manager now. Homebrew on macOS and Linux,
APT on Debian, Ubuntu and derivatives — both published by the release workflow
from the same binaries the GitHub release carries, so brew upgrade and
apt-get upgrade track new versions.
brew install radix29/tap/gossms # macOS and Linux# Debian / Ubuntu — full instructions in README.md
sudo apt-get update && sudo apt-get install gossmsAlso: Azure SQL Managed Instance is properly supported, four new Object
Explorer families, and a merged Log File Viewer. Updates gosmo to v0.0.12.
New
- ⭐ Homebrew tap —
brew install radix29/tap/gossms, macOS (Apple silicon
and Intel) and Linux. - ⭐ APT repository — GPG-signed,
amd64andarm64, at
radix29.github.io/apt. - Azure SQL Managed Instance support: engine-edition version gating,
backup and restore to Azure Storage (TO URL/FROM URL), and operations
the edition refuses are withheld with a note instead of failing. - Activity Monitor "Instance" tab on Azure editions — CPU, storage against
the quota, IO, and the resource governor's limits. - Database Triggers, Database Audit Specifications, Database Scoped
Credentials and Cryptographic Providers in Object Explorer, with
Properties, Script and Delete; the first two also Enable/Disable. - New Database Audit Specification and New Database Scoped Credential.
- A view now has a Triggers folder — its INSTEAD OF triggers.
- Log File Viewer merges files — several archives in one date-sorted grid,
each row naming its file. - Query Store: Plot History — the selected query's per-plan history,
interval by interval. gossms --versionprints version, commit, build date and licence
without starting the interface.- The Connect dialog stays open while connecting, with a spinner and a
working Cancel. - macOS Intel binaries are published again — five release targets.
- FILESTREAM files are handled in Database Properties > Files.
- Query > Execute at Cursor and Edit > Delete Line.
Fixes
- Database Properties > General was empty on a Managed Instance.
- Every version gate silently degraded on a Managed Instance, which reports
version 12 while running an 18.x engine. - Agent status, Platform and disk-space rows were wrong on a Managed Instance.
- The server filesystem lost file size and modification time on Azure.
- Adding a file to a FILESTREAM filegroup failed the whole Add.
- The Back Up dialog did not re-gate the device for a hand-typed destination.
- A cancelled connection could pop an alert over an unrelated screen, or leak
a live session. - A scripted column encryption key rotation read the wrong value count.
Changes
gosmov0.0.11 → v0.0.12.- The flat Triggers folder under a database is gone — a DML trigger is
listed under its own table or view, as in SSMS. - Explicit
DENYis honoured at database-principal, server and availability
group scope. - Server Properties > Advanced is editable.
- Database Role Properties > Members is gated on the role itself.
- Database Role and Server Role Properties share one General page.
- Database-scoped credentials require
CONTROLon the database. - Copy works in the Detail Browser and the Always On dashboard grids.
Button,CheckBoxandRadioBoxcan be disabled; aSpinnerwidget was
added.- Documentation split:
docs/ui-rules.md,docs/db-rules.mdand
docs/testing.mdown whatCLAUDE.mdused to carry.
gossms v0.0.9
Release Notes
What changed in the current goSSMS release. The detail behind each line — and
every earlier release — is in CHANGELOG.md.
v0.0.9 — 2026-09-04
The Query Store release. Also Compare Showplan, Detach/Attach Database, six
more server-level families in the tree, and multi-object Delete. Updates
gosmo to v0.0.11.
New
- Query Store — SSMS's seven views per database, as tree leaves and as a
charted panel with selectable metric, statistic, window and row count. - Force / Unforce Plan, Show Plan, Track Query, Compare Plans from that
panel. - Compare Showplan — two plans of one query paired over the operator tree.
- Detach and Attach Database, browsing the server's own filesystem.
- Credentials, Audits, Server Audit Specifications, Backup Devices, Server
Triggers and Endpoints in Object Explorer, with Properties, Delete, Script
and Enable/Disable. - New Credential, New Audit, New Server Audit Specification, New Backup
Device. - Delete several objects at once from Object Explorer Details
(Ctrl+click,Shift+click/Alt+click). - A Script button on every delete confirmation.
- New Login creates all five login kinds — SQL, Windows, Entra,
certificate- and asymmetric-key-mapped. - Column encryption key rotation.
- A job step's command is edited in the query editor — multi-line,
highlighted, with its own undo. - New Availability Group preflights every secondary before writing.
- Key Diagnostics logs mouse events.
- Supported floor stated: SQL Server 2016 SP1+. Features an instance is
too old for are withheld, not offered and refused.
Fixes
- A query could return an empty grid with no error and no Messages tab.
- A named instance could not be reached by name — the Connect dialog's
pre-filled port suppressed the SQL Browser lookup. - Saving a mostly-LF script rewrote every line ending in it.
- Saving a file re-widened its permissions.
- Toolbar buttons that did not fit were deleted, not hidden — Export and
Recycle, Pause, Compare Plans, Track Query. They collapse into More ▾ now. - Read-only Properties pages still drew editable-looking controls, and a
read-only label ran into its value. Ctrl+Zin a job step's command box reverted the whole page.- A Properties page showed stale values after an apply that failed having
already changed the server, and stuck on "Loading..." after a panicking load. - A grid went blank on an error when scrolled right, and scrolled past its own
rows before being laid out. - An Add or Remove on a Properties grid dropped a dragged column width — 17
sites. - A menu-driven drop, rename, offline or failover was abandoned mid-flight on
the read timeout. - The permission banner and the menus disagreed; a DENY on an object, column or
schema is now honoured. xp_cmdshellcould be ticked on Linux, where it does not exist.- New Database Mirroring Endpoint could import an instance's own certificate.
- The connection-string preview disagreed with the connection it previewed.
- The server filesystem picker showed "0 B" and 0001-01-01 on pre-2017
instances.
Changes
gosmov0.0.10 → v0.0.11.- The Connect dialog's Port field is blank by default; Connect is greyed until
a server is entered. - Object- and schema-scoped rights are asked with their securable, so a grant
made directly on one object counts. - Peer connection failures are cached briefly instead of redialled per folder.
- Highlighting and editing a large script got substantially faster.
- The server filesystem listing filters server-side — roughly 8x less waiting.
- Release binaries cover four targets, not six:
windows/amd64,
linux/amd64,linux/arm64,darwin/arm64. docs/journal.mdanddocs/permissions-plan.mdremoved;open-threads.md
holds open work and settled decisions only.
gossms v0.0.8
Release Notes
High-level summary of what changed in each goSSMS release, one entry per
version. For the detailed, file-by-file changes behind each entry, see
CHANGELOG.md.
v0.0.8 — 2026-08-25
The least-privilege release. goSSMS now works as a login that is not
sysadmin — it could not even connect as one before — and where a right is
missing it says which one rather than showing a zero or a driver error.
Alongside it: Script <object> as ▸ on every node the tree shows, New Index
and New Statistics, four more object families in Object Explorer, a
missing-index banner on execution plans, and .sqlplan files. Updates gosmo
to v0.0.10, Go to 1.27 and tcell to v3.4.2.
New
- goSSMS works as a login that is not
sysadmin. Adb_ownercould not
connect at all: the connect-time server read asked for a DMV in the same
statement as thirteen public values, so one refused column failed the whole
thing. That statement is split, and one round trip at connect now asks the
server what this login may do. - A value that could not be read shows as
N/A, never as0— and never
as a smaller number taken over the rows the login happens to see. A page
whose main reads succeed opens even when one of them was refused, and a grid
built from a visibility-filtered catalog view says so at the top. - A refusal is shown as the right it needs — Access denied — Requires
SELECT on msdb.dbo.sysjobservers — rather than the wrapped driver error,
with the failed action's own text kept. Where SQL Server itself will not say
whether an object is missing or merely invisible, goSSMS does not say either.
A database this login cannot open expands to one Access denied line
instead of nine folders that each fail on their own. - An action you cannot perform is withheld, not offered and then refused.
The menu item is greyed and names the permission it wants; a Properties page
whose writes would be rejected opens read-only with the required right at the
top and Close / Script Changes in place of OK/Apply, so the statements can
still be generated for someone who can run them. The check is one-sided —
an action is withheld only when the server answered "no" to every right
that would permit it, so an unprobed connection behaves exactly as before.
README gains a Required rights table;docs/permissions-plan.mdcarries
the whole design. Script <object> as ▸on every family the tree shows — sixteen node
types, with CREATE, ALTER, DROP, DROP And CREATE and the SELECT / INSERT /
UPDATE / DELETE / EXECUTE templates, to a new query window, a file, or the
clipboard. An index adds REBUILD, REORGANIZE and UPDATE STATISTICS; a
statistics object its own UPDATE STATISTICS. The three hardcoded
"Script Table as CREATE"-style items are gone.- New Index and New Statistics. A table's Indexes folder creates any index
type SQL Server has — clustered and nonclustered (unique, included columns,
filter, fill factor, online, partition scheme), clustered and nonclustered
columnstore, XML primary and secondary, and spatial with its tessellation,
bounding box and grid. Its Statistics folder creates a statistics object with
an ordered column list, a filter, FULLSCAN or a sample percentage,
NORECOMPUTE and INCREMENTAL. Both offer Script Changes instead of running. - Four more object families in Object Explorer. A database gains a
Storage folder (Partition Functions, Partition Schemes), and its Security
folder gains Security Policies — with Enable/Disable, the disable
confirmed, since it stops filtering and every protected row becomes visible —
and Always Encrypted Keys, with New Column Master Key and New
Column Encryption Key dialogs. Eleven node types, each with Properties, a
Detail Browser view, Delete and a Script entry. - A missing-index suggestion shows as a banner above the execution plan;
m, or a click on it, opens theCREATE INDEXscript in a query window.
Plans open and save as.sqlplan, the same files SSMS reads and writes. - Log File Viewer: Recycle, and a search the server runs rather than a
filter over what was already read. Enter or a double-click opens a log file
from the tree instead of only its context menu. - Job Properties > Steps: Move Up / Move Down. A move is a delete plus an
insert, so the step's whole definition has to survive it — proxy, run-as
user, additional parameters, CmdExec success code, target server and priority
are read and written now instead of being silently dropped. Start and Stop
know the job's state and refuse locally rather than at the server. - Delete a column, drop a table with its foreign keys, move an object to
another schema, and rename a column. The cascade is a checkbox on the
delete question rather than a second question; the column rename warns
before the rename, not after. - Menu bar and context menus have submenus.
MenuItem.Subopens a
cascade, and the open chain is re-derived from the host's live menu every
frame, so a rebuilt menu can never be navigated through a stale pointer. - Key Diagnostics can copy its log — it is a real read-only editor now,
with mouse drag-selection,Shift+arrows,Ctrl+A, a scrollbar and a Copy
button, which is what makes it pasteable into a bug report. - A peer instance is reached with its own credentials. Every Always On
read that follows the primary used to sign in with whatever login the tree
was registered with; a saved connection for that instance now wins, with the
parent's settings retried once behind it so a resolver can only ever make an
instance more reachable. - Add Database to an availability group checks the full-backup
prerequisite — oversys.database_recovery_status, not msdb, which cannot
answer it — and the exclusion line says "back it up first". It used to offer
the database and fail on apply with Msg 1475.
Fixes
- Connect was unreachable by keyboard on every terminal.
Ctrl+Shift+O
was bound as an event tcell never produces, so legacy terminals opened a file
instead and modern ones matched nothing;Ctrl+Shift+Uwas dead the same
way, and its test passed only because it synthesized the impossible event.
F9is the Connect binding now, and the chord is folded back app-wide
where the terminal can encode it. - The Processors page turned off the instance's CPU affinity. For a login
that cannot read the CPU list the affinity grid was built with zero rows,
which Apply compared against the live mask and wrote back as
sp_configure N'affinity mask', 0— the instance unpinned from its
processors, with nothing on screen having said so. Ctrl+Xin the Find dialog cut the query editor's text behind it, with
nothing on screen saying what was cut or from where. The clipboard target is
now resolved by asking the frontmost dialog, and never falls past it.- A click on a Properties grid moved the highlight and told nobody —
eleven pages wire a selection callback onto a cell-cursor grid, and the
detail panel below went on describing whatever row the keyboard had last
left it on. - A grid redraw put the row the user was on at the bottom of the viewport,
and a column the user had dragged snapped back to its default width. - A menu bar dropdown taller than the terminal lost its last items,
silently — painted past the bottom edge, unclickable, with the keyboard
highlight walking onto them where nothing showed it. Dropdowns scroll now,
with ▲/▼ marks and wheel support; a context menu is clamped instead, because
it can be moved and a dropdown cannot. - The panel drop-down ran off the bottom of the screen — with more query
panels than the terminal has rows, the ones past the edge were unreachable by
mouse and keyboard, and the active panel was often among them. It scrolls,
its scrollbar is draggable, and its drag latch no longer outlives it. - A paste followed focus to the next row. Aimed at Name and delivered
after the user tabbed on, it landed in Description — every clipboard read is
asynchronous, and the guard against a moved target could not see through a
property sheet that answers as itself. - A scripted partitioned table came back unpartitioned.
ScriptTable
emitted noONclause, so the script ran clean and produced a
single-partition heap on PRIMARY. - A scripted login dropped the SID it already had, orphaning every
database user mapped to it on the target server — the main reason to script
a login at all. And a login whose name contains " WITH " produced a statement
that does not parse, because the builder decided its own syntax by grepping
its own output. - Autogrowth could not be turned off.
FILEGROWTH = 0was inexpressible:
the value that disables growth and the value that omits the clause were the
same value. CREATE COLUMN MASTER KEY's enclave clause was never valid syntax —
ENCLAVE_COMPUTATIONS = YEShas no boolean spelling, and the parse error it
raises cannot even be caught by TRY/CATCH. The signature is supplied by the
caller now, because nothing inside the library can compute one.- The missing-index suggestion generated an index that could not seek.
INEQUALITY columns were folded in among the EQUALITY ones, which reads
harmlessly and silently costs the seek the suggestion existed to buy. - New Endpoint's Script Changes ran the wrong statements against the wrong
instances — every collected statement in one batch, with nothing saying
they belong to two or more servers. Each instance's statements are labelled
and grouped now. - Two data races: Object Explorer and Detail Browser loaders read the live
...
gossms v0.0.7
Release Notes
High-level summary of what changed in each goSSMS release, one entry per
version. For the detailed, file-by-file changes behind each entry, see
CHANGELOG.md.
v0.0.7 — 2026-08-19
The Always On release. Availability groups arrive complete — browse a
topology, edit it, watch it on a live dashboard, run every operation on it,
and create one across instances that were never registered — alongside a Log
File Viewer, an Object Explorer folder filter, Delete and Rename on any
object, and a Backup/Restore pair that finally browses the server's
filesystem rather than the client's. Updates gosmo to v0.0.9.
New
- Always On Availability Groups, end to end. An
Always On High Availabilityfolder in Object Explorer over groups, replicas, availability
databases and listeners; AG Properties (General, Backup Preferences,
Read-Only Routing); and a live dashboard for one group or for all of
them, with estimated data loss and estimated recovery time — the two numbers
SQL Server does not report — and a selectable refresh rate. - Every Always On read follows the primary. The
sys.dm_hadr_*DMVs
describe only what the connected instance can see, so a topology read from a
secondary comes back blank where it matters most. goSSMS opens a connection
to the primary with the same credentials, says so on screen, and degrades to
the partial local view — naming the host it could not reach — rather than
failing. - Always On operations: add and remove a database, join and unjoin a
secondary's own copy, suspend and resume data movement, add and remove a
replica, add, modify and remove a listener, drop a group, and fail over,
planned or forced with data loss. Where an operation runs is part of what it
means, and each confirmation says which instance it is about to affect. - Create an availability group across instances the user never registered
— CREATE on the connected instance, then JOIN and the seeding grant run by
each secondary against itself. Script Changes labels every statement with
the instance it targets. - New Database Mirroring Endpoint sets up certificates, logins, endpoints
and grants across all replicas at once, exchanging public certificates
over connections goSSMS already has instead of the documented
back-up-to-a-file-and-copy-it route. No private key is read, transmitted or
written, and a half-configured pair is completed rather than refused. - Log File Viewer — SQL Server and SQL Agent error logs, current or
archived, newest first, with a filter, a details pane for the entries that
are four lines long, and export. - Object Explorer folder filter — SSMS's Filter Settings over name,
schema, creation date and memory-optimized. It survives Refresh,
collapse/expand and a reconnect, and it reaches the Detail Browser beside
the tree. - Delete and Rename on any object, with the confirmation scaled to the
blast radius — a plain Yes/No for one object, retype-the-name for a
database. A database rename offers the forced form, since the tree's own
connections are enough to deny it exclusive access. - Backup and Restore browse the server's filesystem, with the path rules
of the host being browsed rather than the client's. Browsing a Windows
instance from Linux used to produce a destination that could never work,
scripted with no error at all. - Restore File Locations — a view of its own for relocation: keep the
backup's paths, relocate when renaming, or move everything into two named
folders, with a per-file preview and a button that fills in the server's own
data and log paths. Ctrl+Zreverts a Properties page to the values it loaded with, without
a round trip.- Text files keep their encoding. UTF-8, UTF-8-with-BOM and UTF-16 are
detected from a BOM and nothing else, and the file's line endings are
preserved on save.
Fixes
- Every replica but the first was unreachable on six grid pages — three AG
Properties pages, three New Availability Group pages and the owner-transfer
dropdown. Redrawing a grid from inside its own selection callback silently
undid the move, so neither the mouse nor the keyboard could reach a second
row, and the first arrow key threw focus out of the grid entirely. File > Openwas lossy andFile > Savedestroyed the original. A file
with a tab, a CRLF or a BOM opened marked dirty, so closing it prompted to
save — and the save rewrote it. A UTF-8 BOM went to the server inside the
first batch, and a UTF-16 script came back U+FFFD-laden and unrecoverable.Endon an empty results grid took the application down, three
keystrokes from any query returning no rows.- Delete and Rename were offered on system objects, and renaming a system
database dropped every connection to it on the way to an error the server
was always going to return. Login Properties could likewise rename a
##MS_*login. - A panic left the UI latched for the object's lifetime, at 16 sites: a
query panel refusing every later Execute with a ticker still running, a
Properties dialog ignoring every button including Cancel, an inert Log File
Viewer toolbar, IntelliSense never returning for a database, a backup
counted as running forever, and tree nodes stuck on "Loading...". - Long words were never broken and every caller clipped them, so a
connection error to a too-long hostname showed forty characters of it and
never the informative end. - A dialog did not follow a terminal resize — the box kept the rect it was
centred into, so its entire button row could sit off-screen while it went on
swallowing every key — and dialog content overflowed the box on a terminal
too small for it. - Ten property-page dropdowns displayed the first option as fact when the
server's value wasn't in the list, on exactly the objects an admin opens the
page to investigate; one of the ten wrote it back. Ctrl+Zlied on four grids, reporting a revert while the grid kept
every change — enough to create an availability group with a database the
user had just told the app to forget.- Config could be lost two ways: an unreadable
config.jsonread as "no
config" and was then overwritten with emptiness, andgossms.key— the one
file that can read it — was the only thing not written atomically.
WriteAtomicalso stopped re-widening file modes and stopped replacing
symlinks with regular files. - The Detail Browser parked one goroutine per row waiting on an 8-slot
gate, and could deadlock the folder outright if a worker died. - Backup and Restore failure messages no longer clip to one line, the Restore
script'sMOVEclauses are visible rather than running off a 300-column
line, the Destination field no longer draws empty for a short path, the
endpoint pipeline no longer reads any error as "the login isn't there" or
trusts a peer certificate by name, "Jobs Without Schedules" no longer hides
the jobs it couldn't check, and F5 reaches a dashboard panel.
Changes
gosmov0.0.8 → v0.0.9 — availability groups end to end, certificates and
the binary certificate exchange, the database mirroring endpoint, the error
log, the server's filesystem, anErrNotFoundsentinel, and theDrop/
Renamegaps filled in across the object families.Table.Indexeswent from N+1 to two queries whatever the index count —
~640 ms to ~50-120 ms over an 18-index database, output byte-for-byte
identical.- A per-database fan-out was built, measured, and thrown away: it was
slower than serial at every width, because each worker needs a physical
connection and the handshake costs fifty times the query. What was kept is
that a database whose fetch fails is now skipped rather than failing the
whole page. Dropno longer means "or it was already gone" — gosmo's drop methods
lostIF EXISTS, so "deleted" means deleted. Generated scripts keep it,
since they exist to be re-run.- One implementation each, where there had been several: the grid-plus-editor
idiom, the dropdown that must not misreport a server value, the
schema-scoped tree loaders, the two history charts, and the panel toolbar
geometry.core.Min/core.Maxgave way to Go's builtins across 145 call
sites. - The T-SQL of every gosmo write method is now pinned by test — 84 of 183 had
no coverage at all — and the dialog registry is pinned by reflection over
App's own fields.
gossms v0.0.6
Release Notes
High-level summary of what changed in each goSSMS release, one entry per
version. For the detailed, file-by-file changes behind each entry, see
CHANGELOG.md.
v0.0.6 — 2026-08-11
The Activity Monitor release. Five live tabs over DMV data arrive with a
terminal charting library behind them, the query editor gains Find and
Replace and real block editing, and permissions editing is finally complete
— WITH GRANT OPTION, column-level grants, and an Effective Permissions
page. goSSMS is now GPL-3.0-or-later. Updates gosmo to v0.0.8.
New
- Activity Monitor (View > Activity Monitor) — History and Sample
over live DMVs: batches/transactions/compiles, wait categories split into
resource and signal time, memory composition and cache ratios, page
activity, per-file I/O latency, log flushes and checkpoints. Selectable
refresh rate (2/3/5/10 s), pause, and Retry on a feed that stopped. Thirty
minutes of history is kept in memory; nothing is persisted. - TempDB tab — tempdb space, per-file usage, temp tables and the version
store, on its own slower schedule. - Block and Sessions tabs — the current blocking chains and everything
currently running, each one run of a stored procedure in a full result
grid.sp_block/sp_WhoIsActiveare used where they are found, or
installed into tempdb, with an "Install in master" button to make either
permanent. - A click pins a chart readout, and it tracks its sample — the box follows
the data left across the plot and closes itself when the point it names
scrolls off. - Find and Replace in the query editor —
Ctrl+F,F3/Shift+F3,
Ctrl+F3for the word under the caret, match case, whole word, regular
expressions, and Replace All within the selection as one undo step. - Block (column) editing — typing,
Tab,BackspaceandDeletenow
apply to every row of anAlt+Shift+Arrowselection, and a block copied
that way pastes back rectangularly. Double-click selects a word. - Resizable result-grid columns — drag a header separator to resize the
column to its left, past the max default cell length; double-click it to
restore. - Permissions editing completed —
WITH GRANT OPTION/CASCADE/
GRANT OPTION FORderived from each cell's transition, per-column grants on
a table or view, filter boxes on the long grids, a securables search that
asks the server instead of loading the whole catalog, and a read-only
Effective Permissions page on Login and Database User Properties.
Fixes
- Every property-sheet grid was a partial keyboard trap — Up at the first
row, Down at the last, andLeftback to the page list all did nothing on
all 21 grid pages, and an empty grid ate every arrow key. - A restore from an appended
.bakused the wrong backup set's file list,
so every rename-restore failed with "Logical file 'x' is not part of
database 'y'"; the Files Included panel also kept showing set 1 whatever was
selected. - The Job Steps page rewrote a PowerShell or CmdExec step as T-SQL, and
it — like New Job — silently retargeted a step at whichever database sorted
first. Selecting a second step was enough to trigger both. - Column permissions were broken end-to-end for views: existing grants
read as "(none)", and "Load Columns" errored on every view. - Effective Permissions was offered on Database Role and Server Role
Properties, where it can never work — a role cannot be impersonated — and
the server-scope query failed for exactly the restricted logins it is most
useful on. - A disabled properties field looked live and silently ignored clicks; a
second click on an async page action put two round trips in flight; a
permissions Apply issued its statements in map order and left a stale
baseline behind; a filter matching nothing left the grids below it live. - A text-selection drag stopped selecting the moment it left the field, in
the Connect, Backup, Restore, Find and file dialogs. - Activity Monitor: a stopped collector went on reporting itself as
collecting, a zero refresh rate panicked the application, right-click did
nothing on the Block and Sessions grids, and the pinned tooltip was by turns
stale, self-dismissing, and drifting. - Database Properties > Files showed
PRIMARYas a log file's filegroup and
committed it; the Backup dialog offeredtempdband offline databases; the
Object Explorer Details refresh button refreshed the wrong node;
Editor.SetTextleft one mouse latch armed.
Changes
- goSSMS is now GPL-3.0-or-later. The Sessions tab embeds Adam Machanic's
GPL-3.0 sp_WhoIsActive, carried with its own licence and a modification
notice; see README § License and Acknowledgements. - Editor undo became per-edit deltas — a keystroke in a 20,000-line
script went from 4.5 ms / 5.25 MB / 20,002 allocations to 90 µs / 1.05 KB /
5 allocations, and the stack is capped in bytes as well as steps. - The dashboards draw an order of magnitude cheaper — 20,685 allocations
down to 2,183 and 6.36 ms to 3.05 ms, with the rendered output proven
byte-identical — and Find's draw path is no longer quadratic in matches. - The two collectors and the two sample stores became one generic
implementation each, the panel's duplicated per-feed state became one type
held twice, and 36 hand-rolled panic-guarded goroutines becamesafego. - Which databases a dropdown offers is now one documented rule, turning on
whether the name is resolved now or later. - "Show Value" routes by the column's declared type rather than by the shape
of the text, so anxmlcolumn opens highlighted even when its brackets
come back entity-escaped. - The T-SQL tokenizer and scope scanner moved out to
internal/tui/sqlparse;
Options' "Max cell length" is now "Max default cell length". gosmov0.0.7 → v0.0.8 (permission options, column-level and effective
permissions, securable search, a view's columns, per-set backup file lists,
and job-step fixes). BREAKING there:Table.AddColumn/DropColumnare
gone.
gossms v0.0.5
Release Notes
High-level summary of what changed in each goSSMS release, one entry per
version. For the detailed, file-by-file changes behind each entry, see
CHANGELOG.md.
v0.0.5 — 2026-08-04
A hardening release. The result path stops capping and starts costing
less, the editor learns that a character can be two columns wide, and the
two things that could destroy a user's work — an unprompted exit and a
config write over an unreadable password — are both closed. Updates
gosmo to v0.0.7.
New
- Output Column Metadata — the toolbar's
Metatoggle (also Query >
Output Column Metadata) lists each result set's columns and their
declared types in the Messages tab. - JSON cell values open in their own syntax-highlighted panel, the way
XML ones now do, instead of the plain text popup. - Exit asks about unsaved queries.
Ctrl+Qand File > Exit used to
discard every unsaved query panel silently; they now prompt per panel,
with a real Cancel that backs out of quitting altogether. - A panic no longer takes the terminal with it. Background and UI
goroutines both recover, restore the screen, and leave a stack trace in
the log file. - Saved passwords are bound to their connection. A password blob moved
onto a different entry inconfig.jsonno longer decrypts — previously
it could be retargeted at an attacker's host without decrypting anything. - Damaged config is recoverable: an unparsable
config.jsonis kept
aside before defaults are used, an undecryptable password is preserved
rather than overwritten, and a wrong-sized key file is an error instead of
being replaced. Ctrl+Con the results grid copies the selected cell or block, an
editor horizontal scrollbar, and a results status line on every tab.- Editable Members, Schema Ownership, and Owned Roles pages across the
Database Role, Server Role, and Database User Properties dialogs.
Fixes
Ctrl+Vdid nothing in the query editor after any execution that
left the results pane on Messages, the plan, or Results To Text — paste
was being routed to a read-only view.- A terminal paste was replayed as keystrokes, so newlines were lost
and an open IntelliSense popup committed a completion mid-paste. - Wide characters were eaten:
世界abtyped into a dialog field
rendered as世ab. Every second wide rune was overwritten by the
previous one's continuation cell. - A
GOinside a block comment or string silently scoped IntelliSense
to the wrong statement, and a/*inside a line comment left the
highlighter stuck in comment colour for the rest of the document. - A scrollbar drag in a Properties dialog could fire Script Changes —
the scrollbar and that button share a screen column. - Script Changes on the New Job / Schedule / Alert / Operator dialogs
failed with "not found", because a write-only path was still reading
back from the server. time(0)columns rendered as.0000000— the declared scale was
ignored.- A second Apply re-ran a successful create; a reopened dialog's first
click was swallowed; the status bar stuck on "Executing query…" after a
panel closed mid-run; a press on the Object Explorer scrollbar started a
drag; the "Show Value" popup was lost to any stray click.
Changes
- The Max Result Rows cap is gone. Every row a query returns is kept,
matching SSMS; the limit is now available memory, deliberately. - Keeping them costs much less — result-set cells are packed into an
arena rather than allocated one at a time: 800k allocations down to 100k,
and ~30% faster, over 50k rows. - The editor got fast where it was quietly slow: with a single buffer
chokepoint and a version counter behind the highlight and wrap caches, a
keystroke in a 10,000-line script went from 10.4 ms to 0.38 ms. - A rename is applied last in a Properties Apply or Script run, so
sibling pages — and generated scripts — still address the object by the
name the server has. - Mouse gestures now belong to whatever claimed the press until the
release, across the app, the property sheet, and the splitter. - Four oversized files split along the established draw/input seam; no
split candidates remain. Several duplicated Properties pages collapsed
into shared ones, and all six create dialogs onto one shell. gosmov0.0.6 → v0.0.7 (Agent handles andScripting(ctx), one-round-trip
space and row counts, file/filegroup backup and restore, and a broad
scripting-correctness pass).go-colorfulv1.4.0 → v1.4.1.- New
docs/journal.mdanddocs/open-threads.md, and a substantially
expandedARCHITECTURE.md.
gossms v0.0.4
Release Notes
High-level summary of what changed in each goSSMS release, one entry per
version. For the detailed, file-by-file changes behind each entry, see
CHANGELOG.md.
v0.0.4 — 2026-07-28
- Performed an interaction and reliability pass across the application.
- Unified all right-click menus and top menus under a shared ContextMenu/MenuBar control.
- Added syntax highlighting to the Execution Plan Viewer XML tab.
- Added path tab-completion to file dialogs.
- Connections now display their actual login identity.
- Tied connection lifecycle correctly to disconnect events.
- Fixed a stale-fetch race condition in the Detail Browser.
- Fixed IntelliSense cache lifecycle issues.
- Fixed several widgets firing events twice.
- Resolved multiple smaller Properties-related bugs.
- Updated gosmo to v0.0.6.
- Completed SQL Server Agent support in gosmo.
- Fixed a connection pool leak in gosmo.
gossms v0.0.3
Release Notes
High-level summary of what changed in each goSSMS release, one entry per
version. For the detailed, file-by-file changes behind each entry, see
CHANGELOG.md.
v0.0.3 — 2026-07-20
The big one so far: a full Execution Plan Viewer (estimated and actual,
graphical/tree/XML tabs), Detail Browser folders now backed by real
progressively-loaded server/database/table data instead of placeholders,
Backup and Restore Database dialogs with full option forms, four new
Properties dialogs (Table, Schema, Database Role, Database User) plus New
Database/New Login creation dialogs, a proper file-browser dialog, a
generalized completion popup framework, Check for Updates, Status History,
Object Explorer drag-and-drop and Take/Bring Database Offline/Online, and
context-gated (grey-out) menu bar and toolbar items. Updates gosmo to
v0.0.5 and tcell to v3.4.1, and fixes a real data race in the detail
loaders along with a long list of smaller interaction bugs (menu/tree
click flicker, context-menu divider navigation, offline-database
expansion, stale Databases folder, statement-boundary selection, several
Execution Plan Viewer issues, and a config-directory permissions bug).
gossms v0.0.2
Release Notes
High-level summary of what changed in each goSSMS release, one entry per
version. For the detailed, file-by-file changes behind each entry, see
CHANGELOG.md.
v0.0.2 — 2026-07-14
First publicly released build. Adds a toolbar and an SSMS-style results
status bar, SQL syntax highlighting with statement/batch selection and
word-wrap editing, full Server/Database/Login Properties dialogs, object
dependency viewing, background tasks (backup, index rebuild) with
progress and cancellation, encrypted saved passwords, and an automated
GitHub Actions release pipeline.
v0.0.1 — 2026-07-09
Initial internal milestone: the core TUI skeleton — Object Explorer,
Connect dialog with full gosmo authentication support, a basic T-SQL
editor and query execution, and local config persistence. Not published
as a GitHub Release.