Start Pro Trial
29 Releases

Release History

Track all versions, updates, and improvements to VisuaLeaf.

v1.0.2237

Latest
August 24, 2026

VisuaLeaf v1.0.2237 Release Notes

Release Date: August 24, 2026


Headline: One-step connect for SQL and Redis, connection hints that match your engine, and a trial that ends when it says it does

  • Save & Connect now works for SQL and Redis. Saving a new connection and opening it is one button, the way it has always been for MongoDB โ€” previously you saved, closed the dialog, found the row in the sidebar and connected it by hand. The button steps aside when the connection is already open, and if the connection fails it says so and tells you the connection was still saved, so you never re-type it.
  • The New Connection form proposes details that belong to your engine. Choosing MySQL used to suggest a PostgreSQL URL, port 5432, a database called postgres and a user called admin โ€” four wrong hints on the one screen where you're deciding what to type. Every engine now shows its own: MySQL reads mysql://user:pass@localhost:3306/mysql, SQLite shows a file path, Materialize its own port. Where an engine has no conventional login โ€” Azure SQL, Azure Database for PostgreSQL, SQLite โ€” the box is simply left empty rather than borrowing another engine's. Fixed on the New Connection screen and the older connections dialog alike. (SOZO-1437)

-Crucial Bug on License Resolved.

  • Release notes are navigable. Both What's new and the full release history now carry a Contents bar: jump straight to a section, and see which one you're reading as you scroll.

Notes

  • If your trial already ran out, the switch to Community Edition happens the next time the app has an internet connection โ€” on the next launch, or within the hour if you leave it open. Until then the app keeps working exactly as it did.
Read the full v1.0.2237 release notes

v1.0.2234

August 21, 2026

VisuaLeaf v1.0.2234 Release Notes

Release Date: August 23, 2026


Headline: Rebuilt Data Sync, 32 SQL Engines, and AI That Designs Your Schema

  • Data Sync, rebuilt โ€” continuous replication between any pair of MongoDB and SQL connections, in any direction, with live change capture, a cutover checklist that refuses to say "ready" when it isn't, and reconciliation reports that prove the target still matches the source.
  • 32 SQL engines you can actually pick. Ten are new โ€” TimescaleDB, Neon, Supabase, Azure Database for PostgreSQL, Citus, Azure SQL Database, CrateDB, QuestDB, RisingWave and Materialize โ€” but the bigger win is that twelve engines you already had were invisible from the screen most people start on. Every picker in the app now shows the same list.
  • AI that designs your database and builds your charts โ€” describe what you're building and get a real ERD on the canvas, or describe a chart in words and get it built, query and all.

Alongside those: customisable keyboard shortcuts across roughly 180 commands, a rebuilt mock-data generator, folders in every saved-items library, a dockable Data Viewer, in-place row filtering in every grid, multi-line MongoDB queries with Shift+Enter, a much faster export pipeline, a smoother connection tree that now shows Supabase, Neon, Aurora and the other managed services by their own logo, and a 70 MB smaller app.

There's also a set of fixes for numbers the app used to report that were simply not true, and the Notes at the end matter this time โ€” every saved diagram is rewritten on first launch, and SQLite now enforces foreign keys.


Data Sync, Rebuilt

Continuous replication between any pair of MongoDB and SQL connections โ€” PostgreSQL, MySQL/MariaDB, SQL Server and Oracle โ€” in any direction.

What you can see

  • Reconciliation reports that prove the target still matches the source, at three depths: count only, sampled content checksums, or a full document diff naming the exact mismatched ids. A count on its own can't tell a lost write from a spurious one; the checksum tier can.
  • A cutover readiness checklist โ€” initial copy, change capture, replication lag, dead letters and verification, each pass or blocked, with the remedy printed on every blocker. It is deliberately pessimistic: one pending dead letter blocks cutover, and that isn't configurable.
  • Schema drift raised distinctly โ€” a dropped, renamed or recreated source collection, a dropped database, a missing target collection, a changed field type are each reported as themselves, with the choices available (re-seed, repoint, accept).
  • A dead-letter queue listing records that couldn't be written, inspectable and replayable.
  • Alerting and health for replication lag, dead-letter growth and clock skew.

What you can do

  • See the exact statements VisuaLeaf would run against your server before you consent to them โ€” log-based change capture for SQL sources shows you every statement with its current value and its undo, one checkbox per consequence, and tells you afterwards what actually happened.
  • Confirm a clean drain before cutover. After you stop your own writers, VisuaLeaf watches the source, confirms the silence, freezes the job and verifies. Every response says explicitly what it is not claiming.
  • Re-copy a single collection of a running job without resetting the whole thing โ€” previously that meant hours of re-copying collections that were never wrong.
  • Prepare a reverse sync for rollback after cutover. It's created stopped, and never guesses at an inverse transformation.

Speed, measured on one machine before and after: transformation scripts went from 1,993 to 17,326 documents/second, and with a 5,000-row lookup from 46 to 14,233 documents/second. Target writes went from 1,134 to 26,051 documents/second. The initial copy is now split across threads rather than running down one cursor. Refreshing a list of 50 sync jobs went from 601 server round-trips to 4.

Job limits are now checked when you save the job, so an unworkable configuration is refused while you're still looking at the form.


SQL: More Engines, and Controls That Know What Your Engine Can Do

The engine list

  • Ten new engines โ€” TimescaleDB, Neon, Supabase, Azure Database for PostgreSQL, Citus, Azure SQL Database, CrateDB, QuestDB, RisingWave, Materialize. All ten reuse a driver you already have, so there's nothing new to download.
  • Twelve engines became reachable. The main New Connection screen offered ten SQL engines while an older dialog offered twenty-two. YugabyteDB, Redshift, both Aurora flavours, both RDS flavours, Percona, H2, DB2, Firebird, HSQLDB and Derby were fully supported and invisible from the screen most people start on. All six pickers in the app now show the same list โ€” 32 engines.
  • A searchable, grouped picker with a live count. Typing "postgres" surfaces Neon, Supabase, Timescale and CrateDB. Cards lead with the product and demote the vendor, so "Amazon Aurora (PostgreSQL)" and "Amazon Aurora (MySQL)" are no longer two identical-looking truncated cards.
  • Nine new brand logos; engines with no official mark get a distinct shape rather than a generic cylinder.
  • A connection shows the mark of the service it actually talks to. A Supabase, Neon, Aurora, Redshift, Timescale, ClickHouse Cloud, TiDB Cloud, CockroachDB Cloud, YugabyteDB or Azure database is picked out from its address and gets its own logo in the sidebar, the connection lists, the tabs and the profiling screen โ€” instead of the plain elephant or dolphin you got for choosing "PostgreSQL" or "MySQL" in the form, which is what those services tell you to pick. Hover the icon and it names both: "Supabase (PostgreSQL)". A self-hosted server is unaffected, and picking a branded engine yourself always wins over the address.
  • Pasting a connection string recognises the host, not just the scheme โ€” a .neon.tech URL lands on Neon rather than generic PostgreSQL. SQL Server, Oracle and DuckDB URL shapes that the product's own output used to reject now parse correctly.

Controls that are honest about your engine

Every create, drop, alter and truncate used to be composed without consulting what the engine could actually do. Now:

  • Menu entries an engine can't perform are disabled before you click, and the description under the entry becomes the reason. On SQLite, Create New Database reads "An SQLite database is a single file โ€” create a new connection pointing at a new file path instead." No tooltip to hunt for.
  • A brand-new Create Table tab used to be refused on 8 of 32 engines before you touched anything, because it opened with options those engines don't accept. Fixed.
  • Foreign Keys, Indexes and Auto-increment tabs explain themselves where unsupported, instead of silently vanishing.
  • Redshift foreign keys are now offered โ€” they were being falsely refused โ€” with the honest warning that Redshift stores and trusts them but never enforces them, so queries can silently return wrong results.
  • Every drawback is listed while you're choosing the engine, not discovered after a failure, and everything an engine can't do is reported at once rather than one failure at a time.
  • Sidebar folders that could only ever be empty on a given engine no longer appear at all.

Connection settings and sharing

  • Custom connection settings for SQL databases. Two concrete wins: Azure MySQL and PlanetScale could not be connected to at all before, and a default modern MySQL server would fail with an opaque key-retrieval error. The settings editor suggests the right options for your actual driver.
  • Choosing a driver version now takes effect on reconnect instead of silently requiring a full app restart.
  • Sharing a SQL connection works. The Share menu had never once succeeded. A read-only share is genuinely read-only โ€” schema changes, table alterations, row edits, database create/drop and all user management require write access โ€” and it says READ-ONLY on the screen with Run, Save and Drop greyed out, instead of letting you type a query and handing back a bare permission error.

Keyboard Shortcuts, Now Yours

  • One Keyboard Shortcuts window listing roughly 180 commands across the whole app with their real key combinations, grouped by area and searchable โ€” matching the command name, the group, and the rendered combination, so you can search for the keys you remember pressing.
  • Rebind almost anything. Pencil, press your keys, Set, Save. Your bindings persist and come back on every window, popout and launch. Live preview as you go, closing without saving rolls back, and there's Reset to defaults per row and globally.
  • Conflicts are explained, not just blocked. A clash in the same context warns you and unbinds the other one; an overlap across different contexts is shown as neutral information โ€” "Both keep working โ€” the focused view wins."
  • While you're recording, every shortcut goes dead, so pressing Ctrl+W to assign it doesn't close your tab.
  • Keys that can't be reassigned carry a padlock and the reason โ€” structural navigation and combinations owned by your OS or the editor.
  • Menu labels now tell the truth. They render your own rebound keys, and several were simply wrong before: Redo was advertised as Ctrl+Y when it is Ctrl+Shift+Z, Batch update was mislabelled, and Refresh literally displayed the text "TODO ACTION".
  • Three separate cheat-sheets (global, Shell, GridFS) are now one window; the Shell and GridFS buttons open it pre-filtered.

AI That Designs Schemas and Builds Charts

  • Describe an application, get a database design. With a diagram open, describe what you're building and the assistant draws real tables โ€” it reads your current canvas first, including existing tables, column types, keys and the engine. Ten domain templates (e-commerce, B2B SaaS, blog/CMS, CRM, booking, LMS, project tracking, inventory, social, HR) and six cross-cutting patterns (multi-tenancy, soft deletes, audit trail, roles and permissions, versioning, localisation) back it up.
  • Merge is the default โ€” new tables are drawn and existing tables gain columns without losing anything. Replace never happens silently; it warns and waits.
  • It reports what it actually did โ€” "added 3 tables, added 5 fields to 2 existing tables, drew 4 relations", or "Everything suggested is already on the canvas โ€” nothing changed."
  • Describe a chart and get it built. Works for both MongoDB and SQL: it picks the chart type, writes the query or pipeline, maps fields to axes and series, sets titles and axis labels, and can modify a chart you already have.
  • Nothing touches a live database โ€” materialising a design is a separate, deliberate step.
  • The model picker is honest again. Claude Opus 5 was added, five withdrawn models removed, and every entry now shows a readable name with its provider model id. One was outright wrong โ€” it said Haiku 3.5 while actually addressing Haiku 4.5.

Mock Data Generator, Rebuilt

An empty blueprint now opens on a chooser with three routes:

  • Ready-made datasets, with entity and row counts shown up front.
  • Realistic values โ€” a searchable catalogue showing each generator's label, its path, and a live example.
  • Read from tables you already have โ€” pick which ones to import, rather than importing a whole database and deleting thirty entities by hand.

Plus links between collections, written as a sentence: "Each orders row stores a key from [customers โ–พ] [its primary key โ–พ]". You choose the distribution โ€” evenly, clustered, or a few get most, which is what makes a group-by look believable โ€” along with one-each relationships, self-referencing hierarchies that can't loop, two-pass mutual references, and a blank percentage.

A live sample preview updates in a bottom panel while you edit, so a cycle or an impossible unique column surfaces before a million rows are written. Every run finishes with a copyable seed that reproduces exactly the same data. Generating for a whole database now works when you don't pick any collections, instead of silently producing nothing.


Reading Your Data

A Data Viewer you can dock. Open any cell, row, document or multi-row selection in a floating panel โ€” right-click, or Ctrl/Cmd+Shift+V. In the SQL grid, double-clicking a truncated read-only cell opens it too. MongoDB values render in shell syntax and SQL JSON columns are pretty-printed, with a wrap toggle, Copy, and its own Ctrl+F. It's modeless, so the table behind it stays scrollable and clickable โ€” and if you drag it to the edge of a panel, or use the four pop-out arrows, it becomes a real Data Viewer tab in its own split.

Filter rows in place, in every grid. "Show/Hide Columns" is now "Columns & Filters". Every column gets a condition (=, โ‰ , >, โ‰ฅ, <, โ‰ค, contains, starts with, regex, in, exists, is null) and a value box, filtering what's already loaded with no round-trip and no query rewrite. The footer says exactly that: "Showing X of Y loaded rows ยท this page only, query unchanged." Matching mirrors what the cell actually shows โ€” ObjectIds as hex, dates matching both the displayed and ISO forms, SQL NULL cells matching "NULL" โ€” and 64-bit ids compare exactly, so neighbouring Snowflake ids stay distinguishable. Your filters survive a restart with the tab.

Multi-line queries in MongoDB. Press Shift+Enter in the query field to add a line, the same way Compass does โ€” Enter still runs the query, so the muscle memory you already have is untouched. As soon as there's a second line the query bar reflows: the editor gets its own full-width row with the Run cluster and actions moving up into a header strip above it, and it grows as you type. Delete the newline and it slides back to the single-line bar. Formatting a long $or or a nested $elemMatch across several lines no longer means squinting at one long strip.

Oversized results warn instead of freezing. A raw view over too many documents now says "Too large for the BSON view โ€” this result holds 12,500 documents, past the 500 this view renders at once" with a Display anyway button. It used to freeze the app with no warning.


One Saved-Items Library, Six Screens

Queries, Scripts, Charts, Dashboards, JSON Schemas and Visual Schemas now look and behave identically. Every capability below is on all six, where each previously had a different subset:

  • Folders and subfolders anywhere, with drag-and-drop for a single item or a whole multi-selection, and a "Drop here" chip. Folders are genuinely new for Dashboards, JSON Schemas and Visual Schemas.
  • Inline rename โ€” the row label becomes a text box. New for scripts, dashboards, JSON schemas and visual schemas.
  • Duplicate, new for JSON schemas and visual schemas.
  • Multi-select with Ctrl/Shift and bulk delete behind a single confirmation.
  • Search, Name/Date sort, keyboard navigation, and smooth scrolling in large libraries.
  • A live connected/disconnected dot on every row, with a deleted connection marked in red โ€” a query whose connection is gone has Run greyed out and tells you why.

Export & Import

The whole export pipeline was measured and reworked.

  • Exports start immediately. A 146-collection export used to write nothing at all for its first 18 seconds.
  • Progress is honest. The screen used to show 0 B / 5.23 MB at 0% โ€” document counts were being formatted as bytes โ€” and then reach 100% while three collections were still running. It now counts the right thing and shows real bytes written and observed MB/s.
  • One big collection no longer holds up the run. On a measured 10.36 GB export, a single collection took 93% of the wall-clock with three of four workers sitting idle. Large collections are now split across threads.
  • Thread count is automatic, scaled to your machine instead of a flat four, and the badge reads "auto threads" rather than "0 threads".
  • Export traffic is compressed for non-local connections โ€” dump data typically compresses 3โ€“5ร— โ€” and compression itself is about 2.5โ€“3ร— faster for files 10โ€“15% larger.
  • Restores are faster, writing in much larger batches and reading while inserting.
  • Re-export just the failures. "57 collections failed on the last run" now comes with a button that narrows the job to exactly those; re-running all 146 used to be the only option.
  • A failed job no longer claims progress โ€” the fake "100 / 100 documents" is gone โ€” and resume is no longer offered when there's nothing to resume from.
  • The export form scrolls, so the lower half is reachable.
  • Restore can select a dump folder. The picker only accepted files, which made restoring a BSON dump impossible.
  • A restore into a database that doesn't exist yet is checked up front โ€” VisuaLeaf tells you while you're configuring the job whether your database user is even allowed to create it.
  • The duration estimate accounts for chunking, so a database with one dominant collection is no longer predicted at that collection's full duration no matter how many threads you give it.

Numbers You Can Trust

A recurring theme this release: several readouts were confidently wrong, and are now either correct or honest about not knowing.

  • "Not available" instead of a zero nobody could justify. Views, Sequences, Events, Packages, Triggers and Constraints folders now say when the engine can't be asked โ€” this is not an empty list; nobody could look.
  • Active connections. The monitoring panel was showing the server's connection ceiling under a label reading current, so an idle server reported hundreds of connections that did not exist. It now shows the real number, "Not reported", or "Not available on this engine".
  • Replication lag never invents a number โ€” you get a duration, "Unknown", or "Clock skew", each explained.
  • Live sync totals. A sampled stream now says "covers 12,043 of 8,300,000 events โ€” roughly 1 in 689 shown". A 50,000/second job was previously reported off by three orders of magnitude.
  • Dead letter counts are the real total, not how many fit on the page.
  • Index analysis works on sharded clusters. A query that scanned every document on both shards previously produced no recommendation at all, and the index a shard actually used was reported as "No Index Used".
  • Explain results are real. A plan you ran yourself reported 0 examined, 0 returned and 100% efficiency on a plan that scanned 5,000 documents โ€” and, worse, silently recommended the wrong index direction. It now reads 5,000 / 1,667 / 33%.
  • New index health badges โ€” UNUSED and REDUNDANT, with hover reasons and the caveat that usage counters are per-server and reset on restart. They're advisory by design: a unique index with no reads is a caution, not a suggestion, because dropping it changes which writes are accepted.
  • Slow pages name their phase. Jumping to the last page now says "Counting documents" or "Loading documents", with a live timer, a Cancel that works, and a note that large collections can take a while to count. Impatient clicking no longer stacks a full scan each time, and if the server can't kill the operation the app says so rather than dropping it.
  • The web widget no longer reports "Schema saved successfully!" for a save that never happened.

Improvements

Scrolling through your data

Shared by the MongoDB collection view, SQL query and table results, aggregation results and the Redis key browser.

  • Rows no longer go blank during a fast scroll. Fling the list and you used to get an empty band where rows should be until it settled. Rows are now redrawn every frame, so the list stays populated the whole way down โ€” only a scrollbar yanked across the track pauses at all, and only until it stops.
  • Scrolling is smoother, most noticeably on wide documents and while the query builder is open. Each visible row used to be rebuilt from scratch on every scroll movement; now only the row you're hovering and the row you've selected do that work.
  • Expanding or collapsing a large selection is immediate. With many rows selected this used to stall noticeably before anything moved, and so did jumping to a search result in a long document.

Connections & the sidebar

  • A SQL table row opens immediately. Its columns, indexes, foreign keys and constraints are fetched the first time you expand it, rather than as part of loading the tree around it.
  • PostgreSQL connections stopped dropping after about half an hour. A single slow health check used to close the pool and end your whole session; the routine trigger was the connection pool's own recycling. A genuinely unreachable server is still reported within about fifteen seconds.
  • "Reveal in Sidebar" on tab right-click, plus clickable breadcrumbs on eight screens that highlight the connection, database or collection in the tree.
  • A disconnected screen is actionable. It used to read "SQL connection e76d2829-โ€ฆ is not connected. Please connect first." with nothing to click. Now: a plug icon, a plain sentence, a Connect button โ€” and it retries whatever failed once you're connected.
  • Advanced driver properties are editable. This setting existed, was applied by the driver, and no screen referenced it โ€” the only way to set one was to edit stored data by hand, and the next Save wiped it.

Redis

  • Undo on every edit, with a visible Undo button on the toast, faithful down to per-field expiry and sorted-set scores โ€” and deliberately withheld where undoing would damage data you never touched.
  • A New Key dialog, multi-select with bulk delete, rename with a collision check, and per-field TTL for hashes.
  • The ACL page now matches the standard user-management design, with stat tiles, status/commands/selectors columns and Allow all / Deny all.

Editors & the shell

  • SQL autocomplete offers the current statement's own columns. Typing a WHERE clause used to offer table names and not one column of the table being read.
  • Query history feeds autocomplete in the MongoDB query field, tagged history and showing "Last run ยท N runs ยท starred". Picking one stays undoable.
  • Run fires the statement you're actually on. With the cursor on a comment line nothing ran at all, and when two statements shared a line it always ran the first.
  • Large scripts paste instantly โ€” 200 KB of SQL used to take 11.6 seconds.
  • Shell sessions no longer leak. Idle sessions were never being cleaned up, and enough of them made the shell unusable.
  • if (count) behaves correctly on an empty collection. Counts arrived in JavaScript as objects, which are truthy even at zero, so a script checking "did I find anything?" took the wrong branch. sleep() works, autocompletion no longer blocks on a slow cluster, and two errors logged on every shell open are gone.

Diagrams & schemas

  • Export a diagram as PNG, black-and-white PNG or SVG. The SVG is interactive when opened in a browser โ€” hover a field to highlight its relations โ€” and embeds its fonts so it opens anywhere.
  • Materialize lists every problem at once, catching blank table and column names with row numbers and nested paths before any statement is generated.

Compare

  • A "Simple" mode, now the default โ€” pick source and target from a picker instead of the drag canvas. Visual mode gains click-to-link, and naming is optional until you save.
  • Compare stopped reporting differences that don't exist. Keys were compared as text while the server sorted them as data, so numeric keys desynchronised immediately and everything after the first numeric key was mis-reported.
  • "Repair" no longer reports success when it did nothing, and re-running a repair no longer duplicates documents.
  • When a sort exceeds the server's memory limit, Compare now tells you to create an index on the match keys instead of failing opaquely.

Charts & maps

  • Map charts load dramatically faster โ€” map data is 89% smaller, taking about 41 MB off the download. Japan keeps all 1,158 prefecture parts. Asia and India were genuinely over-detailed and do lose some small islands at this resolution.

Elsewhere

  • A "What's new" panel after an update โ€” on a genuine version increase, never on a fresh install, and it waits for a clear screen rather than stacking on another dialog.
  • A 14-day free trial at signup, replacing the anonymous 7-plus-7 arrangement. "Upgrade" is now "Activate License", so people who already bought one have somewhere to enter the key, and a machine that has already used its trial is offered Sign In rather than a promise the server will refuse.
  • The app is 70 MB smaller โ€” 675 MB to 605 MB on macOS, with the installer down from 408 MB to 354 MB.
  • GridFS filename and metadata save together. They were separate operations that clobbered each other, so either order lost data. Errors now name the actual problem โ€” duplicate name, invalid name, missing file โ€” and the dialog stays open on failure.
  • Light-mode fixes โ€” autofilled login fields were white-on-white, drag previews carried colours that broke theme switching, and the Redis connection dialog, the Materialize preview pane and the Import Script modal were all dark-only. Two further passes caught the rest: the Create Table screen (its form, tabs, SQL preview and error bar all rendered dark on a light page), the Delete Connection dialog, the right-click menus and environment colour picker in the connection sidebar, the failed-query panel in the SQL editor, the stored-procedures list, the Create/Drop Database dialogs, Table Info, and the row hovers and paging buttons across the SQL grid, Edit Row, Batch Update and foreign-key preview.
  • Long foreign-key error messages wrap instead of stretching into one unreadable line.

Fixes Worth Naming

  • Dropping a table could drop the wrong table. An unqualified drop resolved through the session's search path, so dropping reporting.orders silently and successfully dropped public.orders instead. This is the most serious fix in the release.
  • Materialising a diagram failed on columns that looked fine. Any nullable text, JSON, boolean, date or timestamp column produced a syntax error and rolled back the whole operation. Integer columns always worked, which is why it hid for so long.
  • Shell aggregations ignored the types you typed. An aggregate() run from the shell had every ISODate(...), ObjectId(...) and regular expression in its pipeline flattened to plain text before it reached the server โ€” so {$gt: ISODate("2026-01-01")} compared text against a date field and came back with zero rows and no error, and a $not: /โ€ฆ/ was rejected outright. The shell now sends exactly what the aggregation builder sends, and the pipeline keeps its types through paging and through closing and reopening the workspace.
  • Saved aggregations quietly returned the wrong rows. A date in any stage other than $match was flattened to plain text, so the restored pipeline compared text against a date field โ€” which MongoDB answers with wrong rows rather than an error. Browser caching masked it, so it only appeared when you opened the same saved workspace on another machine.
  • Opening one tab wiped every other tab's saved state. Opening Generate Mock Data or Redis Security made the entire workspace fail to save, and every open tab lost its state.
  • Imported JSON schemas lost every field name โ€” every property read "New Entity", and saving collapsed them onto one entry.
  • Dialogs in the embedded schema widget opened behind the canvas. Import from Script and every other dialog appeared centred and looked perfectly normal, but no click reached them โ€” the diagram was painted over the top. They also had no route back in: the Import from Script button vanished as soon as the table list had anything in it, which is every sample session and every session after your first import. Both fixed, and a closing dialog can no longer swallow a click on its way out.
  • Pasting the wrong JSON into Schema Import produced a table called "undefined". A file whose columns don't carry a table and a name โ€” the usual result of exporting from a different tool โ€” built one nameless phantom table and then crashed relationship detection. It now stops and tells you what shape it expected.
  • Renaming a diagram card broke its connector lines permanently, and pressing Escape during a rename silently kept the typed name anyway.
  • A column added minutes ago stayed invisible through any number of refreshes, for up to five minutes.
  • A 146-collection export reported 57 failures when none had failed. One GridFS bucket poisoned every collection processed after it; the files on disk were correct the whole time.
  • A dump that died mid-write left a truncated file behind โ€” and a truncated dump is indistinguishable from a complete one, restoring without complaint and quietly missing its tail.
  • Copying between two SQL databases built the wrong column types. PostgreSQL's type names were being sent to MariaDB, HSQLDB and QuestDB โ€” an outright failure on the first two, and on QuestDB accepted and then silently wrong.
  • Engine picker cards were unclickable โ€” they were rebuilt mid-click, so the browser never registered it. They looked alive and did nothing.
  • Saving a connection could permanently break it โ€” switching engines kept the previous engine's pinned driver, so a MySQL connection could be saved with a PostgreSQL driver that fails at connect time.
  • "Disconnect all 0 connections?" โ€” with two SQL connections open and no MongoDB one, the confirmation said exactly that and then disconnected nothing.
  • A modal's backdrop covered the title bar, and because the bar was still clickable underneath, the Workspace Manager could stack duplicate copies of itself.
  • Redis database nodes always opened database 0, and Redis rows opened the MongoDB connection dialog.
  • A diagram offered you every schema's tables. Opening an ERD on one PostgreSQL or SQL Server schema listed the tables of every other schema in the database alongside it, so public.orders and audit.orders sat in the same picker with nothing to tell them apart. The list is now the schema you opened. Engines that have no schemas, and diagrams saved before this, are unchanged.
  • Two diagrams could overwrite each other, expanding one schema's Tables fold re-opened it on another's row, and Tables Info listed every schema's tables while refusing to open a second tab.
  • Deleting a rule in the sync wizard made the rule below it inherit the deleted one's filter.
  • Initial-sync progress bars never moved โ€” the progress stream listened for the wrong signal for the entire life of the feature.
  • Dead-letter replay reported success without replaying anything.
  • Cancelling an aggregation now tells you truthfully whether it stopped.
  • Server errors are readable. They used to render as a single word โ€” "IllegalArgumentException", "ResourceAccessDenied" โ€” and streaming failures reported a bare HTTP error! status: 400 instead of the server's actual reason.
  • AI providers that never worked, now do. Gemini failed before a request was even sent, GPT-5.6 failed outright, and newer Claude models returned their reasoning text to the parser instead of the answer. All 36 models were tested against the live APIs.
  • Per-engine fixes: CrateDB showed empty columns and reported 0 rows for all 63 tables; QuestDB couldn't browse at all; PostgreSQL silently rewrote JSON-looking text written into a plain text column; SQLite emitted definitions it then rejected; Oracle returned no column statistics for tables VisuaLeaf itself created; MariaDB silently truncated long text at insert; DuckDB couldn't be seeded; ClickHouse failed exporting MongoDB into a JSON column.

Infrastructure

  • The legacy split NoSQL/SQL connection sidebars were removed; the unified list is the only path now.
  • A single engine catalogue is the source of truth for which engines are selectable, contract-tested across both the app and the server in each direction.
  • The frontend test suite was running 38 of its 490 tests; that's fixed, and roughly 4,000 lines of new tests were added. Backend unit tests grew from 1,505 to 2,546, and container-backed suites from 27 to 40. Test runners now fail when a pattern matches nothing, so a package that quietly stopped being covered can't pass as green.

Notes

  • Every saved ERD diagram is rewritten on first launch after upgrade. Nullability moves out of the type text into a real field. The visible consequence: SQL diagrams now generate NOT NULL on columns that previously produced none, which makes materialising match what the diagram's own DDL export was already showing you. MongoDB diagrams are unchanged. The migration is safe to repeat and retries on the next launch if it fails.
  • Startup now reads your saved diagrams to check for the old format. If you have many or very large diagrams, expect slightly longer startup on the first run.
  • SQLite foreign keys are now enforced. ON DELETE CASCADE and similar rules were previously inert and now fire, so a delete or a drop can empty a table you did not name. Nothing about your existing data is altered or checked on upgrade โ€” but the next time you write, some things will be refused and some will do more than they used to.
  • If you already have sync jobs: stop any SQL change-capture job with "release source resources" before upgrading. An upgraded job re-anchors rather than resuming, and the old capture resources on your source server need releasing. Dead letters recorded before the upgrade can't be replayed and are marked as such.
  • Deploy MongoDB is temporarily hidden. The command-palette entry for provisioning a replica set is off in this build while it's finished. Managing clusters you already have is untouched.
  • Known issue: Explain on a shell aggregation shows an empty plan. Run an aggregate() in the shell, switch the results to Explain, and the plan describes no stages rather than the ones you ran. The results themselves are correct, and explaining the same pipeline from the aggregation builder is correct โ€” only the shell's Explain tab is affected. A fix is queued.
  • Silent default changes. Export thread count is now automatic rather than a flat four; compression is lighter and faster, so dump files are 10โ€“15% larger; network compression is on for non-local exports; and restores insert in much larger batches. All are performance-positive, but they change file sizes and your machine's CPU and network profile.
Read the full v1.0.2234 release notes

v1.0.2091

July 30, 2026

VisuaLeaf v1.0.2091 Release Notes

Release Date: July 30, 2026


Headline: Faster Results, Schemas You Can Build For Real, One Connections List, and a Modern Look Throughout

This release is mostly about the app you use every day โ€” the grid, the sidebar, the editors, the dialogs โ€” getting faster, tidier, and more consistent. The things you'll feel first:

  • Big query results arrive sooner โ€” aimed squarely at the extreme end, like a page of 50 documents at MongoDB's 16 MB limit each load even faster than before ( which was already pretty fast)
  • Materialize a schema diagram into a real database โ€” design it once, preview the exact DDL or validators, then build the tables or collections for real.
  • One connections list for every engine โ€” MongoDB, SQL, and Redis in the same sidebar, with the connection manager to match.
  • Real folders for saved queries, scripts, and charts, offered everywhere you save.
  • Live index-build progress, and index errors written in plain English instead of driver-speak.
  • Results from your own SQL are editable, and browsing tables on a remote database is much faster.
  • A modern look across modals and editors โ€” the dialogs you live in no longer each look like the year they were written.

Also shipping: Deploy MongoDB (BETA) โ€” stand up and run a standalone server, replica set, or sharded cluster on your own cloud accounts, servers, or Docker โ€” Redis as a first-class connection type (BETA), and backups and exports straight to S3 / Cloudflare R2.


Faster Large Result Sets

  • Big query results arrive sooner. Loading a large result no longer alternates between waiting on the network and processing what arrived โ€” both happen at once, on both sides of the connection. The target case is the punishing one: a page of 50 documents at MongoDB's 16 MB ceiling each, roughly 800 MB in one go, where the load used to spend most of its time idle in the middle. If anything goes wrong the app falls back to the old behaviour rather than failing.
  • Loading a collection of those documents is lighter on memory โ€” moving between pages of 16 MB documents settles faster and leaves less behind.
  • Scrolling a long result stays smooth as the data grows, including in the tree view.
  • The query builder no longer stalls on complex queries โ€” building up a big filter, projection, or sort no longer gets slower with every field you add.
  • Binary and UUID fields survive the trip. Streamed results used to be able to corrupt Binary and UUID values in rare cases; every path now reads them the same, correct way.

Connections Sidebar & Connection Manager

  • One list for every engine. MongoDB, SQL, and Redis connections sit in a single sidebar list, each with its own brand logo, and the connection manager looks the same โ€” so you're not moving between two different-looking lists of the same connections.
  • Recent connections first โ€” both the sidebar and the connection manager can filter to what you've actually opened lately, instead of scrolling a list of fifty.
  • Every SQL object action came with it โ€” views, procedures, triggers, sequences, packages, and events are still edited straight from the tree in the unified list.
  • Capped collections are labelled in the tree, so you know before you try to write to one.
  • SQL connections show when you last connected, like MongoDB ones do.
  • Redis over SSH โ€” reach a Redis server on a private network through an SSH tunnel.
  • Reconnect without hunting โ€” if a connection dropped, actions that need it now offer to reconnect instead of failing.

Saved Queries, Scripts & Charts: Real Folders

  • Folders are real now. A folder you create exists on its own, so the Save As dialogs offer the same folders the list shows โ€” including an empty one you just made.
  • Rename a folder and everything in it follows.
  • Sensible default names when saving from the file explorer, instead of a blank field.
  • Saved lists behave. What you save lands where you saved it, the list shows it without a manual refresh, and the counts are right โ€” across saved queries, scripts, charts, dashboards, schemas, and JSON schemas.

Index Management

  • Watch an index build. Creating or rebuilding an index shows live progress, and that progress survives switching tabs or closing and re-opening the index screen. When it finishes you get a notification, wherever you are.
  • Index errors in plain English. A failed index no longer dumps a driver error at you โ€” you get a short sentence naming the problem (a duplicate value blocking a unique index, a field that's too long, an unsupported option) and what to do about it.

SQL Editing & Query Building

  • Edit the results of your own SQL. Results from a hand-written query used to be read-only. Now, when a result column traces back to a real table column, you can edit it in place โ€” and a badge on the grid tells you which cells are editable and why the others aren't.
  • Browsing tables on a remote database is much faster. Opening a table on a distant Oracle, SQL Server, or Postgres box no longer re-reads the whole catalogue every time โ€” the second visit is close to instant.
  • Change the schema and the tree keeps up. Run a CREATE, DROP, or ALTER in the editor and the connection tree refreshes itself; you don't have to reconnect to see the new table.
  • Paging shows real numbers. Changing a filter no longer leaves a stale row count on screen while the new page loads.
  • Writing SQL and editing JSON feels quicker โ€” typing stays responsive on long statements, with sharper highlighting and completion that keeps up.
  • Smart split layout โ€” the query editor and its results now arrange themselves from the shape of the panel: side-by-side when it's wide, stacked when it's tall, with the results getting the space. Drag the divider and your size is respected until you change the layout.
  • A better SQL query builder โ€” a cleaner layout and a much more responsive one on large queries.
  • SQL table schemas get their own list view, alongside the MongoDB JSON-schema list.
  • Query profiling tells you where you stand โ€” if your engine doesn't support profiling, it says so in a sentence instead of showing an empty screen, and on SQL Server the statistics no longer drop ad-hoc queries.
  • Writes respect the engine. Generated and imported SQL now adapts to what each dialect actually supports โ€” upsert style, foreign keys, transactions, identity columns, batch sizes, identifier limits โ€” so a script that works on Postgres also works on MySQL, ClickHouse, or SQLite.
  • Fixed SQLite connections and imports.

A Modern Look for Modals and Editors

A broad styling pass โ€” the dialogs and editors you live in every day were brought up to the same modern standard, instead of each one looking like the year it was written.

  • Modals across the app share one look โ€” rounded panels, a proper iconified header with the context you're working in, a soft fade on open, and consistent buttons. Query History, Load Query, the Save Query / Script / Chart dialogs, the command palette, the keyboard-shortcut sheets, the feedback and help panels, the JSON-schema editor, and the whole Settings screen (Appearance, AI Configuration, Storage, Email, License Information) all follow it now.
  • Query History is genuinely searchable โ€” filter by type and status, search as you type, and see a real "nothing matches" message instead of a blank panel.
  • Load Query got the same treatment โ€” search your saved queries, with clear empty states when you have none yet.
  • Editors look and behave consistently โ€” the shell, SQL, and JSON editors share one visual language, and the aggregation stage editors show a ghost hint of the expected shape while they're empty, so an empty stage tells you what goes in it.
  • Dropdowns look the same on every OS โ€” the AI model picker no longer renders as a native menu that looks out of place on Windows.

Schema Diagram (VisuaSchema)

  • Import a schema from a "smart query" JSON dump โ€” paste the metadata output from tools like ChartDB and get tables, columns, keys, indexes, and views laid out for you.
  • Smoother pan and zoom โ€” the minimap no longer redraws the whole canvas while you move around, and a locate bug that jumped you to the wrong place is fixed.
  • A new collection shows up in the diagram without a manual refresh.
  • JSON schema on collection stats โ€” see a collection's schema where you're already looking at its numbers.
  • Exported diagrams keep their fonts, so a shared PNG looks like what you saw.

Materialize a diagram into a real database

A diagram doesn't have to stay a drawing. Materialize takes the schema you designed and builds it for real, on the connection and database you point it at.

  • See exactly what will run before it runs. Every materialization starts as a dry run: on SQL you get the full generated DDL script in an editor; on MongoDB you get the JSON Schema validator that will be attached to each collection. Nothing touches the database until you say so.
  • Tables get created in the right order. Foreign keys are worked out ahead of time so parent tables exist before the tables that reference them โ€” no hand-sorting your CREATE TABLE statements.
  • Collections come with their rules attached. On MongoDB, each collection is created with its JSON Schema validator in place, so the shape you designed is enforced from the first insert.
  • Decide what happens to anything that already exists โ€” skip it (the safe default), attach or refresh just its validator, or stop the whole run and fail. You get a per-collection report of what was created, skipped, or updated.

Deploy MongoDB (BETA)

A new Deploy MongoDB launcher creates and runs MongoDB for you, and a Cluster tab manages each deployment afterwards. It works the same whether the machine is a cloud VM you've never logged into, a server you already own, or Docker on your laptop.

What you can see

  • A card per cluster with its phase, members, versions, and live resource usage (CPU, memory, disk) that refreshes on its own instead of being a one-shot snapshot.
  • An Infrastructure tab listing every server behind your clusters with live status, so you can tell a sick machine from a sick database.
  • A live progress panel for long operations โ€” adding a shard, growing a disk, upgrading a version โ€” instead of a spinner that tells you nothing.
  • An Audit log tab recording every deploy, scale, restart, password reset, and destroy, with who ran it and when.
  • Plain-English preflight before anything is created: whether Docker or the deploy tooling is present, whether the port is free, and what to do about it if not. If port 27017 is already taken on the target machine, the deploy stops immediately and tells you, instead of failing halfway through. Nothing to install by hand first โ€” VisuaLeaf fetches the tooling it needs for a cloud deploy on its own.

What you can do

  • Pick a deployment shape โ€” standalone server, replica set, or sharded cluster (config servers, shards, and a router), on cloud VMs, your own SSH hosts, Docker, or Kubernetes.
  • Bring your own accounts and servers โ€” add a target once (DigitalOcean, AWS EC2, Hetzner Cloud, Hostinger VPS, OVHcloud, DigitalOcean Kubernetes, your own Kubernetes, an SSH host, or Docker), and reuse it for every cluster. Targets are editable after the fact, credentials are checked against the provider when you save them, and SSH hosts get a real reachability test rather than a hopeful "saved".
  • Authenticate SSH targets your way โ€” private key or password, and per-server credentials when the members live on different machines with different logins.
  • Deploy secured by default โ€” set the admin password yourself (the field starts empty on purpose), turn on TLS with one toggle, and download the cluster's CA certificate from the Overview tab so other tools can trust it.
  • Get a working connection immediately โ€” VisuaLeaf creates the connection for you, matching the cluster's TLS setting, and marks it as managed. For a database on a private network, open an SSH tunnel from the Tunnels pane and connect through it.
  • Run day-2 operations without a shell โ€” reset the admin password, scale members up or down, grow a disk, add a shard, scale config servers, restart a member, do a rolling MongoDB version upgrade, or convert a replica set into a sharded cluster.
  • Schedule backups โ€” pick a schedule and retention window, organise runs into folders, and optionally push copies offsite to S3 / R2. Each run shows up as a task you can open, and delete failures now surface an error instead of quietly doing nothing.
  • Set up alerts and auto-heal โ€” get told when a cluster is unhealthy, and let VisuaLeaf bring failed members back on its own with the auto-heal toggle on each cluster card.
  • Place members deliberately โ€” spread a replica set across regions or across different targets, one member at a time.
  • Adopt what already exists โ€” point VisuaLeaf at a replica set you built yourself and watch it read-only, then take over management of it. It can also scan a remote Docker host or an SSH host for MongoDB it didn't create, recover a cluster whose container is gone but whose data volume survives, and add a new member to an existing set for you.
  • Remove things safely โ€” a target that still has databases on it can't be removed, and the app tells you which ones are in the way. Adding an account you already added reuses it instead of creating a duplicate.

Deployments survive an app restart, and the deploy and cluster screens are ordinary tabs, so they can be split and popped out like anything else.


Redis Support (BETA)

Redis now behaves like every other connection: add it from the connection manager, see it in the sidebar with its own logo, and open activities against it.

  • Connect to any shape of Redis โ€” standalone, cluster (with seed nodes), or Sentinel (with sentinel nodes and a master name), plus Redis Enterprise and Redis Cloud using their management APIs. Pick a database index, or authenticate with a username and password.
  • Browse keys โ€” a searchable key tree with a value filter, so you can find session:* without scanning by eye. Values open in a proper editor: a form view for simple values, a code view for JSON, and per-type editing for hashes, lists, sets, and sorted sets (with member and score fields).
  • Run commands โ€” a Redis CLI tab with command help built in.
  • Read server health โ€” the System Monitor button opens Redis Server Info for a Redis connection instead of a Mongo-shaped screen.
  • Manage security โ€” the Users & Roles button opens Redis Security for a Redis connection: manage ACL users and permissions, set or change the server password, and manage users on Redis Enterprise and Redis Cloud. A banner makes clear that ACL changes apply to the remote Redis server, and the panel refreshes once instead of thrashing.

Backups & Exports to S3 / Cloudflare R2

  • Save your buckets once โ€” a new Cloud Storage screen holds your S3 and Cloudflare R2 buckets with a connection test, so tasks can just pick one. Secrets are stored encrypted with no extra setup on your part.
  • Export to a bucket โ€” pick a saved bucket and a path, and browse the bucket's folders (or create one) right from the picker instead of typing a path blind.
  • Restore from a bucket โ€” a dump sitting in S3 or R2 can now be the source of a job, not just the destination.
  • Back up a whole cluster โ€” every database in one job, and restore the same way.
  • Dated paths without editing the job โ€” use date tokens in the path and every run lands in its own folder.
  • Job lists read correctly โ€” object-storage sources and targets show up properly instead of a red "Unknown", and jobs that don't have a field mapping (whole-database and object-storage jobs) no longer show an irrelevant preview.

Improvements

Stability

  • An AI provider rejecting your key no longer signs you out of VisuaLeaf. You get a clear message about the AI key instead of being dropped back to the login screen.
  • Fixed a start-up failure that could stop the desktop app from opening at all.
  • Control your crash reports. Settings now has a Crash Reporting panel: send reports automatically, keep them local only, and view the recent ones yourself.

Tabs & Workspace

  • Put a popped-out tab back. A tab you popped into its own window can be returned to the main window.
  • Heavy tabs no longer break your workspace. Long-running monitor and oplog tabs used to be able to grow your saved workspace past its limit, which meant it stopped saving; they now keep their history locally and repaint instantly when you come back.
  • A workspace saved by a newer build opens in an older one instead of failing to load.
  • Custom tooltips across the app render properly instead of getting clipped at panel edges.
  • Select-all no longer runs away on very large selections.

Export & Import Jobs

  • Paste documents straight into a task โ€” no file needed. An import task's file source now has a Paste JSON box: drop in an array or one document per line, hit Use this JSON, and it becomes the task's source. Handy for a quick one-off set of documents you'd otherwise have to save to disk first. Pasted data is kept as a file behind the scenes, so the job still streams, resumes, and re-runs like any other; anything over 8 MB should still come from a file.
  • One job at a time. Clicking a job that takes a moment to open no longer opens it three times.
  • Standalone imports are editable โ€” choose insert, upsert, or drop-and-insert per import.
  • Exported queries match what you ran โ€” a query saved into a job now carries its exact values, so ObjectId, Decimal128, dates, and binary fields survive round-tripping instead of being re-parsed from text.
  • Shell-style JSON import and export works correctly, including ObjectId(...) and friends.
  • Export tasks run on connection existence, not on whether the connection is currently open โ€” a scheduled task no longer skips because you closed a tab.
  • Tell running, pending, and scheduled work apart at a glance in the Execution Monitor and a job's history โ€” and when a section is empty, it says why instead of leaving you guessing.
  • Saving a job sticks. A batch of bugs where job and export settings didn't save, or came back changed after a reload, is fixed.
  • Renaming the key field no longer loses your records. An import that mapped _id to a different name with "include unmapped fields" turned off used to produce rows with no key at all; the key now follows the mapping (SOZO-1329).
  • Opening a run's log is instant, even on a job with a long history, and old execution history is cleaned up on a retention schedule instead of growing forever.
  • Import warnings belong to the right item. When several items of a task run at once, each one's warnings now stay with it instead of bleeding into its neighbours.
  • Job history and live progress work in the desktop app's own storage โ€” some log and running-status lookups used to fail there, which could leave a running export looking stuck.
  • The help panels answer the question you have โ€” bulk import, field mapping, and data-source variables now explain what to type and show an example.

Users & Roles

  • Rebuilt user and role management โ€” clearer user and role lists, a cleaner create-user and create-role flow, role detail, and an effective-privileges view that answers "what can this user actually do?".

Queries, Aggregations & Profiling

  • Complex aggregations save correctly. Pipelines with nested stages and rich values used to come back altered โ€” or not save at all. Save, reopen, and you get exactly the pipeline you wrote.
  • Aggregation builder uses the space it has โ€” a much more compact, readable layout.
  • Aggregation history works again.
  • Query profiling shows correct data, and you can now inspect active sessions.
  • Copy and paste files in the file explorer, including JSON files.
  • Capped collections get a proper configuration panel, with a clear warning that converting is irreversible.

Naming & Navigation

  • Names that say what the tool does. The schema diagram is now Visual Schema (ERD), the JSON-schema editor is Schema Manager, and Mongo Sync is now Database Sync โ€” since it moves data between SQL engines as well, not just MongoDB. Each new name is used everywhere: sidebar, tabs, and the command palette.
  • Every create flow goes through the same picker. Starting a chart, query, aggregation, shell, or schema from the welcome page, the + button, or the command palette now behaves identically, and each one only offers what the connection actually supports.
  • Redis sits in the same list as MongoDB, rather than in a separate tree of its own.

Dashboards & Onboarding

  • An empty dashboard offers to create a chart instead of leaving you at a dead end.
  • Pick your chart's source โ€” including an aggregation โ€” from a clearer source picker.
  • Check for updates manually from within the app.
  • Getting-started guides for the comparison and compare screens, and a refreshed getting-started modal.
  • The free-trial prompt only appears if you haven't already started a trial.

Notes

  • Deploy MongoDB and Redis support are BETA. They're complete enough to use daily, but expect rough edges; the destructive operations (destroy, convert-to-sharded, force reconfig) are all behind confirmations for a reason.
  • Deploying to a cloud provider needs your own account and credentials. VisuaLeaf spawns servers in your account and you pay your provider directly โ€” nothing runs through us.
  • A cluster deployed with TLS uses a self-signed certificate. Use Download CA certificate on the cluster Overview tab to make other tools trust it.
  • Adopted clusters start read-only. A replica set you import is observed first; take over management explicitly when you're ready.
  • Existing workspaces, connections, and export jobs upgrade in place โ€” nothing to migrate.
Read the full v1.0.2091 release notes

v1.0.1948

July 16, 2026

Quick Fix:
Table view optimization + Shell result gets formatted correctly after leaving and entering the mongodb shell

v1.0.1947

July 16, 2026

VisuaLeaf v1.0.1947 Release Notes

Release Date: July 15, 2026


Headline: Database Copy Respects Your Collection Selection, and Safer $out / $merge in the Aggregation Builder

Two fixes you'll feel:

  • Copying a database to another database now copies only the collections you picked. You can select collections in a database-to-database export job, and the copy honors the selection โ€” before, it silently copied the entire database no matter what you chose.
  • $out can no longer silently overwrite an existing collection. The aggregation builder now blocks the run with a clear error when the target collection already exists, and the $out / $merge forms got smarter database and collection pickers.

Also shipping: a more reliable Linux release pipeline behind the scenes.


Database โ†’ Database Copy: Pick Your Collections

  • Choose exactly what to copy โ€” the collection picker in a database-to-database export job is now enabled, so you can copy three collections out of fifty instead of all or nothing.
  • The selection actually applies โ€” previously a job with specific collections selected still copied the whole source database. Now a non-empty selection copies just those collections; leaving it empty copies everything, as before.
  • The picker lists the right collections โ€” the collection list now always reflects the database you selected for the job, not the connection's default database.
  • No more irrelevant preview โ€” database-level copy jobs no longer try to show a field-mapping preview that doesn't apply to them.

Aggregation Builder: Safer $out and $merge

  • $out won't silently destroy data anymore. The target collection field is now a plain "new collection name" input, and if you type a name that already exists, you get a blocking error explaining that $out would overwrite it โ€” not just a small warning icon you could miss.
  • Database fields have real suggestions โ€” when writing to another database with $out or $merge, the database field now autocompletes from the databases on your connection instead of being a blank text box.
  • $merge suggests the right collections โ€” the collection dropdown now lists collections from the target database you picked, not from the source database.
  • One terminal stage per pipeline โ€” the builder now stops you from adding a second $out or $merge when the pipeline already ends with one, with a message explaining why, instead of letting you build a pipeline that can't run.

Infrastructure

Electron & Distribution

  • Overhauled the Linux release pipeline โ€” RPM packaging, apt repository cleanup, native-library signing, and staged publishing with duplicate-upload detection โ€” so Linux builds publish faster and more reliably.
  • Added an internal release runbook documenting the full publish process.

Diff scale

  • Frontend: 11 files changed, 338 insertions, 39 deletions (4 commits)
  • Backend: 13 files changed, 687 insertions, 24 deletions (4 commits)

Notes

  • Existing database-to-database export jobs are unaffected โ€” a job with no collection selection still copies the full database.
Read the full v1.0.1947 release notes

v1.0.1940

July 16, 2026

VisuaLeaf v1.0.1940 Release Notes

Release Date: July 15, 2026


Headline: findOne Finally Prints Real Documents in the Shell, the Console Remembers Its Output, and Charts Let You Choose the Aggregation

Three things in this release:

  • Printing a findOne() result in the shell now shows the actual document โ€” real BSON values, dates, decimals and all. It used to show a cursor instead of your data.
  • The Shell output console no longer wipes itself โ€” switch to another tab and back, and everything you printed is still there. It even survives an app restart.
  • Charts now let you pick the aggregation โ€” when multiple rows share the same category, you decide whether the chart shows their Sum, Average, Count, Min, Max, First, or Last value. Before, everything was silently summed.

Details below.


findOne Prints Real Documents

The big shell fix: printing a findOne() result now shows the document itself. Before, print(db.users.findOne(...)) (or just evaluating a findOne and printing it) showed you a cursor rather than your data. Now you get the actual document, with every BSON type rendered faithfully:

  • Dates show the actual timestamp โ€” they used to come through as Null.
  • Decimals keep full precision โ€” double values were being silently rounded to a lower precision before display.
  • NumberLong and NumberDecimal display correctly, including special decimal values like NaN and Infinity, which used to error out.
  • Regular expressions render as regexes โ€” with their exact flags preserved, instead of unfolding into a {pattern, options} object.
  • Fields with numeric names survive โ€” a field literally named "3" used to vanish from findOne results.
  • Declaring a function no longer prints a stray "js function" line in the console.

Shell Tabs Remember Everything

  • The Shell output console survives tab switches โ€” flip to another activity and back, and your accumulated output is still there. It's also saved with your workspace, so it comes back after a restart.
  • Result tabs keep their names and numbering โ€” switching away and running another query no longer produces colliding or mislabeled result tabs.
  • Undo/redo history in the shell editor survives tab switches โ€” โŒ˜Z still works on edits you made before flipping away.
  • print() output lands in order โ€” printed lines now always appear before the "N results" summary of the script that produced them, never after.

Chart Aggregation

When your data has several rows that land on the same point โ€” same x-axis value within a series, same pie slice, same funnel stage, same heatmap cell โ€” the chart has to combine them into one number. Until now it always summed them. Now you choose.

What you can do:

  • Pick the operation โ€” a new Aggregation dropdown in the Data Field Mapping panel offers Sum, Average, Count, Min, Max, First, and Last. It appears as soon as your chart has a grouping field (Series for line/bar/area, Category for pie and funnel, both axes for heatmap).
  • See it everywhere the chart lives โ€” the choice saves with the chart and applies in the chart builder, on dashboards, and in dashboard edit mode alike.
  • Trust the funnel's "Others" bucket โ€” when a funnel has more stages than the display cap, the overflow collapses into "Others" using your chosen operation correctly: with Average selected, "Others" is the true average of all overflow rows, not a sum of per-stage averages.
  • Set the funnel stage cap and keep it โ€” the "max funnel items" setting now saves with the chart instead of resetting.

Two honesty guarantees while aggregating: non-numeric values are skipped rather than counted as zero, and a category whose values are all invalid simply doesn't appear โ€” no fabricated data points. The help tooltips in the mapper now describe exactly what will happen for your chart type.


Chart Builder Polish

  • The chart builder's settings panel, Data Field Mapping, and Parameters editor share a cleaner look โ€” rounded inputs, a softer focus highlight, tidy uppercase section headers.
  • Tooltips and help popovers in the mapper are now readable in light mode (they were dark-on-dark before).

Notes

  • Existing charts are unaffected โ€” the aggregation default is Sum, which matches the previous behavior exactly. Clearing a chart's grouping field resets the aggregation back to Sum.
Read the full v1.0.1940 release notes

v1.0.1933

July 15, 2026

VisuaLeaf v1.0.1933 Release Notes

Release Date: July 15, 2026


Headline: Stability Fixes โ€” No More Ubuntu Crash, Stuck Modals, Broken Popouts, or Surprise Read-only Errors

This release is a stability pass. The fixes you'll feel:

  • The app no longer crashes on Ubuntu 24.04 when running shells or streaming queries under load. If your desktop was dying with a native crash during shell or export work on prior builds, upgrade and it's gone.
  • Stuck modals close. Some dialogs used to appear on screen with no way to close them โ€” no button, no Esc, nothing worked. Every modal now opens and closes cleanly.
  • Popout windows actually work. In a popped-out window, the + button and โŒ˜/Ctrl+K command palette now show your create / saved / nav items (they were empty before), and your connections, databases, and collections stay in sync with the main window in real time. Saved queries no longer flash a wrong "Connection Deleted" badge when a popout opens.
  • No more surprise "not writable" errors on replica-set secondaries. If your connection points at a secondary, the collection view and shell result grid now tell you up front, with a clear amber read-only banner naming the current primary. If the secondary is promoted, editing turns back on automatically.
  • Importing a schema from a collection is reliable now. A progress indicator stays visible even when you switch tabs, and if the import fails you get a proper error message instead of it silently disappearing.
  • Pasting a connection string keeps your connection name. Paste no longer overwrites the name you already typed.

Alongside the fixes, this release also opens Replica Set Management (BETA) โ€” a first-class MongoDB replica-set operations panel โ€” plus a SQL engine expansion (MySQL, CockroachDB, YugabyteDB, Redshift, Aurora Postgres/MySQL, RDS Postgres/MySQL, Percona, TiDB) with per-engine brand logos in the sidebar, and a modal + list-view design polish pass. Details below.


Replica Set Management (BETA)

Right-click any replica-set connection and pick "Replica Setโ€ฆ" to open a live operations panel for your cluster. Everything works read-only first, so it's fully useful on Atlas and other managed deployments where you can't make changes. When you want to make changes, flip the "Enable changes" toggle and every safe-guarded action becomes available.

What you can see (no permissions needed beyond a working connection):

  • A live topology diagram โ€” every member with its role, health, replication lag, and sync source. One-glance answer to "is my set healthy?"
  • Quorum math and cluster lint โ€” plain-English findings on dangerous configurations (PSA with w:majority, even voters, single-region quorum, mixed versions, arbiters where they don't belong, and more) with the fix on the same card
  • Election timeline โ€” every election in this session with a plain-English why it happened
  • Read-preference tester + write-concern simulator โ€” pick a mode and see which members are eligible right now, and whether writes at your chosen w can actually complete
  • Oplog window with fall-off projection โ€” how much history you have, how fast it's shrinking
  • Certificate expiry per member โ€” amber under 90 days, red under 30
  • Failover preflight โ€” a single card that answers "can I fail over safely right now?"

What you can do (after arming "Enable changes"):

  • Step down, step up, freeze primaries with a candidate preview
  • Safe reconfig (priority, tags, hidden, delayed members) with a diff preview and safety validator that refuses unsafe changes
  • Add / remove members with live initial-sync progress
  • Force reconfig for majority-loss recovery โ€” the "it's 3 a.m. and my primary is gone" button, gated behind a typed confirmation
  • Maintenance mode, per-member oplog resize, rolling compact runner with live progress
  • Cancel slow ops per member (killOp) โ€” the #1 fix for a lagging secondary
  • Index-build coordination across members
  • Backup coordination โ€” a planned secondary-targeted dump with an fsyncLock helper
  • x509 user management and a keyfile-rotation checklist

Three focused secondary tabs support the flagship:

  • Oplog browser โ€” a filterable log console over local.oplog.rs. Colored op badges, human-readable Simplified view by default (or Raw for extended-JSON), namespace typeahead, multi-select op filter, and session/txn attribution on each entry.
  • Monitor โ€” 24-hour charts of lag and oplog window with alerts (lag, window, quorum-at-risk, unexpected election). Range picker, CSV/JSON export.
  • Fleet โ€” a dense, worst-first status table covering every replica set across every connection you have open.

Every RS surface has an in-product learn layer โ€” inline concept-explainer popovers next to every jargon term, and a dismissible "how this works" intro on every tab, so the panel stays approachable even if you don't live in MongoDB internals.


SQL Engine Expansion

More engines to pick from when adding a connection, and every engine now shows its own brand logo in the sidebar so you can tell them apart at a glance.

  • New engines โ€” MySQL, CockroachDB, YugabyteDB, Redshift, Aurora Postgres, Aurora MySQL, RDS Postgres, RDS MySQL, Percona, TiDB. Each with sensible default ports so you rarely need to change them.
  • Brand logos in the connection sidebar โ€” Postgres, MariaDB, MySQL, SQLite, ClickHouse, DuckDB, CockroachDB, TiDB rendered as brand marks; less-common engines get distinct colored icons (Firebird = flame, Derby = feather, HSQLDB = bolt, DB2 = server, H2 = blue database).
  • The connection manager's MongoDB tab is now labelled "NoSQL".

Modal & List-view Design Polish

  • Format Chart, Shell Keyboard Shortcuts, and Schema Actions Help modals have a cleaner, more consistent look with rounded corners, iconified headers, and a soft fade on open/close.
  • Slim, command-palette-style search bars on the schema list, MongoDB schema list, user-management list, and database collection stats โ€” same tidy inline look everywhere.
  • Selection highlight only shows during keyboard navigation โ€” a mouse click no longer leaves a lingering blue row behind, so the two interaction modes stay visually distinct.
  • Apply Schema now uses the shared connection picker โ€” same modal you already know from Edit & Query Data, pre-filled with whatever the schema already knows about.
  • Data mapper โ€” the "map required fields" warning is now a subtle inline row with each missing field name as a tidy chip.

Replica Set Polish

  • Panel and monitor headers now lead with the connection name โ€” instantly recognizable when you have several open in split panels.
  • Fleet is now a dense worst-first table (previously cards), with topology and quorum explanations right on the column headers.
  • Fleet auto-refresh is opt-in and off by default โ€” no polling cost on tabs you left open.
  • Read-preference and write-concern testers are clearly marked read-only so you know they can't accidentally change anything.
  • Add-member dialog now requires host:port (a bare port used to silently fail).
  • RS tabs keep their view state across tab switches โ€” no reload when you flip away and back โ€” and the armed "changes enabled" state also survives a tab switch inside the same session.

Notes

  • Replica-set features are BETA. The read-only path is proven against Atlas dedicated, Atlas shared, self-managed replica sets, and mongos. Mutation paths are safety-gated; feedback on any edge case is welcome.
  • On Atlas and other managed deployments, actions the provider blocks (reconfigs, step-down, oplog resize, etc.) are greyed out with an explanation, not hidden โ€” you always see the full surface.
Read the full v1.0.1933 release notes

v1.0.1901

July 9, 2026

VisuaLeaf v1.0.1901 Release Notes

Release Date: July 8, 2026


Headline: Quality-of-Life Refresh โ€” Command Palette, 10ร— Faster Table View, Schema-Diagram Overhaul, Full Light/Dark Polish

The main focus of this release is quality of life. VisuaLeaf now has a Cmd/Ctrl+K command palette with fuzzy search and inline action chips, a full keyboard-shortcuts catalog modal, complete tab-management hotkeys (close, reopen last closed, jump to tab N, next/previous), a rebuilt SQL table view that renders roughly 10ร— faster through GPU-cached cell rendering, a top-to-bottom Schema Diagram overhaul with translate-based pan, an infinite xyflow-style background pattern, a RAF-throttled minimap, and hover-relation highlighting in the HTML export, plus a sweeping light/dark mode polish touching ~5,600 style rules across the app.

On top of that quality-of-life work, three flagship epics also ship:

  • My Files (SOZO-1228 โ†’ SOZO-1241) โ€” end-to-end user-file system with local-disk and S3/R2-compatible storage backends, admin auditing, health monitoring, soft-delete lifecycle, and an SSRF/DNS-pinning security layer.
  • MongoDB Sharding BETA โ€” full sharding activity with a cluster-overview dashboard, shard-collection dialog, and a shard-key advisor backed by a new ShardingService / ShardKeyAdvisorService.
  • Tables as first-class Charts (SOZO-1146) โ€” standalone Table system removed and re-introduced as TABLE, PIVOT, and TREE chart types over the new virtualized data-grid.

Also shipping: an in-app release-notes + auto-update flow, a demo mode for showcase clusters, an Atlas SSH-tunnel + SOCKS5 connection fix, and signed Linux apt/dnf repo distribution for the desktop app.


Command Palette, Keyboard Shortcuts & Tab Management

The centerpiece of this release's QoL push โ€” a single fuzzy-searchable command surface, a complete keyboard-shortcut catalog, and browser-style tab hotkeys everywhere.

Command palette (โŒ˜/Ctrl+K)

  • Global fuzzy search โ€” one keystroke opens a search-anything box across activities, connections, and commands
  • Categorized results โ€” grouped by section so you can scan or scroll
  • Inline action chips โ€” right-side quick actions on each row (e.g. Documents | Aggregator | Indexes โ€ฆ) so you can jump straight to a sub-view
  • Same picker on the "+" button โ€” the split-panel + opens a Blank tab with the same palette content, so you can pick a new activity without losing your current layout
  • Extensible โ€” any part of the app can contribute items into the palette

Keyboard shortcuts modal (keyboard-shortcuts-modal)

Full catalog surfaced through the palette and Help menu, with per-platform modifier rendering (โŒ˜ on macOS, Ctrl elsewhere):

  • Tabs & Panels โ€” Close current tab (โŒ˜/Ctrl+W), close other tabs in panel (โŒ˜/Ctrl+Alt+W), close all tabs in panel (โŒ˜/Ctrl+Shift+W), reopen last closed tab (โŒ˜/Ctrl+Shift+T), next tab (โŒ˜/Ctrl+Tab), previous tab (โŒ˜/Ctrl+Shift+Tab), jump to tab 1โ€“9 (โŒ˜/Ctrl+1..9), jump to last tab (โŒ˜/Ctrl+Shift+0)
  • Navigation โ€” Command palette / global search (โŒ˜/Ctrl+K), new connection (โŒ˜/Ctrl+N)
  • View โ€” Zoom in / out / reset (โŒ˜/Ctrl + +, โŒ˜/Ctrl + -, โŒ˜/Ctrl + 0)
  • Modals & Dialogs โ€” Close modal / dialog (Esc)
  • Table View โ€” Navigation โ€” Move cell, PgUp/PgDn, extend selection (Shift + Arrows), select all rows (โŒ˜/Ctrl+A), clear selection (Esc), refresh (โŒ˜/Ctrl+R)
  • Tree View โ€” Navigation โ€” Move row, Alt+โ†’ expand, Alt+โ† collapse, extend selection, select all, refresh document (โŒ˜/Ctrl+Shift+R)

Reopen last closed tab

  • โŒ˜/Ctrl+Shift+T restores the most recently closed tab โ€” closed a tab by mistake? Just pop it back
  • Works with the tab close button too, so nothing is ever really lost

SQL Table View โ€” ~10ร— Faster

The SQL table view (sql-table-view-draggable) was rebuilt for speed. Scrolling and panning through wide result sets is now roughly 10ร— faster and runs at a smooth 60 fps, even on huge tables. Wide grids that used to hitch or drop frames while scrolling now feel instant.


Schema Diagram Overhaul

The Schema Diagram got a top-to-bottom rewrite focused on making pan, zoom, and navigation feel silky, and on making exports actually useful.

Pan & zoom

  • Smoother pan and zoom โ€” Pan is now translate-based instead of scroll-based, so panning and zooming stay locked together at any scale and the minimap always agrees with the main canvas
  • Pan-by-default โ€” Click-and-drag now pans; hold โŒ˜/Ctrl to temporarily switch mode
  • Snappier minimap โ€” Dragging the minimap rectangle no longer stalls the canvas, and moving between large schemas stays 60 fps
  • Cleaner zoom-to-center โ€” Zoom in/out keeps whatever you were looking at in the center of the viewport
  • Auto-migration โ€” Older saved schemas that used the old pan model are migrated on load; if a schema looks off-center after upgrade, "Reset Zoom" re-centers it

Infinite background pattern

  • New infinite grid background โ€” Replaces the old fixed background with a tiled pattern that scrolls and scales with the canvas
  • Theme-aware โ€” Background color follows light/dark mode live, so it never flickers or mismatches the diagram

Better HTML export

  • Field-hover relations โ€” Hovering a field in an exported HTML schema now highlights every field on the other side of any relationship, with a floating tooltip showing type, related peers, and cardinality (N โ†’ 1, 1 โ† N)
  • Connection lines light up โ€” Any relationships touching the hovered field render in an elevated style so you can trace them at a glance

Connection picker

  • Rebuilt connection selector โ€” Cleaner flow for attaching a connection to a schema
  • New connection picker โ€” Shared picker used from the schema, the split-panel + button, and the command palette

Bug fixes

  • Fixed minimap rectangle getting stuck when a schema was opened empty and then gained its first collection
  • Fixed background pattern flickering on light/dark toggle
  • Fixed pan drift when resetting zoom mid-drag
  • Fixed HTML export losing hover interactivity in Safari

Light / Dark Mode & UI Polish

A sweeping visual pass: thousands of style rules retouched so both themes finally feel consistent and polished, plus a general modernization of the visual language.

  • Modal fade in / out โ€” Every modal now fades in on open and fades out on close, and blocks input mid-leave so you can't accidentally click through a closing dialog
  • Mongo Sync โ€” Big visual refresh to the setup and monitor views; cleaner headers, better spacing, new sync signature accent
  • Aggregation pipeline โ€” Stage palette, stage preview, and work panel look consistent in both themes
  • Chart builder โ€” New Format Chart modal that unifies title, subtitle, and axis-label editing in one place
  • Comparison sessions โ€” Session list and results reworked for dark mode
  • Feedback modal โ€” Larger, restyled feedback surface
  • Database collection stats โ€” Restyled cards and dark-mode badges
  • Task canvas โ€” Export job task canvas visual refresh
  • File explorer โ€” Theme-aware header, buttons, and empty states
  • Welcome / intro โ€” Cleaner welcome screen and intro flow
  • Update banner โ€” Theme-aware update prompt
  • Schema diagram โ€” Collection cards, inline editors, and the diagram background all follow the current theme in real time

My Files & User File Storage (SOZO-1228 โ†’ SOZO-1241)

A new per-user file workspace with a pluggable storage backend, admin controls, auditing, and lifecycle sweeps.

Backend

  • Foundation (SOZO-1230) โ€” Models, VirtualPath, LocalDiskUserFileStorage, and ArchUnit rules (UserFileSafetyRulesTest) enforcing production isolation
  • Resolver wiring (SOZO-1231) โ€” Temp-file unification and ArchUnit production enforcement across the resolver seam
  • Service layer (SOZO-1232) โ€” UserFileService (1391 lines), controllers, sweeps, and Feature.USER_FILES feature gate; system-override layer implemented (stale docstring corrected in SOZO-1232)
  • MyFiles activity subtype (SOZO-1229) โ€” Registered for workspace persistence
  • Startup guard (SOZO-1229) โ€” Fail-fast: web mode requires a MongoDB replica set; enforced only when the user-files feature is configured
  • Security (SOZO-1235) โ€” SecretCipher (AES-GCM-256) for at-rest credential encryption and UrlSafetyGuard (SSRF + DNS-pinning) for outbound URL validation
  • S3/R2 storage backend (SOZO-1236) โ€” S3CompatibleUserFileStorage (622 lines) with factory swap between local disk and S3-compatible object stores
  • S3 extraOptions + async recompute-usage (SOZO-1240) โ€” Wired extraOptions into PutObject and moved usage recomputation to an async background job
  • Storage admin (SOZO-1237) โ€” StorageBackendAdminService, admin endpoints, destructive backend-switch flow, and UserFileReconcileService
  • Health monitoring (SOZO-1238) โ€” UserFilesHealthService and /health endpoint for the local-disk backend
  • Lifecycle (SOZO-1239) โ€” Soft-delete window for user files, username reservation, and hard-delete sweep (UserFileSweepService, UserFileLifecycleService)
  • Audit + operator runbook (SOZO-1241) โ€” UserFileAuditService, admin audit log, docs/USER_FILES_RUNBOOK.md, and load tests
  • Epic close (SOZO-1229) โ€” S3 export-staging seam, secrets fail-fast, and stale-TODO cleanup

Frontend

  • My Files activity (SOZO-1234) โ€” my-files-activity (2261-line component) with file explorer, workspace activity integration, and admin user-files panels
  • Virtual folder service (SOZO-1233) โ€” Mode-aware service facade, stale-path warning, and path-mode-utils
  • Admin storage backend (SOZO-1238 FE) โ€” Admin storage backend card, destructive-switch confirmation modal, and monitoring banner
  • Admin audit log (SOZO-1241 FE) โ€” User-files admin audit log tab with CSV export
  • Demo-mode gating (SOZO-1229) โ€” New demoMode env flag toggles the "Back to visualeaf.com" link
  • User-file admin service โ€” New core/services/file/user-file-admin.service.ts
  • Design docs โ€” docs/VIRTUAL_FOLDER_PLAN.md and docs/replica-set-management-plan.md

Test coverage

~4,000 lines added across 20+ new unit/integration/concurrency/load-test classes: UserFileServiceIntegrationTest, UserFileServiceConcurrencyTest, UserFilesLoadTest, S3CompatibleUserFileStorageTest, SecretCipherTest, UrlSafetyGuardTest, UserFilesModeValidatorTest, UserFileStorageAdminTest, UserFileLifecycleServiceTest, UserFileReconcileServiceTest, UserFileSweepServiceTest, UserFileAuditServiceTest, and more.


MongoDB Sharding BETA

End-to-end sharding activity for browsing, planning, and applying shard configuration on live MongoDB clusters.

Frontend

  • Sharding activity โ€” sharding-activity (403-line component) with shard/chunk visualization
  • Cluster overview dashboard โ€” cluster-overview.component (707 + 575 lines) covering shards, chunks, balancer, and database placement
  • Shard collection dialog (439 lines) โ€” Guided shard-collection flow with key preview
  • Shard key advisor (129 + 164 lines) โ€” Advisor UI wired to the backend service
  • sharding.service.ts (395 lines) โ€” Client for the new controller
  • Design docs โ€” docs/sharding-feature-plan.html and docs/docker/shard/test-case.md

Tables as first-class Charts (SOZO-1146)

The standalone Table widget introduced earlier was rebuilt as TABLE, PIVOT, and TREE chart types so it shares the dashboard, save, and export pipeline with every other chart.

Backend

  • /api/tables โ€” New backend module (model + repo + service + controller)
  • Chart types โ€” TABLE, PIVOT, and TREE added to ChartType; tableConfig added to ChartConfig
  • Column config โ€” TableColumnConfig.pinned and ChartTableConfig.filters
  • Cell templates โ€” TableColumnConfig.transform field for cell-value templates
  • Cleanup โ€” Standalone Table system removed on the backend

Frontend (data-grid Phase 1 โ†’ 5)

  • Phase 1 โ€” Virtualized rendering, sticky header, and row numbers
  • Phase 2 โ€” Selection, keyboard navigation, and Ctrl+C TSV copy
  • Phase 3 โ€” Header and cell context menus
  • Phase 4 โ€” Per-column filters with persistence
  • Phase 5 โ€” Sticky pinned columns
  • Column controls โ€” Show/hide, rename, transform, and format
  • Currency formats โ€” Expanded to all ISO 4217 codes
  • Widget scaffold โ€” Table library, builder, and save dialog landed as a UI slice; Playwright spec and docs added
  • Cleanup โ€” Standalone Table system removed on the frontend
  • Fix โ€” Table builder template no longer allows arrow functions in expressions

In-App Release Notes & Auto-Update

A new user-facing release-note surface and update UX for the desktop app.

  • release-notes-modal (505 lines) โ€” Shows the current release's notes on first launch after upgrade
  • release-history-modal (472 lines) โ€” Browsable history of prior releases
  • update-banner (308 lines) โ€” Non-blocking update prompt
  • update.service.ts (328 lines) โ€” Check/download/apply update lifecycle
  • release-history.service.ts โ€” Indexes files under release-note/
  • Electron main.js (+303 lines) โ€” Auto-update wiring
  • Cloudflare uploader โ€” upload-cloudflare.js (+323 lines) and r2-list-packages.js publish releases to R2
  • Linux repo distribution โ€” build-linux-repos.sh, setup-linux-repos.sh, LINUX-REPO-USER-DOCS.md, and signed APT/DNF keyrings shipped under electron-app/certs/
  • memory-selector.html โ€” Updated selector chrome for the memory-selection boot dialog

Demo Mode

Showcase-friendly runtime for demo clusters and public trials.

Backend

  • DemoDataSeeder (395 lines), DemoMongoService (190 lines), and DemoExceptions
  • DemoController REST endpoints for seeding and resetting demo data

Frontend

  • demo-chart-creator.service.ts (216 lines) โ€” Programmatic chart creation for demos
  • demo-chart-folder-dialog โ€” Pick where seeded demo charts land
  • demoMode env flag threaded through environment.web-local.ts, environment.web-stg.ts, environment.prod.ts, and the electron envs

MongoDB Connectivity

  • Atlas SSH tunnel fix โ€” SshTunnelManager (259 lines changed) and new JschSocks5Server (213 lines) bridge JSch through a local SOCKS5 proxy so Atlas SRV/DNS-seedlist connections work over SSH; documented in docs/ATLAS_SSH_TUNNEL_FIX.md
  • PEM utilities โ€” New backend PemLoaders (162 lines) with tests (156 lines) and FE pem-utils.ts for TLS cert handling across mixed input formats
  • BulkOp (268 lines) โ€” New batched mongosh operation support under com.mongodb.mongosh.service
  • GridFS โ€” GridFSService (+268), GridFSController (+259), and FE gridfs.service (+136)
  • Mongo shell session โ€” MongoShellSessionService updates (+128)
  • MongoConnectionManager โ€” 375 lines reworked for Atlas, shard, and user-files scenarios

Accessibility & Platform Polish

  • Login form accessibility (SOZO-1148) โ€” Accessible labels added to login form inputs
  • Platform modifier hints (SOZO-1151) โ€” Ctrl instead of โŒ˜ on Windows/Linux in the My Files context menu
  • Sidebar layering fix (SOZO-1172) โ€” Operation Details sidebar no longer hidden behind the Electron title bar
  • Modal consolidation (SOZO-1173) โ€” Converted 7 inline modals in collection-mod to use modalService
  • Connection sidebar โ€” Improved tree-view search matching in the connected list

Improvements

Modals & Dialogs

  • 7 inline modals in collection-mod converted to the shared modal service for consistency (SOZO-1173)
  • Confirmation modal added for the destructive admin storage-backend switch
  • Modal fade-in / fade-out animation applied globally
  • Command palette with keyboard navigation and inline action chips

Data Grid

  • Sticky pinned columns; per-column filters with persistence; virtualized rendering; keyboard navigation with Ctrl+C TSV copy; header + cell context menus; expanded ISO 4217 currency formatting

SQL Editor

  • Monaco SQL editor gets richer syntax handling, type definitions, and inline icons for a nicer SQL editing experience

Chart Model

  • Chart model refreshed for the new TABLE / PIVOT / TREE chart types, with grid state now preserved across tab switches

Infrastructure

Backend

  • UserFilesModeValidator (218 lines) โ€” Startup-time consistency check between deployment mode and user-files config
  • UserFileTransactionalOps (659 lines) โ€” Transactional wrapper for cross-document user-file mutations
  • UserFileStorageFactory (163 lines) โ€” Swaps LocalDisk vs S3Compatible at runtime
  • User-file repository seam โ€” SzUserFileMongoDBRepositoryService (+146) with adjustments to SzGridFsUploadSessionMongoDBRepositoryService and SzUploadSessionMongoDBRepositoryService
  • ArchUnit โ€” UserFileSafetyRulesTest (412 lines) enforces production isolation of the user-files module
  • SecurityConfig and JwtAuthenticationFilter โ€” Updated after the license-filter removal
  • Test additions โ€” UserFileServiceIntegrationTest, UserFileAdminControllerIntegrationTest, UserFileControllerIntegrationTest, UserFileServiceConcurrencyTest, UserFilesLoadTest, UserFilesModeValidatorTest, UserFileServicePR13Test, UserFileStorageAdminTest, S3CompatibleUserFileStorageTest, LocalDiskUserFileStorageTest, UserFileStorageFactoryTest, S3ExtraOptionsTest, UserFileLifecycleServiceTest, UserFileReconcileServiceTest, UserFileSweepServiceTest, UserFileAuditServiceTest, UserFilesHealthServiceTest, VirtualPathTest, RecomputeUsageJobServiceTest, SecretCipherTest, UrlSafetyGuardTest, PemLoadersTest, WebUserAdminControllerReservationTest, UserFileRepoStubs, UserFileTestFixtures

Frontend

  • 15+ new My Files, Sharding, Table-widget, and command-palette UI slices with matching activity models
  • New services โ€” side-bar-manager.service.ts (+32), update.service.ts (+328), release-history.service.ts, user-file-admin.service.ts (+335), sharding.service.ts (+395), demo-chart-creator.service.ts (+216), sql-monaco-init.service.ts (+166)
  • activity-manager.service.ts โ€” New reopenLastClosedActivity(), requestNewActivity(), registerCommandPaletteItemsBuilder(), newActivityRequested$ subject; wired for the My Files and Sharding activities
  • activity-factory.service.ts โ€” Updated for the new My Files and Sharding activities
  • New environment flag โ€” demoMode threaded through every environment config

Electron & Distribution

  • Electron main.js, preload.js, and package.json bumped; package-lock.json regenerated (~2,700 lines)
  • Linux repo publishing โ€” build-linux-repos.sh, setup-linux-repos.sh, merge-platform-yml.js, r2-list-packages.js, upload-cloudflare.js
  • Signed APT/DNF keyrings โ€” Shipped under electron-app/certs/
  • memory-selector.html โ€” Updated boot screen for the memory-selection dialog

Diff scale

  • Frontend: 433 files changed, 43,880 insertions, 8,793 deletions (494 commits)
  • Backend: 193 files changed, 23,453 insertions, 2,884 deletions (281 commits)
  • ~5,600 dark: style rules touched across the frontend for the light/dark polish pass

Notes

  • The standalone Table system was fully removed as part of SOZO-1146; existing standalone tables must be re-created as TABLE, PIVOT, or TREE charts.
  • If a saved Schema Diagram looks off-center after upgrade, "Reset Zoom" will re-center it under the new pan model.
Read the full v1.0.1901 release notes

v1.0.1685

May 21, 2026

VisuaLeaf v1.0.1685 Release Notes

Release Date: May 20, 2026


Headline: Full SQL Database Support + SQL Import/Export Pipeline

This release lands the full SQL subsystem first introduced in v1.0.1542, plus a major extension that brings SQL databases and SQL dump files into the first-class import/export job pipeline (SOZO-1107). VisuaLeaf is now a true cross-engine data platform: MongoDB and PostgreSQL, MySQL/MariaDB, Microsoft SQL Server, Oracle, and SQLite can be browsed, queried, and exchanged through a unified job system, with 15 SQL activity types and a dedicated backend module (src-sql/).


New SQL Activities

  • SQL Editor (sql-editor-activity) โ€” Full SQL console with Ace/CodeMirror editors, multi-statement script splitting per dialect, live session state via SSE, and explain-plan visualization
  • SQL Table (sql-table-activity) โ€” Spreadsheet-style table browsing and editing with row-edit modals, batch update/delete, and FK preview
  • SQL Query Builder (visua-sql-query-activity) โ€” Visual, no-code SQL query construction
  • SQL Create Table (sql-create-table-activity) โ€” Visual table creation with column/constraint editor
  • SQL Table Info (sql-table-info-activity) โ€” Table schema, indexes, constraints, and DDL code viewer
  • SQL Table Statistics (sql-table-statistics-activity) โ€” Row counts, storage, and distribution stats
  • SQL Export (sql-export-activity) โ€” Export table/query results to multiple formats
  • SQL Manage Views (sql-manage-views-activity) โ€” Create, edit, and drop database views
  • SQL Manage Procedures (sql-manage-procedures-activity) โ€” Stored procedure management
  • SQL Manage Sequences (sql-manage-sequences-activity) โ€” Sequence management
  • SQL User Management (sql-user-management-activity) โ€” Users, roles, and privileges
  • SQL Events (sql-events-activity) โ€” Scheduled event management
  • SQL System Monitor (sql-system-monitor-activity) โ€” Live system monitoring with per-dialect strategies (MSSQL, MySQL, Oracle, Postgres, fallback)
  • SQL Query Profiling (sql-query-profiling-activity) โ€” Query profiler with explain-plan parsing
  • SQL Server Build Info (sql-server-build-info-activity) โ€” Server version and build metadata

SQL Infrastructure

  • Dynamic JDBC driver loading โ€” Drivers for PostgreSQL, MariaDB, MSSQL, Oracle, and SQLite loaded on demand (SQLite driver manifest added in v1.0.1542)
  • Per-dialect script splitters โ€” MariaDB, MSSQL, Oracle, PostgreSQL, SQLite
  • Per-dialect update strategies โ€” MSSQL, MySQL, Oracle, Postgres, SQLite
  • Per-dialect explain-plan parsers โ€” MariaDB, MSSQL, Oracle, PostgreSQL
  • SQL connection lifecycle โ€” Connection manager, dashboard SSE, session controllers, and connection list sidebar
  • SQL table comparison (SOZO-999) โ€” Diff tables across SQL connections with sync job support
  • SQL Sync Job Service โ€” Background compare/sync jobs between SQL sources

SQL in the Import/Export Pipeline (SOZO-1107)

SQL is now a first-class citizen in the job system used for dumps, restores, exports, transformations, and comparisons.

New source and target types

  • SqlDatabase โ€” Live SQL connection as a source/target
  • SqlDump โ€” Folder of SQL dump files (one per table, or a single combined file) as a source/target
  • SqlScript, CSV, JSON added to the MongoDatabase target list

Cross-engine strategies

  • SqlDatabase โ†’ JSON / CSV โ€” Export tables or query results to flat files (parallel per-table execution, per-collection progress, resumable)
  • SqlDatabase โ†’ SqlDatabase โ€” Move data between SQL instances of any supported dialect
  • SqlDump โ†’ SqlDatabase โ€” Restore a dump folder/file with parallel execution, savepoint-based error handling, per-statement progress tracking, and mid-file pause detection
  • MongoDatabase โ†’ SqlScript โ€” Generate a SQL script from a Mongo collection set
  • MongoDatabase โ†’ CSV / JSON โ€” Parallel per-collection export with progress and resume support; filters system collections; uses estimatedDocumentCount for size hints

Dump features

  • Single-file vs folder dump mode โ€” Pick one combined .sql file or one file per table
  • DROP / CREATE / DATA options โ€” Choose which DDL/DML sections to include
  • Portable ANSI SQL mode โ€” Generate cross-dialect-friendly output with dialect detection and dialect-compatibility tags so incompatible restores are blocked up front
  • Per-file metadata scanning โ€” /sql-dump-metadata endpoint scans a dump folder and surfaces table list, row counts, and dialect badges in the UI
  • Table size stats โ€” /sql-database-stats endpoint and per-table badges in the dump options UI; on-demand analyze
  • SqlDump source uses a folder picker (not a file picker); transformation step is hidden for SqlDatabase/SqlDump sources

Robustness & performance

  • Streaming everywhere โ€” Streaming JSON, JDBC fetchSize tuning, single-pass directory walks
  • Memory โ€” CSV/JSON files streamed instead of read into memory; SqlDump restore streams the file with batched transactions
  • Resource leaks fixed in BsonDumpRestoreService and export engines
  • Race conditions in checkpoint timing fixed
  • Audit logging โ€” Detailed per-collection audit logs for Mongo dump/restore strategies and per-statement audit logs for SQL dump restore
  • Transformation warning tracking โ€” Edge-case warnings (array transformations, missing target item paths) logged to a dedicated file

UX

  • Single-workspace selector clickable โ€” Opens workspace manager directly
  • Folder picker for SqlDatabase exports; SQL database stats panel
  • Auto-connect SQL on open when a saved connection backs an activity
  • Block incompatible SQL dump restore โ€” UI refuses to start when source and target dialects mismatch
  • Job list polish โ€” Per-table badges, duration tooltip label ("tables" for SQL, "collections" for Mongo), execution summary timeline for all MongoDatabase exports, dump operation info shown for MongoDatabase exports

Pause / Resume Across All Job Types (SOZO-1092)

  • Pause/resume support added to every remaining strategy and to inter-job sequencing
  • MongoDatabaseToSqlScript strategy now respects pause; collection progress guarded
  • Auto-cancel orphaned paused executions when starting a new run
  • Fix flickering on pause/resume by breaking on Pending status as well
  • Duplicate execution in the monitor after pause/resume fixed
  • Resumable hints surfaced for CSV and NDJSON formats

AI Assistant

  • Multi-provider AI support โ€” Added Google Gemini, Anthropic Claude, and xAI Grok (Grok 3, Grok 3 Mini, Grok 2) alongside existing providers
  • Markdown rendering in chat โ€” AI responses now render Markdown with dark-mode-aware styles
  • Debug AI mode โ€” Debug tooling for inspecting AI requests and responses
  • Configurable max tokens โ€” Per-provider max-token configuration with automatic truncation recovery
  • Shell-syntax aware parsing (SOZO-1031) โ€” AI queries and aggregations are sanitized through the shell parser for accurate syntax handling
  • Context-aware conversations (SOZO-1081) โ€” Current query/pipeline is fed to the AI on every message for better suggestions
  • Chatbot positioning (SOZO-1139) โ€” z-index lowered to 1210 (below dropdowns at 1250); top boundary respects the custom title bar

Custom Title Bar & Window Chrome

  • Custom title bar for all platforms (SOZO-842) โ€” New draggable title bar with taller height (40px), larger logo, and subtle workspace selector on macOS, Windows, and Linux
  • VS Code-style menu bar (SOZO-1015) โ€” Custom menu bar for Windows/Linux title bar with menu-action IPC handler and hidden native menu; rounded corners on Linux
  • Title bar polish (SOZO-1047) โ€” Increased Win/Linux title-bar logo/text size, adjusted vertical alignment, moved workspace gear icon to the left of the dropdown
  • Windows title bar theme (SOZO-1178) โ€” Dynamic overlay theme that follows app theme; light-mode title bar tuned to #f4f6f4 to match the overlay; border extended under the overlay with box-shadow
  • Memory Settings menu (SOZO-1137) โ€” Added to Windows/Linux menu; Developer Tools entry removed; duplicate "Getting Started" removed from File menu (kept in Help)
  • Platform modifier hints (SOZO-1156) โ€” โŒ˜ on macOS / Ctrl elsewhere now displayed consistently across modals (Getting Started, GridFS preview/zip/PDF, comparison results, job item table, export job list, section menu, keyboard shortcuts)

MongoDB Data & Workflow

  • Schema editor drag-to-reorder & sort (SOZO-992) โ€” Drag fields to reorder and sort columns in the schema editor
  • Table view interaction (SOZO-760) โ€” Background context menu and click-to-deselect in table view
  • Unmapped fields handling (SOZO-1032) โ€” "Include unmapped fields" toggle and on-missing field handling UI for imports/syncs; defaultValue now saves correctly, debounced while typing, restricted to string types, with On Missing help text
  • Query state preservation (SOZO-902) โ€” Query state preserved when relocating panels
  • Mongo-to-Mongo dump gzip (SOZO-1082) โ€” Dump operation respects the gzip flag
  • MongoScript job progress โ€” Indeterminate progress bar for single-script jobs
  • Background query loading (SOZO-1166) โ€” Collection loading continues in the background when switching tabs; background query results persist; Cancel works on tab switch; fixes stuck-loading state when switching back
  • Restricted-user collection counts (SOZO-1154) โ€” Collections no longer show (0) for MongoDB users without dbStats privilege
  • MongoBuildInfo (SOZO-1130) โ€” Safe Int / Double parsing for fields that vary by server version
  • JSON import timezone fix (SOZO-1116) โ€” Import no longer fails on ISO-8601 timezone offsets without a colon (e.g. +0530)

Improvements

Zoom System (SOZO-1049, SOZO-1070)

  • Windows zoom shortcuts (SOZO-1049) โ€” Fixed Ctrl+/โˆ’ zoom shortcuts on Windows
  • Zoom on all platforms โ€” Keyboard zoom handler extended to macOS, Windows, and Linux; native zoom menu replaced with custom handlers
  • CSS content-only zoom (SOZO-1070) โ€” Experimental CSS-based zoom with centered counter-zoomed toast (later reverted to native Electron zoom for stability)
  • Zoom layout โ€” Workspace height now uses flex: 1 instead of calc(100vh) to cooperate with zoom transforms

Windows Drag & Drop (SOZO-1029)

  • Fixed Chromium Windows drop-event bug at devicePixelRatio: 1
  • Dragover handlers attached directly to drop target elements
  • effectAllowed changed from link to all for Windows compatibility
  • Drag image kept in DOM; transparent-GIF ghost replaces canvas-based drag image at 100% zoom

Charts & Visualization

  • Scatter plot legend (SOZO-1042) โ€” Legend position fixed at smaller window sizes
  • Additional chart rendering improvements

Tabs & Navigation

  • Middle-click to close tabs (SOZO-1159) โ€” Browser-style middle-click closes a tab via window-level auxclick (no drag interference)

Theming

  • Light/dark mode for File Explorer modal and additional modals/UI components
  • Loading-state background fix in dark mode (dark:bg-slate-50 โ†’ bg-slate-50)
  • Dropdown colors on Linux/Windows (SOZO-1133) โ€” Fixed Task Manager History dropdown contrast

Forms & Dialogs

  • MongoScript job form โ€” Target and transformation fields hidden for MongoScript jobs; validation and title corrected
  • Type editor popup (SOZO-1085) โ€” No longer clipped in DB Schema collection card
  • Modal backdrop close โ€” Uses mousedown instead of click to prevent accidental close on drag-out
  • Login disclaimer modal โ€” No longer closes on outside click
  • Query builder โ€” Fixed operator autocomplete behavior; fixed deletion of disabled expression when running a query
  • SQL connection save โ€” UUID generation, name sync, dashboard refresh, and form validation all fixed
  • Dropdown positioning (SOZO-1128) โ€” Race condition and stale focus state fixed

Jobs & Exports

  • MongoScript jobs โ€” Capture print output, rethrow errors, cleaner error messages
  • Job delete โ€” Cleans up dependencies on sibling jobs
  • Field mapping (SOZO-1097) โ€” Fixed preview and transformation for query and collection exports

File Explorer & Paths

  • check-path and create-directories endpoints for path validation
  • Tilde (~) expansion in directory listing and target file/folder paths
  • Home-directory detection fix in File Explorer
  • Inline path validation with a "create directory" offer for source and target

Licensing

  • Lock state defaults from license (SOZO-1158) โ€” No license starts locked; lock state is derived from the active license rather than user-configurable in that case

Infrastructure

Backend

  • New src-sql/ module โ€” Entire SQL subsystem in its own Gradle source set: connection manager, DDL service, metadata service, monitoring service, table service, DDL controller, editor controller, dashboard SSE controller, table controller, user management controller, monitoring controller, compare controller, and sync job controller
  • Binary โ†” BsonBinary Spring Data converters โ€” New converters added; minimongo bumped to 1.6.15 for BsonBinary deserialization fix (1.6.14 intermediate)
  • Desktop mode security โ€” security.enabled now matches desktop-mode for consistent enforcement
  • Deep-link auth flow โ€” Register endpoint ensures user record exists
  • AI prompt โ€” Restored projection-only example in AI prompt
  • Electron โ€” Debug flag removed from package.json; window config adjusted for 40px title bar; traffic-light position adjusted for custom title bar; resetMemorySettings IPC handler added; toggleDevTools removed from menu actions
  • Spring bean ambiguity fix โ€” Use ExportEngineMongoToMongo instead of AbstractExportEngineMongo
  • JWT filter NPE fix in the new SQL endpoints
  • Unit test fixes and new SQL-side tests (DatabaseTypeTest, JdbcDriverLoaderServiceTest, SqlConnectionManagerTest, SqlDbConnectionConfigTest, SqlTableServiceTest, MySqlMonitoringStrategyTest), plus new tests for ChartConfigValidatorTest, MongoDocumentMapperTest, SqlDialectTest

Frontend

  • 15 new SQL activity components and matching activity models
  • New shared SQL components: sql-ace-editor, sql-codemirror-editor, sql-connection-form, sql-connection-list, sql-connection-info-dialog, sql-table-tree-view, sql-table-cell, sql-table-view-draggable, sql-query-builder, sql-query-explain (with per-dialect parsers), sql-row-edit-modal, sql-batch-update-modal, sql-batch-delete-modal, sql-fk-preview-modal, sql-user-management-container
  • Dashboard refresh wiring for SQL connection lifecycle
  • Dark-mode chat styles and AI config panels for new providers
  • FontAwesome local webfonts dropped in favor of the CDN/CSS-only flow

Diff scale

  • Frontend: 881 files changed, 142,787 insertions, 19,844 deletions
  • Backend: 431 files changed, 34,915 insertions, 2,682 deletions

Notes

  • Several intermediate commits (SOZO-1070 CSS zoom, SOZO-999 SQL compare early revisions, SOZO-1159 middle-click first attempt) were reverted and reintroduced; the shipped behavior reflects the final state.
  • SqlDump โ†’ MongoDatabase was prototyped and removed before release to keep the matrix focused on the supported cross-engine paths.
Read the full v1.0.1685 release notes

v1.0.1331-4

April 13, 2026
  • Fix Connection SSH + Replica Set Bug

Looking for the latest version?

Go to Downloads