Repository navigation
Releases
Releases · AMEST/mongo-tui
v0.10.0
What's Changed
- Query files — open a JavaScript query from a
.jsfile and save the active query back to
disk (Ctrl+L/Ctrl+Sin TUI, a toolbar action and the Files page in Web). TUI offers a
native file/folder picker next to the typed path, and both interfaces remember the ten most
recently opened or saved query files. by @AMEST in #17 - Raw mongosh output — select Raw (stdout) before running a script in TUI or Web
Script mode to display native shell output, includingconsole.logandprint, without JSON
parsing and with spaces and line breaks preserved. Web downloads raw results as.txt.
Choose Table, Tree or JSON and rerun the script to obtain structured documents again. by @AMEST in #18
Full Changelog: v0.9.0...v0.10.0
v0.9.0
What's Changed
Added
- Selected query execution — TUI and Web run the selected fragment, or the whole script
when nothing is selected, from the Run action or keyboard shortcut. The full editor draft is
preserved; history, document actions and result refresh use the executed fragment. - TUI editor navigation — Alt/Option arrows move by word, with Shift to extend selection.
Terminals that sendEsc+b/Esc+fare also supported. Cmd arrows require terminal mappings
to Home/End because Terminal.Gui 2.5 does not expose a Cmd modifier. - TUI result scrolling — wide results show a horizontal scrollbar alongside keyboard navigation.
- TUI query context — each tab shows its connection profile and database above the editor,
including the URI/default database when no database was explicitly selected. - TUI query timeout completion — suggest
maxTimeMS()in cursor method chains and place
the caret inside its parentheses for entering a timeout in milliseconds. Document editing
and automatic result refresh remain available for verified reads usingmaxTimeMS. - TUI query history — choose a saved connection, inspect the query, database, collection,
date, status and duration, and reopen it in a new tab without executing it. - TUI syntax highlighting — JavaScript/JSON tokens are colored in query and document editors
and history previews, preserving editing, autocomplete and selection. - TUI index details — show key fields, directions and uniqueness; require confirmation
before dropping an index and disable dropping the built-in_id_index.
Changed
- TUI file dialogs start in the user's home directory on macOS, Linux and Windows.
Exports suggest a portable filename with database, collection and timestamp; format changes
update the suggested extension while preserving custom paths. Existing SSH key paths remain unchanged. - TUI document dialogs grow with the terminal height and reserve more space for the document editor.
- Opening a collection in TUI immediately runs its generated
find({}).limit(50)query,
including opening it from the collection context menu. Closing a tab cancels its pending query. - TUI refreshes results after document insertion, editing and deletion by replaying the last
verified read in its original tab, preserving the editor draft and selected tab.
Fixed
- Plain arrows in TUI Results scroll immediately by one line or column, preserve the other
scroll axis and keep focus at content edges, including when the hidden caret is on a short line. - Text context menus in TUI query/results and document editors use English/Russian labels and
help text; the clear action is named Clear all text. Query menus update when the language changes. - Web
Cmd/Ctrl+Enterruns the query instead of inserting a blank line through CodeMirror's
default key binding; both this shortcut andF5capture the current document and selection. - Query errors in TUI and Web include the underlying cause instead of only a generic failure;
MongoDB URIs are redacted and diagnostics remain excluded from application logs. - Collection names are escaped as JavaScript string literals before generating TUI queries.
- Pending TUI queries do not run twice or steal focus after switching tabs; delayed results
are applied through the UI loop and never update a closed tab. - TUI index dialogs finish background loading and index creation inside nested windows
without hanging on progress; failures and cancellation restore the controls. - Enter selects the highlighted action in the TUI connection tree context menu instead of
dismissing it without running the action. Space still selects and Esc cancels. - Collection export failures are logged with database, collection, format and safe exception
diagnostics, including errors handled by the TUI dialog; filters, output paths and credentials
stay out of logs. - MongoDB Tools use the selected transfer database in the URI and preserve the original
authentication source, avoiding conflicting database options and authentication failures.
Full Changelog: v0.8.0...v0.9.0
v0.8.0
What's Changed
Added
- Local web interface — run
mongo-tui web --opento browse databases and collections,
execute JavaScript, view Table/Tree/JSON results, edit documents, manage indexes and use
the AI assistant in a browser. The host listens only on127.0.0.1(port8765by default).
Web assets are embedded in the existing executable; no separate frontend deployment is needed. - Web sign-in — master-password authentication or a single-use launch link for first setup
and keyring/local-key-file modes, with expiring browser sessions, sign-out and revocation
when security settings change. - Web user management — database and cluster permissions, user editing, password generation
and one-time credentials, with localized errors, current-user protection and cancellation. - Web transfers and history — JSON array/JSON Lines import, canonical JSON Lines export,
downloading displayed query results, and reopening saved history entries without executing them. - Query deadlines — a shared Settings → Queries timeout for TUI and Web: 30 seconds
by default,0to disable. Web queries can also be cancelled from the workspace. - Application logs — a Web log viewer and persisted logging-level settings in both clients,
with live updates and a diagnostic environment override. - Co-author credit —
--versionand Help → About credit Medvedev Denis (medved91)
below Copyright in English and Russian.
Changed
- Creating a database now asks for its first collection and creates it on MongoDB immediately.
Saved connections stay visible in the explorer after disconnecting. - Both clients share document-editing and permission models, connection preparation and
localization keys. Document text, copied data and default JSON exports use Canonical Extended JSON. - Framework-dependent builds now require the ASP.NET Core 10 runtime as well as the .NET 10 runtime;
self-contained release archives include both. Source builds default to version0.8.0.
Fixed
- Nested TUI dialogs apply asynchronous results without hanging on saving/loading or requiring
another keypress, including connection forms and document/user operations. - Opening a document reloads it by its original
_idthrough the driver, preserving numeric
types lost in shell output. Editing is refused when Extended JSON cannot preserve the loaded BSON. - Document actions keep the source of the executed query. Web refresh after saving uses the
successful query snapshot and preserves an unsubmitted editor draft. - Web pagination commits the page only after a successful read, keeps the applied filter while
preserving a draft, and retains the previous results after errors or cancellation. - Reaching the Web tab limit displays an error without ending the browser circuit; editor
selection remains visible in the active line. - Security initialization checks persisted state before creating new key material. Failed Web
password attempts do not lock an encryption key already unlocked by another session.
Known limitations
- Saving replaces the complete document without detecting writes made after the editor opened;
a concurrent update can be overwritten. Driver reads also normalizeDouble(-0.0)to+0.0,
which is then persisted on save. See BSON editing limits. - Cancelling or timing out a write does not undo changes already accepted by MongoDB.
Web transfers are capped at 32 MiB and exports at 10,000 documents; SOCKS transfers remain unavailable.
New Contributors
Full Changelog: v0.7.0...v0.8.0
v0.7.0
What's Changed
- User management — manage MongoDB users from the tree context menu: right-click a database,
or a connection for theadmindatabase. Create, edit and delete users, assignread/
readWrite/dbOwneraccess per database and cluster roles (readAnyDatabase,
readWriteAnyDatabase,clusterAdmin,clusterManager,clusterMonitor,root),
generate passwords, preserve unmanaged roles on edit, and copy the password or a ready-to-use
connection string after creating a user or changing a password.
Passwords and connection strings are shown once and are never persisted or logged.
Full Changelog: v0.6.0...v0.7.0
v0.6.0
What's Changed
Added
- Security modes — choose on first launch how the encryption key is protected: a master
password (default), the OS keyring on macOS and Windows, or a local KEK file with user-only
permissions. The mode can be changed later in Settings → Security…; switching modes
re-encrypts all saved secrets in one transaction. - Keyring integration on macOS and Windows via Latchkey. Linux supports the master-password
and local-key-file modes. - Reset secrets in the security settings removes saved connection passwords and the AI API
key, then lets you choose a new security mode. - Existing master-password installations are detected automatically and keep working without
re-entering secrets. - Connection test feedback — show a localized running status immediately and disable
Test until the request finishes. Results include a success/error label and error details;
successful tests are green and errors are red.
Changed
- Unlock secrets (
F8) and Change master password (Ctrl+P) are available only in
master-password mode. - Testing a connection no longer requires or fills in a profile name; a name is still required
when saving. Connection strings and SSH settings remain validated. - Connection tests are cancelled after 10 seconds, with a localized timeout message and
Test enabled again.
Fixed
- Automatic unlock validates the key against every stored connection password and AI API key
before accepting it or migrating legacy credentials; a mismatched key leaves secrets locked. - Resetting secrets also removes passwords embedded in legacy connection URIs. Connection forms
strip URI credentials even when separate login/password fields are already populated, keeping
explicitly entered values and filling missing fields from the URI. - Connection form errors and test results appear below all fields and above the action buttons,
without overlapping authentication options. Status changes repaint without another keypress. - Locked-secret errors use the selected interface language in both the connection form and
connection manager. - Connection test failures, including network timeouts, are displayed in the form with their
cause instead of only being logged.
Full Changelog: v0.5.3...v0.6.0
v0.5.3
Fixed
- The connection manager shows and enables Copy URI only when a saved connection is
selected; the button is hidden when no connection is selected or the list is empty.
Full Changelog: v0.5.2...v0.5.3
v0.5.2
Added
- The AI assistant receives the active database, the database's collections and the sampled
field names with their BSON types, so it can generate queries against the real schema. - The AI assistant dialog shows a requesting state and disables Ask while a request is
in flight.
Changed
- Release archives ship without debug symbols: publishing disables
DebugType/
DebugSymbolsand removes leftover.pdbfiles from the artifact directory.
Fixed
- In the AI assistant dialog, Enter in the prompt runs the request instead of closing
the dialog. - The AI assistant runs the request off the UI thread and applies the response from the
dialog's main loop, so the answer is shown and the dialog no longer stays stuck on
Requesting….
Full Changelog: v0.5.1...v0.5.2
v0.5.1
What's changed
- Running a query uses Ctrl+R (or
F5) instead ofCtrl+Enter; some terminal emulators,
notably on macOS, interceptCtrl+Enterfor their own context menu, and report
Shift+Enteras a plain newline. - Saving or testing a connection fills empty login and password fields from credentials
embedded in the URI, so a pasted connection string works without the From URI button.
Full Changelog: v0.5.0...v0.5.1
v0.5.0
What's Changed
Added
- Create database and collection — right-click a connection to add a database, or a
database to create a collection. A new database stays in the tree until refresh or
reconnect; creating its first collection persists it on the server. - New query — right-click a database to open an empty query tab bound to it, or a
collection to open a tab with a ready-to-runfindquery, as with a double-click. - Empty database discovery — the tree also lists databases known from the connection
URI, authentication source and granted privileges that the server's catalog omits. - Keyboard shortcuts dialog — Help → Keyboard shortcuts… lists every command and its
hotkey, including why copy usesCtrl+Con macOS.
Changed
- Collection query tabs start from
db.getCollection(...); mongosh already runs with the
tab's database, so thegetSiblingDBwrapper is no longer inserted into the template. - Index creation uses Unique and Background checkboxes instead of a
y/ntext field.
Fixed
- Preserve the original document id during editing and deletion; reject id changes and
report missing documents correctly, including unchanged replacements. - Resolve document actions from the executed query's database and collection. Disable
editing and deletion for ambiguous scripts, projections, aggregations and results without ids. - Rotate the master password, connection secrets and AI API key in one SQLite transaction.
Roll back on failure or cancellation and serialize concurrent secret storage operations. - Extract and encrypt credentials from full connection URIs before saving; migrate legacy
profiles after unlock. Remove scripts, raw diagnostics and exception contents from logs. - Copy the selected text to the system clipboard with Ctrl+C in the editor, results and
dialogs. When the platform clipboard is unavailable (headless Linux, SSH withoutxclip),
the text is written through the OSC 52 terminal escape sequence instead of being dropped.
Full Changelog: v0.4.0...v0.5.0
v0.4.0
What's Changed
Added
- Query editor autocomplete — press
Ctrl+Spaceor choose Query → Autocomplete
for database, collection and field names, including dotted paths through nested objects
and arrays of documents. - Database selection — completing
db.lists databases and inserts
db.getSiblingDB("…"); collections can then be selected after the next dot and are
inserted throughgetCollection("…"), including names that overlap with shell methods. - Method completion —
db.getsuggestsgetSiblingDBandgetCollection; collections
offerfind,findOne,countDocumentsandestimatedDocumentCount. Supported cursor
chains offerlimit,skip,sort,toArrayandcountafterfind(...)andlimit(...).
Method suggestions open automatically while typing a prefix or a dot after a supported call
and require no database request. - Completion controls — filter suggestions while typing, choose with
↑/↓, insert
withEnter/Tab, and dismiss or cancel loading withEsc. Method completion inserts
parentheses and places the caret inside arguments, preserving existing call arguments
when correcting a method name.
Changed
- Collection fields are sampled from up to 20 documents, with nested paths up to eight levels.
The field cache is scoped to the connection, database and collection, expires after one
minute, and is cleared byF9or running a query.
Fixed
- Query execution now selects the tab's database before every run, so
db.getCollection(...).find({}).toArray()works without an explicitgetSiblingDB(...).
Explicit database selection in the script still takes precedence; tabs without a selected
database retain the connection's default database. - Completion replaces the entire name when the caret is inside a token, correctly handling
escaped quotes, backslashes and Unicode escapes while preserving the surrounding query. - Pending completion requests are cancelled and stale suggestions discarded when editing,
changing focus, switching or closing tabs, refreshing, or disconnecting.
Full Changelog: v0.3.0...v0.4.0