VisuaLeaf v1.0.2416 Release Notes
Release Date: September 30 2026
Covers 1.0.2362 – 1.0.2413.
Headline: A Real Query Profiler, Tab Groups, a Faster Data Grid, Editable Tables on Four More Engines
Four things change how a day in the app feels. The Query Profiler is rebuilt — slow queries now
roll up into one row per query shape, with the collection scans and the missing indexes called out
for you. Tabs can be grouped — by connection, by database, or by hand — named, coloured,
collapsed, dragged as a block and popped into their own window. **Table Management is an editor on
SQLite, DuckDB and ClickHouse**, not a read-only screen, with undo on grid edits and a way to edit
tables the engine gives no key for. And the data grid scrolls up to 6× faster: fast scrolling
on a wide table no longer leaves the screen blank while it catches up.
Also shipping: full-screen tasks and task folders, Microsoft DocumentDB as a connection type,
Snowflake as a connection type, **XML and
Excel as export targets, guided in-app tutorials, schema awareness** in the places that still assumed there was only one, and a
much larger MCP surface for driving the app from an AI assistant.
The Query Profiler, Rebuilt
The old profiler showed you a list of slow operations. The new one answers the question you actually
have: which query is costing me, and what do I do about it?
What you can see
- One row per query, not per execution. Group by operation, by query shape — the same query with
- Counts that mean what they say. "Count 368" means 368 operations happened, not "368 is as many
- Collection scans flagged. Any query group that scanned instead of using an index is marked, and
- An index suggestion per group — with the number of queries it would help, so you see *"47
- A scatter plot of time against duration, coloured by collection and operation. Click a point to
- Stable colours. A collection keeps its colour when the time window changes, when a new
- A clear empty state. If profiling is off, the panel says so and offers to turn it on rather
different values collapses into one row — or by the exact command. Count, mean, max, total time,
docs examined against docs returned, and the plan each one used.
as we managed to download". The totals are computed across everything that matched your filter.
a scan-efficiency figure shows how much of what was read got returned.
queries need this index"* instead of 47 separate warnings.
open the full query behind it.
namespace appears, and between the chart and the table below it.
than showing you a blank screen.
What you can do
- Filter by collection, operation and time window — the chart and the table always agree,
- Drill into a group and see the real operations behind it, including the raw profiler entry.
- Set the profiler level, the slow threshold and the sample rate from the panel, without the
- Watch what is running right now and kill a stuck operation in one click.
because they are built from the same filter.
shell.
Tab Groups
The tab strip was flat, and a workspace with fifteen tabs across four connections read as fifteen
unrelated things.
What you can do
- Organize automatically. The tab strip's
▾menu gets an Organize row — None, - Or group by hand. Right-click a tab → Add to New Group, then rename it, give it a colour, and
- Collapse a group to a single
▸ Name (n)chip. Pick a tab from the dropdown that lives inside - Move a whole group. Drag the header and the entire block lands where the indicator showed, in
- Close or pop out a group from the header's hover buttons, or Ungroup and keep every tab
- Everything survives a reload and a restart — the grouping, the collapse state, the colours and
Connection, Database. Pick one and tabs that belong together sit together behind a group
header showing the engine logo, the name and a count.
drag other tabs in. Custom groups and automatic grouping coexist; switching between them loses
neither your colours nor which groups were collapsed.
a collapsed group and it expands itself to show you.
its original internal order. Drag it out of the window and the whole group pops into a window of
its own, still grouped.
open.
the order you dragged them into.
Tabs with no single connection — Data Sync, Compare, User Management — collect in a trailing
Other group instead of scattering.
Alongside it, the tab right-click menu grew: Clone Tab, Reveal in Sidebar, Split Right /
Split Down, Close Tabs to the left / right / others / all, and **Return All Tabs to Main
Window** from a popout.
A Faster Data Grid
Both the MongoDB table view and the SQL grid were rebuilt for scrolling, and the tree view got the
same treatment.
- Up to 6× faster scrolling on wide tables. Scrolling sideways across 150 columns used to cost
- Fast scrolling fills in as you go. A quick fling down a big table used to leave most of the
- Reordering columns no longer lags on tables with many rows on screen. Holding a column still
- The tree view scrolls smoothly on large result sets. Scrolling through thousands of documents
- Resizing rows is smooth. Dragging the row height used to redraw every cell for every pixel
- Resizing a column no longer draws the table's right border through the last column.
about three frames per step. It now fits in one.
grid blank until you stopped. Now the grid keeps drawing the whole way, and at most a thin strip
at the leading edge is ever empty.
over the header costs nothing.
no longer stutters as rows come into view.
the mouse moved. It now keeps up with the pointer, even on a full screen of data.
Table Management Is Now an Editor — SQLite, DuckDB and ClickHouse
Until now these three engines showed you their table structure and refused to change it. All three
can be edited, and each one tells you exactly what it can and cannot do rather than failing at Save.
- DuckDB — add, drop, rename and retype columns, change nullability, defaults and comments,
- SQLite — the same editing surface, on an engine whose own
ALTER TABLEdoes not have most of - ClickHouse — column and table changes, comments and check constraints. A **type change is
- What an engine cannot do is greyed out with a reason — primary keys, foreign keys, partitions
rename the table.
these operations. Existing indexes, triggers and views are preserved through the change, and a
failed edit leaves the original table exactly as it was.
checked before anything is run**: if any row could not be converted, the edit is refused up front
with the number of rows that would have failed. This matters more on ClickHouse than anywhere
else, because a half-applied retype there leaves a table that cannot be read at all.
— instead of being offered and then rejected.
Editing rows on tables with no key
- Nominate the columns that identify a row. For a table the engine gives no primary key for — a
- The dialog is honest about what you are promising. Nothing validates uniqueness; if the
- A nominated key is never presented as a real one. Export jobs, ERD diagrams, mock-data
- On a shared connection, only someone with write access can nominate a key. Everyone who
view, a Snowflake table, a ClickHouse MergeTree — you can tell VisuaLeaf which combination of
columns identifies a row, and the grid becomes editable.
combination is not unique an edit touches more rows than you meant, and it says so in the first
sentence. Columns that cannot work as a key — nullable ones, floating-point ones, blobs — cannot
be picked, each with its own reason.
generation and schema views keep treating the table as keyless, so nothing silently starts
building upserts on a promise.
edits through that connection relies on it, so a read-only collaborator cannot set one.
Undo on grid edits
- Ctrl/⌘-Z after a cell edit, an insert or a delete now reverses it against the database.
- Editing a primary key column and then undoing works — the revert targets the row where it
actually is now, not where it used to be.
Snowflake
- Snowflake is a selectable connection type, with its tree, metadata, query execution, explain
- A fresh Snowflake connection shows your databases, not the account's internals. Snowflake's own
- Snowflake has its own logo in the engine picker, the connection lists and tab breadcrumbs,
and table editing wired through the same paths as every other engine.
~20 internal schemas no longer fill the tree ahead of your data.
instead of the generic grey database icon.
ClickHouse also moves to a newer driver: table primary keys are reported correctly (so the grid
lets you edit), and opening a connection no longer stalls for around thirty seconds before the
database list appears. ClickHouse tables sorted by an expression are editable. A table whose
key uses something like toDate(order_time) used to open with every column read-only. Now only the
key columns are locked, which ClickHouse itself will not let you change. **Results of your own SQL
on ClickHouse can be edited too.** They used to
open read-only whenever the table lived in a database other than the one the connection opened on.
Microsoft DocumentDB, and Recognising Which DocumentDB You Have
Microsoft DocumentDB (the open-source engine that also runs Cosmos DB vCore) is now its own
connection type, separate from Amazon DocumentDB. The two share a name and a protocol but are
unrelated engines with different limits, and the app now treats each one by its own rules.
What you can see
- Compatibility warnings that match your engine. Index types, pipeline stages and collection
- A clear answer where a feature cannot work. Microsoft DocumentDB has no profiler and no server
- Each DocumentDB has its own logo in the connection lists, the engine picker and tab
options are marked by what your server supports. On Microsoft DocumentDB, text, hashed and
geospatial indexes, $text, $setWindowFields, $unionWith and more are no longer flagged,
because Microsoft's engine supports them where Amazon's does not.
metrics, so the Query Profiler and server monitoring explain that up front instead of showing an
empty screen.
breadcrumbs.
What you can do
- Pick Microsoft DocumentDB in the New Connection form's engine picker.
- Let the app notice for you. Microsoft DocumentDB, Amazon DocumentDB, MongoDB and Cosmos DB
- See it in Test Connection too. If the server or its hostname doesn't match the type you picked
- Nothing changes without you. Other Mongo-compatible servers are never mislabelled, and a type
accept the same connection strings, so it is easy to save one as another. When a connection saved
as MongoDB turns out to be Microsoft DocumentDB, you are asked once whether to switch. Answer
either way and you are not asked again. Close the prompt and it asks next time.
in the form, the result says "This looks like …" with a one-click Switch button.
you chose yourself is never questioned.
Guided Tutorials
- A Tutorials playlist listing every guided tour the app ships, with how many steps each one
- Tours coach rather than drive. A step that teaches an action waits for you to do it and then
- The app gets out of your way. A tour opens the sidebar and expands the tree to whatever it is
- The Getting Started window is clearer. It has two paths side by side: Explore a demo (a
- Tutorials for features your plan does not include stay visible, marked, so you can see what
takes and which ones you have already finished.
moves on by itself — the control is the lesson, not a Next button — but Next is always there if
you would rather read than click, and Escape ends a tour from anywhere.
about to point at, so you are never hunting for the thing being explained.
MongoDB and a SQLite sample, each saying what's inside) or Connect your database, with the
engine logos showing that it isn't MongoDB-only. Once this machine has used its free trial, the
trial offer becomes a sign-in option instead.
exists rather than concluding it does not.
Schemas, Everywhere They Were Missing
Several parts of the app stopped at connection → database and assumed whatever schema the engine
looked in first. On PostgreSQL, Oracle, SQL Server and DB2 that is a silent wrong answer, not an
error.
- SQL scripts remember their schema. A new editor asks for it, keeps it, and autocompletes
- Tasks, Export Data and Import Data address a table as connection → database → schema → table.
- The Mock Data generator writes into the schema you chose — creating the tables there, pointing
- Sequences and Procedures are schema-scoped rather than showing everything on the connection.
- The SQL query builder qualifies tables properly, so a query built against
stagingruns
against it.
An export that used to quietly read public.customers now reads the table you picked.
foreign keys there, and reading the existing schema from there. It also applies the blueprint's
database, which it previously ignored entirely.
against staging.
XML and Excel Export
- Export to XML and Excel (
.xlsx) wherever CSV was already offered — one-off exports and - Excel gets real cells, not text. Numbers sort and sum, dates are dates. Very large exports cost
- XML keeps your structure. Sub-documents and arrays nest as elements instead of being flattened
scheduled jobs, from both MongoDB and SQL sources, with the same field mapping, progress,
pause/cancel and resume you already had.
no more memory than small ones, and a source with more rows than a sheet can hold continues onto
further sheets rather than stopping at the limit.
into a string.
AI Assistant Control (MCP)
MCP shipped last release as a first cut. This release roughly doubles what an assistant can do with
it, and fixes the thing that annoyed everyone first.
- The switch stays where you put it. Turning MCP on — and, more importantly, turning it off —
- It can open any panel the app has, not the handful that were hand-listed: the JSON Schema tab,
- It can look at your schema before writing a query — list the tables in a SQL database or the
- It can hand you a pipeline to edit. Ask for an aggregation and it opens the builder with the
- It can build up scheduled work properly — not just create a task, but add, change and remove
- It can open the collection stats panel, the create-collection form and the mock data builder,
- It can work with ER diagrams. It can list, open, generate from a database, edit, auto-arrange,
- It can compare two collections and read or show the differences. Applying those differences
- It can change the app's appearance, such as theme, interface font and default result view,
- It can fill in a New Connection form for you. It cannot save one. The assistant picks the
- Tabs it opens come out right. A SQL table opened by the assistant now has its real name, the
- It is told what actually happened. If a panel was already open and got focused instead, or
- Opening a panel that reads from a database counts as reading data, not as navigation — so
- MCP is a licensed feature. If your licence does not include it, the settings panel and the
- Your plan applies to the assistant too. A tool whose feature your licence does not cover is
now survives a restart.
the index manager, table statistics, create-table, the view and procedure managers, and the rest.
It can also ask which kinds of panel this build offers.
collections in a Mongo one, read one table's columns, types and keys, and pull a handful of real
rows.
stages already in it, editable, rather than pasting text at you.
the jobs inside it, set a schedule, and read or adjust the run queue's settings.
pre-filled as far as it can get.
save, export (as DDL and more) and delete saved diagrams. Deleting removes the drawing only, never
a table or a collection.
writes to a database, so it has its own permission switch, separate from comparing.
just like Settings → Appearance.
engine and types the host, port, database and user. The form shows a banner saying an AI agent
filled it in, and nothing is stored until you check it and press Save. A password it passes goes
into the form's password field only. It is never stored, logged or read back.
connection's name in the breadcrumb, the right engine (a MySQL or ClickHouse tab no longer
generates PostgreSQL), and the schema it asked for. A SQLite table no longer opens blank.
lives in another window, the assistant hears that. Before, it was told the panel had opened.
"let it arrange my tabs" can never become a way around "don't let it look at my data".
status bar say so instead of offering a switch. If you downgrade with MCP switched on, it shows as
off, and your setting comes back when you upgrade again.
refused for the same reason the screen would refuse it.
Improvements
SQL Editor & Data Grid
- SQLite and DuckDB editors no longer freeze on "Execution started…". The query had run and the
- Expand a JSON column recursively. One action opens the whole subtree instead of its first
- Import and Export buttons in the toolbar of both the SQL grid and the Mongo collection view.
- Selecting rows in the SQL tree view reaches the toolbar's batch actions again.
- Run a SQL script straight from a connection (SOZO-1553). An editor opened on a connection with
- Explain has Plan, SQL and JSON tabs. Next to the visual plan you can read the exact statement
- Expanding a field in aggregation results expands only that row. Results with no
_id, or - Explain works on ClickHouse. Every Explain on every ClickHouse connection used to come back as
rows had come back; the tab never heard about it. Stop did nothing for the same reason. Fixed —
and it also fixes the rarer case of the same freeze on a fast connection to any engine.
level, with sensible limits so a deeply nested document does not produce a thousand columns.
They were reachable only by right-clicking before. A read-only result or a view still exports — it
just cannot be written to.
no database picked had Run, Run All and Run at Cursor greyed out, even though the query would run
fine against the connection's default database. They are enabled now. Saving DDL still asks for
a database.
that was explained and the engine's raw plan output, and copy either with one click.
with a null or compound one (a $group, say), used to share one identity: expanding a field on
one row expanded it on every row, and search jumped to the first document instead of the match.
the engine's own syntax error; the plan now renders like any other engine's.
Tasks
- Open a task or a folder full screen. Click its name, or use the expand button or the
- A breadcrumb walks you back (Task Manager › folder › task). Each part goes up one level, and
- Step through tasks with Previous / Next (Alt+← / Alt+→) without going back to the list, with a
- The Task Manager remembers where you were. Switching to Monitor or History and back keeps the
- Folder header buttons have proper tooltips. Sort buttons show the current direction and say
- Choosing a target database type is searchable. Type to filter the engine list instead of
right-click menu, and the Task Manager shows just that task or folder.
Esc exits.
position counter (3 / 12).
task or folder you had open, your search and your scroll position.
that clicking reverses it.
scrolling a long dropdown.
Connections
- Test Connection tells you what is missing (SOZO-1552). With a required field left blank, it
- The Projects count in the sidebar is right (SOZO-1555). Three projects no longer show as
used to do nothing. It now names the missing fields and highlights them. The test result also
scrolls into view, so a failure is never hidden above the fold.
(30).
User Management
- Connections show their real engine logo in the user management list. SQL connections used to
get a generic database icon.
Query Profiler
- The profiler's scrollbars match dark mode. The desktop app used to show a bright white scroll
track beside the table.
Workspaces & Tabs
- Changing the theme updates every window at once. Popout windows used to keep the old theme
until they were reloaded.
- The data viewer is part of your workspace. Its tabs come back after a reload or a restart like
- Panels opened in the background announce themselves instead of looking stuck.
everything else.
Licensing
- The trial-expired dialog reads correctly in light mode.
Notifications
- Quick confirmations are solid coloured pills again. Copy, undo/redo and document
insert/update/delete confirmations in the bottom-right corner can be read at a glance.
Cluster & Sharding
- The sharding and cluster overview screens were reworked for readability — the same information,
laid out so the state of the cluster reads at a glance.
Query Builder
- Text in the query builder is sharp again on every zoom level and on high-DPI displays.
Infrastructure
- System objects are classified from the engine's own metadata rather than from lists of names
- Test databases for development now seed a multi-schema fixture on PostgreSQL, Oracle and SQL
- Expanded automated coverage across the new engine strategies, tab grouping and drag behaviour,
written per engine, so a new engine's internal schemas are recognised without a code change and a
user schema is never hidden for having an unlucky name.
Server, so schema-related behaviour is exercised rather than assumed.
virtual keys (including a guard that keeps a nominated key out of anything that reports what the
database says), export writers and the SQL type layer, including tests that run against the real
SQLite, DuckDB and ClickHouse engines.
Notes
- ClickHouse connections download a newer driver on first connect after upgrading. An offline
- Snowflake connections pin a compatibility option in their connection string. Leave it in place;
- Tab grouping needs both the app and the backend on this version. Against an older backend the
- Don't downgrade below this version after saving a Microsoft DocumentDB connection. Older
- MCP now needs a licence that includes it. A plan without it cannot connect an assistant, and
- Treat your MCP token like a password. Anyone holding it can drive that window.
machine that has only the previous driver cached can still select it on the connection.
without it, connections open and the tree browses fine but every query fails.
grouping works until you reload and then silently resets.
versions do not know the new type and may fail to load your connection list. This version and
later read an unknown type as MongoDB instead.
the MCP settings say so.