Changelog
Vantage 0.31
27 July 2026
Vantage 0.31
Search is gone from grids and dropdowns. It only ever filtered the rows already loaded on your machine, so on a large table it quietly searched a slice of your data and presented the result as if it were all of it — narrower than what you asked for, with nothing to tell you so. Filter buttons and column sorting are unaffected, and search will return once it can put the question to the datasource instead of guessing locally.
What's new
- The search box is removed from data grids and from reference dropdowns. Use the filter buttons above a grid to narrow rows, and the column headers to sort.
- Fix: on framework pages, a record's id could show as a chunk of raw machine text instead of its readable form.
- Fix: timestamps stored as whole seconds showed as a bare number in page elements, while the same value read correctly in a grid cell.
- Fix: the same expression could print a number two ways —
3in one place,3.0in another — depending on where on the page it appeared.
0.31.1
- Fix: a grid could open empty and stay empty, then fill instantly if you clicked the same menu item again.
- Fix: a grid showed "no rows" for a moment before its rows arrived. While it's still loading you now get a loading placeholder, and the empty message only appears once there's really nothing to show.
- Fix: figures on a dashboard could sit at zero on a first run and never move.
- Fix: opening a project left more files behind on disk than it needed to — each project now keeps one cache file per data source.
Raw file: changelog-0.31.md
Vantage 0.30
27 July 2026
Vantage 0.30
Two things this release, and they meet in the middle. Pages can now follow a single record instead of a whole table, so a row opens into a screen built for it. And a page can host a widget that Vantage itself doesn't ship — starting with a real map, which arrives as a separate download you drop beside your project rather than weight in the app.
What's new
- A page for one record. A page can name the record it follows, and everything on it reads from that record. Vantage holds the page behind a spinner until the record is fully loaded — including any columns pulled from a second source — so you never see a half-drawn screen, and a record that can't be loaded says so plainly instead of rendering blank.
- Open a record from a row. A row action can open one of these pages for the row you clicked, and the sidebar can link straight to a specific record. Opening a second record reuses the same tab instead of piling up — unless you pin it, in which case the next one opens alongside.
- Maps. A page can host a map: drag to pan, scroll to zoom, with the momentum and feel you expect. Give it your data — a GPS trail, a boundary, a point of interest — and it draws it over the basemap, then frames the view on what you asked for. It's a plugin, so the app doesn't carry a mapping stack for projects that never show a map.
- Plugin widgets. Widgets can come from outside the app. Drop one into your project's
pluginsfolder and any page can place it; a widget whose plugin isn't installed shows a clear note in the space it would occupy rather than breaking the page. Plugins can also add functions your pages can call, so installing one extends what your project can script. - Filter buttons on data pages. A data page can offer named filters as buttons above the grid — click to narrow to matching rows, click again to clear. They read as chips you can dismiss, and they work on computed columns too, not just stored ones.
- Columns from a second source. A table can borrow columns from another data source and show them alongside its own — a file store's contents beside a database's records, say. They fill in as they arrive, and you can sort, search, and filter on them like any other column.
- Pictures, dividers, and framed sections. Pages gained an image element that renders a picture from a path, a labelled divider for splitting a page into sections, and framed columns that draw as cards.
0.30.1
- Fix: on a table that borrows columns from another source, scrolling or moving the pointer over the grid made rows jump into a different order for an instant — the top row blanking out and snapping back.
- Fix: those tables kept working away in the background long after they finished loading, re-asking about rows the other source had nothing for. They settle now once the last column has arrived.
Raw file: changelog-0.30.md
Vantage 0.29
27 July 2026
Vantage 0.29
Dates and times finally read like dates and times. Every timestamp column now renders in a clean, readable form instead of a raw machine string, and you choose how much detail to show — down to the millisecond, or as coarse as a year. Editing them got a proper picker, too.
What's new
- Readable dates, at the precision you want. A date column no longer shows a raw
2027-07-22T20:26:13.902258674Z. It renders as a clean date and time, and you pick how much to show per column: full timestamp with milliseconds, date and time, date only, or just the year. The stored value keeps its full precision either way — hiding the seconds doesn't throw them away, and the same column can show year-only on an overview grid while a detail view shows the whole timestamp. - A real date & time editor. Editing a date field now gives you a text box with a calendar button beside it. Open the calendar to click a day, and jump years fast from the year caption — handy for birthdays and anything far in the past.
- Paste a date from anywhere. Copy a date out of an email, a spreadsheet, or another app and
paste it straight into the field — it doesn't have to match the field's format.
July 22, 2027,07/22/2027, an ISO timestamp, or a bare year all get understood and tidied up.
0.29.1
- Columns that pack several values now read as one clean line. A field that used to show up
blank or as a raw blob — a contact bundled with its email and phone, a nested record — can be laid
out as a readable summary like
Peter O'Mahony <peter@example.com>, +353…, so you see the gist without opening the row. - Copy a single piece straight from the cell. Right-click one of these cells and pick exactly what you want on the clipboard — just the name, just the email, just the phone, or the whole thing — instead of copying the entire cell and trimming it by hand.
0.29.2
- Custom form layouts. Drop a
form/<name>.yamlinto your project and point a page at it (form: <name>) — the same layout drives the details panel and the add/edit dialogs. Titled sections, fields pinned side by side on one line, multi-column spreads, a notes box across the whole row. Without a layout file, the default form over the table's columns still applies. - Column counts follow the available space. The same layout renders three columns in a wide tab, one in a narrow side panel. Checkbox clusters stay compact after text fields go single-column.
- Conditional sections. A section with
when: 'record.kind == "company"'(the same expressions views use) appears only while the condition holds; hidden fields stay out of the save. - A failed save keeps your edits. Your values stay in the fields, still marked as edited, and a field the server rejected shows its message right under the input until you change it.
- Unsaved changes are visible per field. An
editedtag and a highlighted label on each changed field, a count in the footer, and Revert to put everything back. - Forms stay current while you edit. Changes from other users or a live datasource land in the fields you haven't touched; the one you're typing in holds your version.
- Enter submits. Works in any single-line field, in dialogs and detail panels alike; multi-line fields keep Enter for new lines.
- Duplicate-proof creates. A new record gets its identity when the form opens, so retrying Create after a network hiccup updates that record instead of adding another.
- Long forms render only what's on screen, with an accurate scrollbar from the first frame.
- Fix: edit forms no longer show phantom "unsaved changes" on records with date or decimal columns.
- Fix: clicking a field's label now focuses the field.
0.29.3
- Tables update themselves. When data changes outside the app — a colleague editing a record, a script loading a batch, another system writing in — it appears on screen on its own, usually within a second. No refresh button, no waiting for the next tick. Grids, detail tabs and the lists inside them all follow along. This is on wherever your database can announce its own changes (SurrealDB projects get it with no setup); everything else refreshes exactly as it did before.
Raw file: changelog-0.29.md
Vantage 0.28
23 July 2026
Vantage 0.28
Vantage tables grew up: you can now edit, add, and delete records right from any data page. Forms save only what you actually changed, related records pick from searchable dropdowns, and a round of performance work made the whole app stop freezing.
What's new
- Edit records. Open a record's details and change it — Save writes only the fields you touched, Revert puts them back, and the footer counts your unsaved changes as you type. While a form is open, fields you haven't touched keep tracking live changes from the data source instead of going stale.
- Add and delete records. Data pages gained toolbar buttons to create a record and delete the selected one (with a confirmation). Creating is safe to fumble: clicking Save twice can't produce a duplicate.
- Pick related records from a dropdown. A column that references another table now renders as
a searchable dropdown of that table's records — type to filter, pick by name, and the reference
is saved. Columns with declared
enum:values become a dropdown of exactly those choices. - Click through to related records. A grid column showing a value from a related record (like an author's name on a books table) can declare a link — clicking the value jumps straight to that record.
- Fix: random freezes. The app's working cache lived inside your (often iCloud-synced) project folder, where macOS could quietly evict it to the cloud — and the app would lock up re-downloading it mid-click. The cache now lives in the system cache folder where it belongs.
- Fix: long sessions stay lean. Closing a page now releases everything it was holding — data pipelines, caches, watchers — instead of accumulating them until restart.
0.28.1
- Fix: adding records to tables with numeric ids. Creating a record on a plain SQL table with an integer id column failed silently — the row never landed. Creates now work out of the box.
- Fix: saving a picked related record. Choosing a value from a reference dropdown could crash the app or fail the save with a cryptic database error.
- Errors you can read and copy. When a save or delete fails, the form shows a proper alert box — full message, the details that matter, and a copy button — instead of a clipped line or nothing.
- Delete owns its outcome. The confirm dialog waits for the delete to land: a record still referenced by others explains exactly that ("Cannot delete — referenced by: books"), and a successful delete cleans up the selection and row count.
- Toolbar, reorganised. Add and Delete lead with labels and proper icons, the search box says Search, and refresh reads Force-refresh on pages that already auto-refresh. The redundant table title is gone — the tab has it, and the Add dialog is named after the table instead.
- Drill-down you can see and undo. Opening related records (an author's books) shows a small filter chip on the grid — dismiss it to see the whole table. The tab is named after the record you came from.
- Forms feel right. Enter submits create/edit dialogs, there's a single button row, and Revert only appears where it can actually revert something.
- Instant repaints. Grids and forms repaint the moment data arrives instead of up to a second later.
- Three times the icons. The
icon:set in YAML grew from ~100 to 300+ Lucide icons — menus, toolbar actions, and row actions can name any of them. - Updates announce themselves. The title-bar button now says "Update to X", then "Restart to Update" once it's installed; the app checks for updates shortly after launch and hourly. Agents can ask the app about its version through MCP.
- New projects land in ~/Vantage. Out of
~/Documents, where iCloud eviction kept freezing cold starts.
0.28.2
- Reference dropdowns show the current pick right away. Flipping between records now names the linked record (the batch's golf course, a book's author) the instant the form opens — no more blank field while a big list loads. If the linked record changes elsewhere, the name updates on its own.
- Reference dropdowns open faster and search as you type. The list of choices loads when you open the dropdown, not up front, and long lists stream in as you scroll. Typing filters them.
- Fix: phantom "unsaved change" on a reference field. A form could show one unsaved change you never made — and risk blanking the reference on Save. Reference and typed fields now compare cleanly, so the count reflects only what you actually edited.
Raw file: changelog-0.28.md
Vantage 0.27
21 July 2026
Vantage 0.27
Columns can show more than what's stored — a value looked up from a related record, or worked out on the fly — dates read the way people write them, and tap-to-copy on everything. Dashboards gained trend badges and charts that shrink to fit, and hosted SurrealDB Cloud connects out of the box.
What's new
- Columns that look things up. A table column can now show a value from a related record — a batch's name beside each tag, a course name beside each booking — or a value worked out from the row, without storing it in your database. Works on SurrealDB, SQL, and REST datasources.
- Dates you can actually read. Timestamps in summary and detail views render in a friendly, human form — "2 days ago", "15 Jul 14:32" — instead of raw machine strings.
- Copy anything. Every value is selectable, double-click copies the whole thing, and a small copy icon sits next to the ones you reach for most — with a quick "Copied to clipboard" to confirm.
- Trend badges on your stats. A dashboard stat can show how it's moved recently — a green "+3" or red "−2" beside the number, with a tooltip explaining the window — so a KPI tells you direction at a glance, not just today's count.
- Charts that stay put. Pie and donut charts shrink to fit their tile as the window narrows instead of spilling over their neighbours, and tall dashboards scroll so nothing gets cut off at the bottom.
- Connect to SurrealDB Cloud. SurrealDB datasources can authenticate at the namespace level, so a hosted SurrealDB Cloud instance connects with the credentials it expects.
- Secrets stay out of your config. REST datasources can pull auth tokens and credentials from environment variables instead of hard-coding them in the project, and can send fixed query parameters on every request.
0.27.1
- Onboarding, one hop from your secrets. The connect-your-data cards for backends that need a stored credential now show a button that jumps straight to the secrets editor, so you can drop in a connection string or API key without hunting for where it lives.
- Fix: the Mac download now installs properly. The downloaded disk image opens an installer window that asks you to drag Vantage into your Applications folder, instead of leaving you to run it from the read-only image — which is what quietly blocked in-app updates. Install it, launch it from Applications, and updates apply as they should.
Raw file: changelog-0.27.md
Vantage 0.26
17 July 2026
Vantage 0.26
Opening Vantage for the first time is a whole new experience: no more empty screen in a hidden
folder — the app now opens on a splash with three ways in, and everything it creates for you lands
in ~/Documents/vantage.
What's new
- A real front door. With no project open, Vantage shows a splash: connect your own data, try a playground of sample data, or open a downloadable example — plus a wide button for a project folder you already have (including one you just cloned from git). Creating a project is no longer a separate step; it happens as a side effect of picking what you want to do. The splash stays one click away under "Welcome / New Project" in the project switcher.
- Try with sample data. One click builds a courier-service playground — a live delivery board, cities, orders, customers and couriers — entirely from generated data. No install, no network, no account.
- The app tells you where your data stands. Any project running on fake data keeps a slim banner up saying so, for as long as the fake datasource is active. A project with no datasources — or none that managed to connect — gets a banner too, pointing you at the fix. Each one hands you off to your AI agent in one click.
- Set up with AI, without the setup. The AI path no longer asks you to pick data kinds first. Name your app, press Start, and you land on a three-step guide: open the folder in your agent, say what you want, watch your first datasource appear. Skills for every backend are pre-installed — the agent figures out the rest with you.
- Examples, one click from the splash. A small picker lists curated examples (Bakery,
Launch Control, Periscope) and runs them through the same download-and-review installer as
website links. Installed examples land in
~/Documents/vantagetoo. - Generated data got relational. Fake tables whose columns reference another table now point at real rows there, so drilling from a customer into their orders works on sample data the same way it does on a live database.
0.26.1
- A head start for your AI agent. Projects you create now come pre-wired: the app's feedback loop is already connected to your agent, and the everyday data commands (SQLite, Python, the database CLIs) are pre-approved — so the agent starts building instead of stopping for setup and a permission prompt at every step.
- Agents skip the planning ceremony. The bundled instructions now tell your assistant that Vantage apps are thin: brainstorm briefly, connect your data, and start putting pages on screen — no write-a-spec-then-a-plan detour before anything appears.
- Recent projects stay tidy. A project whose folder you deleted or moved drops off the recents list on its own, and opening the app no longer tries to reopen a project that isn't there — you land on the welcome screen instead.
- Fix: a project created through the connect-your-data or sample-data path could end up impossible to reopen. New projects now open reliably every time.
- Fix: opening a folder that couldn't be read used to fail silently; it now tells you what went wrong.
0.26.2
- Your agent shows results before asking questions. The bundled instructions were rebuilt around a show-first flow: a couple of opening questions, then a working page in your menu — structure, sample data and looks decided for you, refined in later passes once you can see real screens. The agent checks its own work through the app's feedback tools instead of asking "did that work?", and wraps up in plain words rather than YAML.
- SQLite is now a first-class scenario. The connect-your-data picker offers a local single-file database — no server, no credentials — and the agent knows how to grow it one table at a time: sample rows arrive when a table is first created, and anything touching data you already have gets asked about first.
- The instructions match the app again. Pages, dashboards, actions and column styling are documented as they actually work today — including chart tiles, summary views, terminal actions and per-column widths and colours — so agent-built apps validate on the first save far more often.
0.26.3
- Aggregate views on every SQL database. A table can now be defined by a query — grouped totals, top-N rankings, filtered worklists, or a modified variant of another table — on SQLite, Postgres and MySQL, just like SurrealDB. Dashboards chart these directly, no views or stored procedures in your database needed, and your agent has a dedicated guide for building them.
0.26.4
- Choose where your projects live. New projects still land in
~/Documents/vantageby default, but the welcome screen's "Connect your data" card now shows where the project will be created, with a folder button in the name field to pick a different spot. The location you pick is remembered and used for every project you create from then on.
Raw file: changelog-0.26.md
Vantage 0.25
16 July 2026
Vantage 0.25
What's new
- Sign in to a cloud data source. A SurrealDB data source can now reach a hosted (cloud) instance and log you in through your browser — you sign in with your identity provider (for example Google, via Auth0) and Vantage connects using the token it hands back, instead of a shared database password. Your login is remembered, so the next launch reconnects on its own.
0.25.1
- Fix: SurrealDB record IDs and timestamps could show up blank or as raw numbers instead of their real value.
Raw file: changelog-0.25.md
Vantage 0.24
16 July 2026
Vantage 0.24
What's new
- Browse a tree like a file manager. A new
findercomponent turns a path-shaped source into a Finder-style browser: a breadcrumb and an expandable folder tree beside the selected folder's listing, with byte-humanized sizes and Finder-style timestamps. Expanding a folder opens just that path's data and collapsing closes it, so deep trees stay light — and pointed at a live source the listing moves on its own as files come and go. The selected path is published for the rest of the page to read.
Raw file: changelog-0.24.md
Vantage 0.23
16 July 2026
Vantage 0.23
What's new
- Pages now say what they observe. The key that points a grid, stat, or chart at its
data is now
observe:—observe: launchesreads like what it does, and the editor's autocomplete follows suit. Existing pages keep working: the oldtable:spelling is still accepted. - Stats that keep moving. A stat can carry a small
project:formula that keeps its number gliding between data updates — altitude climbs smoothly using velocity instead of jumping once a second. The projection corrects itself whenever fresh data lands, and if the feed stalls it freezes at the last honest value instead of guessing on.
Raw file: changelog-0.23.md
Vantage 0.22
4 July 2026
Vantage 0.22
Every page now runs on one page language. The body: grammar that newer pages already used is
now the only one — it gained everything the old elements: pages could do, plus a lot they
couldn't, and the old grammar is gone.
What's new
- One way to write a page. Pages are a
body:list of components — grids, charts, lists, forms, selects, binders — nested in rows and columns. The oldelements:/layout:page format no longer loads; a page still written that way shows a clear error naming the file. Every bundled example app ships migrated, and the YAML editor's schema hints now describe the real grammar instead of flagging valid pages. - Binder pages feel instant. The master-detail screen (grid on top, tabs below) was rebuilt: arrow-keying through rows re-targets the tabs immediately without reloading the page, the details form fills in place instead of blanking first, and the split between grid and tabs is draggable. Tabs cover a hand-authored summary view, the record's details, and one tab per related table — plus toolbar buttons and right-click row actions, same as before.
- Grids that keep themselves fresh. Give any grid, crud, or binder a
refresh_intervaland it re-pulls on that cadence — new rows appear and float to their sorted spot without you touching anything, and an unchanged pull repaints nothing. - Dashboards you can filter. A select can now take its options from a table (with an "All" entry), and chart bindings can narrow on it — pick a namespace and the pod charts re-scope while the cluster-wide ones stay put.
- Drill-downs go anywhere. Clicking a relation cell or "Related →" opens the target page narrowed to just the reachable records — from any page, including chained walks (namespace → deployments → pods stacked on one page). Re-selecting a row you've visited is instant instead of refetching.
- Cleaner data traffic. Pages stopped fetching the same rows twice per refresh, values no longer blink while a refresh lands, and a probing script that asks a source for something it can't do gets a plain answer instead of spraying errors into the log.
- Stricter config checks. A datasource or table that reads anything other than
profile.*orsecret.*in a${...}placeholder is flagged at load time — connection details must come from the active profile, so switching profiles cleanly swaps everything.
Raw file: changelog-0.22.md
Vantage 0.21
3 July 2026
Vantage 0.21
A round of smaller improvements to how tables, sorting, and live data behave — plus a new faker data source so you can try any of it without a backend to wire up.
What's new
- Faster, sturdier sorting. When your data source can sort for you, Vantage now lets it — the order is applied where the data lives and the grid just shows the result, instead of re-sorting everything on your machine. For sources that can't, the built-in sorting got more robust and now keeps rows in the right order in more cases, including numeric columns that used to sort oddly.
- Your selection stays put. When rows shift around under you — on a live feed or after a refresh — the highlight stays on the item you picked as it moves. If that item is gone, the selection clears instead of jumping to whatever slid into its place.
- Sortable pie charts. A pie chart can now be ordered, so its slices come out in a sensible sequence instead of whatever order the data happened to arrive in.
- A "faker" data source. Add one from the datasource dialog and its tables fill with realistic synthetic rows — names, emails, cities, amounts. A table can sit still or run "live": rows appear about once a second and expire a few seconds later, so you can watch grids, lists, and charts react in real time. Handy for demos, or for trying a dashboard layout before the real data lands.
Raw file: changelog-0.21.md
Vantage 0.20
29 June 2026
Vantage 0.20
Vantage talks to Kubernetes now: point a datasource at your cluster and browse pods, deployments, and the rest of the API as plain tables.
What's new
- Connect to Kubernetes. Add a Kubernetes datasource and browse your cluster's resources — pods, deployments, nodes, and more — as tables, the same way you'd browse any other data source. It connects through your current kubeconfig context, and you can pin a table to a single namespace.
- A default sort now lights up the header. When a page opens already sorted, the column it's sorted by shows its up/down arrow straight away — so it reads exactly like you'd clicked the header yourself, instead of leaving you guessing which column set the order.
- Fix: a data source that briefly failed to refresh could snap the grid back to an older cached version. Refreshes now hold the rows you're looking at steady when a fetch doesn't come through.
0.20.1
- A default sort now orders every grid, not just the header. Pages set to open sorted now actually arrive in that order — even on tables whose data source can't sort on its own — instead of only lighting up the header arrow, so the rows are where you expect from the first glance.
- Opening a page or a related tab no longer pauses. Drilling into a related tab or opening a table used to freeze for a moment while everything loaded; now it appears straight away and fills in as the rows arrive, even when the source is slow or briefly down.
0.20.2
- Fix: upcoming dates no longer read "ago". A date in the future — like a launch still to come — showed up as "3 months ago"; it now reads "in 3 months", so a newest-first list reads in the right order at a glance.
0.20.3
- Fix: a sorted list no longer flickers when it refreshes. On a live table, hitting refresh (or a background poll) briefly reshuffled the rows into the source's order before snapping back to your sort — a visible jump. Refreshes now stay in your chosen order the whole time, and a new or changed row settles into place without the rest of the list jumping around. New rows also show up reliably as the count updates.
Raw file: changelog-0.20.md
Vantage 0.19
27 June 2026
Vantage 0.19
Records can carry a custom Summary tab now — a read-only dashboard you lay out in YAML and bind to the selected row. The launch-control example uses it to show a launch coming together live: a countdown to liftoff, then real-time ascent telemetry that keeps moving between server updates.
What's new
- Custom Summary tabs. A page can now add a read-only tab you design yourself — headings, stats, status badges, progress bars, a countdown, and lists of related rows, arranged in columns and bound to the row you've selected. It sits alongside the usual Details and relation tabs, and a single bad field shows a small inline error instead of taking down the whole tab.
- Live, to the second. The tab refreshes itself as its data changes, and timed elements keep moving on their own between updates: a countdown ticks down smoothly, and live readouts — speed, altitude, downrange — carry forward so the numbers climb in real time instead of jumping each time the server reports a new value.
- Related rows, inline. A tab can list a record's related rows — the crew on a launch, the payloads on a flight — each as a little row of labels and badges that updates as that data changes.
- Friendly units. A number with a unit now reads the way you'd say it — 26,500 kg shows as 26.5 t, 6,400 m as 6.4 km — instead of a wall of digits.
Raw file: changelog-0.19.md
Vantage 0.18
22 June 2026
Vantage 0.18
Form dropdowns grow up: an options: script can build the list from a live query that reads other
fields in the same form, and the dropdown updates itself on its own when one of those fields
changes. HTTP action errors get readable.
What's new
- Dropdowns can run a query for their options. A form dropdown can now carry an
options:script — a short Rhai snippet that builds a table query (with conditions, references, the works) and returns the rows as the dropdown's choices. Pick the label and id columns the same way you would for a static reference. The dialog opens immediately; each scripted dropdown shows a spinner while its query runs and fills in as soon as the rows land. - Dropdowns react to the rest of the form. When an
options:script reads another field on the same form, that dropdown re-runs and re-filters itself the moment you change the field it depends on — so a Country dropdown can drive a Cities dropdown, or selecting an agency narrows a Rockets dropdown to that agency's rockets, with no extra wiring. - Fix: an HTTP action that came back with an error used to dump the raw JSON response body into
the toast. It now pulls out the server's own message — the
detail,message, orerrorfield — so you see "rocket configuration X does not belong to agency Y" instead of{"detail": "..."}. - Fix: a dropdown's options sometimes came up empty until you'd opened the referenced table in its own tab first. Dropdowns now read straight from the datasource, so the full list of valid choices is there regardless of what you've browsed.
0.18.3
- Fix: a multi-line value in a table cell or a form field (a JSON blob, a stack trace) would crash the app. Multi-line strings are now flattened to a single line wherever they're rendered.
- Fix: a
cmd-backed table with a per-rowdetailscript showed only its first 100 rows, then re-ran the whole CLI to fetch the next page. It now loads the full list in one pass and hydrates only the rows on screen. - Fix: a two-pass grid that also had a default sort lost its per-row hydration dimming the moment the preset sort applied — every row looked fully loaded even before its detail arrived. The preset sort is now skipped on two-pass grids so the dimming stays an honest signal.
- Fix: a
detailscript that errored on a row (non-zero exit, unparseable output) failed silently — the row just stayed un-augmented forever with no trace. Per-row detail failures are now logged at WARN so they're diagnosable.
Raw file: changelog-0.18.md
Vantage 0.17
20 June 2026
Vantage 0.17
Tables keep themselves current without getting in your way. A grid that's on screen now refreshes on its own, quietly pauses when you're not looking, and tells you in the title bar when something changed underneath you — and when a datasource breaks, it backs off instead of hammering you with errors.
What's new
- Tables refresh themselves, quietly. A grid refreshes on its own every few seconds — but only while its tab is the active one, the window is focused, and you've interacted recently. Switch away, background the app, or step out for a minute and it pauses; come back and it resumes. It runs in the background so a refresh never freezes the app, and an unchanged table no longer flickers or loses your place or selection.
- A refresh indicator in the title bar. A small indicator spins while a refresh is in flight and shows a bell with a count when changes were spotted; hover it for a list of the most recent updates.
- Auto-refresh backs off when something breaks. If a background refresh fails — a script that won't respond, an expired login — that page stops auto-refreshing instead of retrying on a loop, and you get a single toast naming what broke. Reopen the tab once it's fixed to start fresh.
- Run a command from a row, with live output. A row or toolbar action can now run a script or CLI command: it opens a dialog that collects any inputs as a form, then streams the command's output live in a terminal as it runs — handy for kicking off something like a deployment from the row it belongs to.
- Tables open in the order the page asks for. A page's default sort is now honored on open — so log streams and state objects can lead with the most recently active, newest first, instead of falling back to name order.
- Fix: right-clicking "Show
" on a row you'd already selected sometimes failed to open the drill-down. It now opens reliably. - Fix: clicking a link in a table while a detail tab was open below could drill into the wrong table, or nothing at all. The click now resolves against the row you actually clicked.
0.17.2
- Fix: a table that auto-refreshed every few seconds would briefly blank out on each refresh, then snap back when the new rows landed — or stay blank if the refresh failed. Visible grids now refresh in place: rows stay on screen while new ones are fetched, and only swap in if the fetch succeeds.
Raw file: changelog-0.17.md
Vantage 0.16
20 June 2026
Vantage 0.16
Vantage moves onto the new 0.6 data layer, and the agent feedback loop grows teeth: an AI agent working in your project can now read and query its data, not just its logs. REST-backed tables stream in as you scroll, and status columns render as inline tags.
What's new
- Agents can read your data. Beyond inspecting the app's logs, an agent working on your project's YAML can now load a model and run a small read-only query — pull a few rows, count them, follow a reference — to confirm a table or drill-down returns what you expect. It reads the same data the app shows. Governed by the Allow MCP agents to read data toggle on the dashboard.
- REST tables load as you scroll. A REST datasource that reports a row total now pages rows in on demand as you scroll, instead of fetching the whole table up front — big API-backed tables open fast and fill in on the fly.
- Status columns show up as tags. Flag a column as a label and it renders as a small colored tag next to the row's name instead of taking its own column — a tidy fit for status and state fields.
Raw file: changelog-0.16.md
Vantage 0.15
14 June 2026
Vantage 0.15
Vantage gets a built-in secrets manager for your project's .env, and nightly now installs as its
own app alongside stable instead of replacing it.
What's new
- Manage project secrets in the app. A new editor opens from the title bar for your project's
.env: add variables with a file description, per-variable notes, single- or multi-line values, and masked secret fields. It saves a standard.envthat any dotenv loader reads, plus a committed.env.exampletemplate that never holds real values, and flags template keys you haven't filled in locally yet. Handy for keeping credentials for internal tooling in one place — e.g. acmddatasource that shells out to a script can read its keys and tokens straight from.env. - Nightly is its own app. The nightly build installs as Vantage Nightly next to the stable app instead of overwriting it, and keeps its own settings and recent-projects list — the two no longer step on each other.
- Themes and customizable chart colors. Pick a look for the app, and tune chart colors right on a chart: a palette customizer with sliders for hue, spread, and lightness, plus Copy as JSON to save what you land on. Set a project-wide palette in your config so every chart shares one scheme.
- Install examples in one click. A link on the website now opens Vantage, downloads the example with a progress bar, shows you what's inside, asks you to trust the source, and installs it ready to open — no manual unzip-and-find-the-folder.
- Fix: the app no longer crashes the first time you open it on a new machine. Launching without a project now drops you on the welcome screen instead of quitting.
- Fix: nightly stopped nagging about an update that was already installed. It now offers an update only when a newer nightly actually exists.
0.15.1
- Error toasts for broken datasources. When a scripted (
cmd) datasource fails on a manual action — opening its tab or hitting Refresh — you now get a toast naming it (e.g. "Problem with tfstate.") with a one-line summary, instead of a silent hang. Failures during background hydration stay in the row error state and the logs, so they don't spam toasts. - Fix: a page that explicitly listed its id column had it silently dropped from the grid. The id now renders when you ask for it.
- Fix: Refresh on a two-pass (list + detail) datasource no longer wipes hydrated detail columns — only rows whose list fields actually changed get re-augmented, and the visible rows re-hydrate immediately.
Raw file: changelog-0.15.md
Vantage 0.14
9 June 2026
Vantage 0.14
A real terminal lands in Vantage. The old log viewer was a line-by-line text box that couldn't keep up with anything fancier than plain lines — colored output, progress bars that redraw in place, or screens that clear and repaint all came out garbled. The new terminal is the real thing: it understands the same escape codes your shell does, so output looks exactly as it would in a terminal, and you can scroll back through a long history without it choking.
What's new
-
Read-only terminal viewer. A proper VT terminal you can drop into a dialog. ANSI colors, bold and underline, in-place redraws (
\r), and full-screen repaints all render correctly. Scroll back through a long history with the wheel, the scrollbar, or PageUp/PageDown/Home/End, and jump straight to the latest output. Drag to select text and it's copied to your clipboard. A "new output" pill appears when fresh lines land below where you've scrolled. -
Logs now run through the terminal. The app log panel (the title-bar Feedback button) and any page log view — including CloudWatch log events — now render in the new terminal instead of the old line box. Colors, progress redraws, and long wrapped lines all come through, and new lines stream in and stick to the bottom as they arrive.
-
Run a command from a button. A new kind of action opens a dialog showing a description, the exact command (in a monospace box you can copy), and a live terminal. Hit Run and the command executes in a real terminal session — so its colors, spinners, and progress bars all work — with output streaming in. Stop sends Ctrl+C (the program can catch it); Stop again kills it. Press Esc to do the same, or to close once it's finished. Try it on the Products page in the surreal-bakery example: Bake muffins.
-
Tables fill in as they load. Drill into a big table and it shows up right away with not-yet-loaded rows dimmed, then fills them in on its own — no blank grid, and no nudging the mouse to make new rows appear.
0.14.2
- Stacked-area charts. A new
stacked_areachart type stacks multiple series into cumulative bands. Droplabels: falseto suppress axis text for dense dashboard tiles. - Fix: terminal action dialog no longer clips the run button when the command is long.
- Fix:
${row.*}placeholders now interpolate in terminal actions' command, args, cwd, and description.
0.14.3
- Custom tab titles. A page can now set a
tab_title:template, so a drilled-into tab shows a flat, data-driven label instead of aParent → Childbreadcrumb.${row.*}fills in values from the row you drilled from — e.g. a deployments tab that readsDeployments: acme-flights.
Raw file: changelog-0.14.md
Vantage 0.13
9 June 2026
Vantage 0.13
Relationships can now be scripted. Where a related list used to be a plain foreign-key match, you can hand it a small Rhai script that builds exactly the set you want — filtered, sorted, searched, or narrowed with a condition plain YAML couldn't express. Same idea, applied to a whole table, lets you quietly scope it down after it's built.
What's new
- Scripted relationships. Give a relation a
rhai:script and it builds its own related-record set when you drill in — filter by status, sort newest-first, limit the page, or match on a computed condition. The parent record is available to the script, so the related list can depend on the row you opened it from. Relations without a script keep working exactly as before. - Post-build table tweaks. Add a
surreal: { modify: | … | }script to a table and it runs as a final step once the table is built — the place to add a condition the column and relation YAML can't say on their own (e.g. "only paying clients", "balance below zero"). It narrows the table without making it read-only. - Guided in the agent skills. The bundled SurrealDB and UI-builder skills now teach these, so asking the assistant to "show a client's open orders, newest first" or "limit this table to active accounts" produces the right YAML.
0.13.1
- Tables backed by slow sources load instantly. A table whose rows come from running a command or script now shows the list right away and fills in the slower per-row details as they scroll into view, instead of freezing until everything has loaded. Switch a filter or sort and the details it already fetched stay put — no reloading what you've already seen.
- Fix: live data appears on its own. Rows that finish loading in the background now show up as soon as they're ready, instead of only appearing once you moved the mouse over the table.
0.13.2
- Every icon is available now. Give a menu item or button any icon from the built-in set — before, only a handful of names worked and anything else quietly showed no icon at all. Your YAML editor lists the full set as you type and flags a name that doesn't exist.
Raw file: changelog-0.13.md
Vantage 0.12
6 June 2026
Vantage 0.12
Query-sourced tables let you define a SurrealDB table whose rows come from an arbitrary SELECT —
including GROUP BY aggregation, joins, and computed columns — instead of mapping one-to-one onto a
physical table.
What's new
- Query-sourced tables. Add a
surreal: { rhai: | … | }block to any table YAML and write the query as a Rhai script that builds a SurrealQLSELECT. The result rows populate the table as usual — sorting, filtering, drill-down, and chart binding all work. - Derived tables. A
base:+inherit:shorthand lets you start from an existing table and narrow or transform it (e.g. "show me clients with a negative balance"). - Dashboard examples. The Surreal bakery demo now includes query-sourced tables for daily revenue, order totals, low-stock products, and debtors — each powered by a different aggregation pattern.
0.12.2
- The app is now just "Vantage". Same app, shorter name — you'll see it in the menu bar, window title, and the download. The name change breaks auto-update from older builds — grab this version manually from the download page; future updates will flow normally again.
Raw file: changelog-0.12.md
Vantage 0.11
6 June 2026
Vantage 0.11
This release lets you build a dashboard on top of a command-line tool.
What's new
- Command-line data sources. Point a data source at a local command — like
awsCLI — and each table fetches its rows by running that tool and reading the JSON it prints. A small script per table shapes the command's arguments, and drilling from a row into a related table passes the parent's id through as a command flag, so the usual master/detail navigation works with no API or database behind it. Choose Command (CLI) when you add a data source.
Raw file: changelog-0.11.md
Vantage 0.10
30 May 2026
Vantage 0.10
This release adds row actions, dialogs, and charts. Grid rows and toolbars can run operations — opening form and confirmation dialogs, writing records, and calling external services — and pages can present their data as charts.
What's new
- Row actions. A grid row's right-click menu can run an operation, not only open another page.
Actions are declared as
action/*.yamland referenced from a row'saction:. - Form and confirmation dialogs. A
kind: formaction opens a dialog to add or edit a record; akind: confirmaction asks before a destructive step. The bakery example uses these to add, edit, and delete products and to cancel an order. - Grid toolbars. Grids can carry a toolbar of buttons above the rows, such as "Add product".
- Order status workflow. Orders carry a status, and the right-click menu offers only the valid next transitions for the current state — placed, confirmed, in production, ready, delivered or picked up, paid, and cancelled — hiding steps that don't apply.
- External actions. A
kind: http_requestaction calls an outside service; the example wires a "Send password reset" action on a client. - Charts. A
kind: chartelement plots a table as a bar, line, or pie chart, using anxcolumn for the category and aycolumn for the value. Arrange several withlayout: gridto build a dashboard. - Chart controls. A page can declare a
controls:dropdown sourced from a table; charts that reference it in theirwhere:re-filter when the selection changes, so one dropdown scopes the whole dashboard.
Raw file: changelog-0.10.md
Vantage 0.9
23 May 2026
Vantage 0.9
Tables handle a million rows without breaking a sweat. A new reactive caching layer lazy-loads only what's on screen, keeps multiple views in sync, and refreshes in the background.
What's new
- Big tables feel instant. Only the rows you can see are fetched; the rest wait in a backing cache. Sequential and cursor-based pagination are picked automatically per backend, so scrolling is smooth regardless of dataset size. Sorting falls back to in-memory when the backend doesn't support it.
- Background refresh. Tables refresh without flicker — on file change, on a schedule, or when you hit the button explicitly. Refresh strategy depends on the data source.
- Dirty-record tracking. The cache layer tracks pending changes; UI indicators will follow.
- Shared cache across views. Open the same table in two tabs, or a master grid plus a detail sheet — they share one cache, and edits in one view appear in the other instantly. Individual record lookups and aggregate counts are cached separately.
- Mixed-backend tables. Read rows from DynamoDB, write them through a REST API call. Per-operation backend configuration lets you combine any read source with any write target.
Raw file: changelog-0.9.md
Vantage 0.8
16 May 2026
Vantage 0.8
GraphQL joins the list of backends Vantage can talk to. Point a datasource at a GraphQL endpoint and the rest of the admin — grids, sort, search, right-click drilldowns — just works.
What's new
- GraphQL datasources. A new
type: graphqloption alongside SQLite, Postgres, SurrealDB, REST and the AWS pair. Seturl:to your endpoint, pick adialect:(genericfor flat-argument schemas like the public SpaceX API,hasurafor Hasura-stylewhere: { _eq: … }arguments), and optionally override the filter argument name or send an auth header. Tables on a GraphQL datasource read like any other Vantage table — the GraphQL root field is just the table's name. - References column. Tables that declare has-many relations grow a sticky leftmost
Opencolumn with one xsmall primary button per relation. Clicking a button opens the related model in a new tab filtered to that row — one click instead of right-click → menu pick. Declare extras with a top-levelhas_many:list ontable/*.yamlso a single row can surface several related models side-by-side.
Raw file: changelog-0.8.md
Vantage 0.7
14 May 2026
Vantage 0.7
Two stacked features that turn Vantage UI from a one-page-at-a-time admin into something you can actually navigate: tabs, and Rhai-driven drilldowns that make context-menu entries open related records in a new tab.
What's new
- Tabs. Open multiple data-table pages at once. The left sidebar owns one nav slot — clicking a different sidebar item rebuilds that slot's tab in place, so any child tabs you spawned from it stay live.
- Open-in-new-tab from link cells. Click a link cell and the related record opens in a child tab owned by the current page. Subsequent clicks in the same parent reuse the child tab — unless you've pinned it, in which case new tabs slide in immediately to the left and take focus.
- Pin tabs. Star a tab to keep it around; opens-from-the-same-parent go beside it instead of replacing it. (Star icon is a stand-in until a custom Pin glyph ships.)
- Rhai-driven context-menu drilldowns.
context_menuentries in a page's YAML can now declare anopen_pageplus amodel:Rhai expression that returns the table to show. The expression sees the clicked row's columns, the fullrow, and the page's mastermodel(with aget_ref(relation, id)helper for chasinghas_manyrelations). Chain it for multi-hop drilldowns likemodel.get_ref("albums", row.id).get_ref("photos", album_id). - Page title in the CRUD toolbar. The toolbar grew a header band to the right of the Refresh button showing the active page's title (or a breadcrumb path for drill-down tabs).
vantage-ui-builderskill 1.4.0. Bundled agent skill picks up a "Drilling into related pages from a context menu" section and an updated Rhai scope table.
0.7.1
- Fix: the dashboard's "Recent Changes" panel shows the real notes for 0.5, 0.6 and 0.7 instead of the empty placeholder it shipped with in 0.7.0.
Raw file: changelog-0.7.md
Vantage 0.6
14 May 2026
Vantage 0.6
A focused release for working with tabular data: persistent sort, auto-refresh, and a dedicated detail sheet for inspecting individual rows.
What's new
- Persistent grid sort. Click a column header to sort; your choice is remembered per project so reopening picks up where you left off.
- Auto-refresh in tables. Long-running grid views keep themselves current without manual reloads.
- Row detail sheet. Open a single row in a side sheet for a clean, scrollable view of every field — no need to widen columns or scroll horizontally.
- Framework bumps. Picks up
vantage-aws0.4.8 (paginated list handling for more services) andvantage-surrealdb0.4.6.
Raw file: changelog-0.6.md
Vantage 0.5
13 May 2026
Vantage 0.5
Vantage UI gets serious about working with AI coding agents: an embedded MCP server, a "Set up with AI" project wizard, and a feedback loop that lets agents leave you notes (and you forward them, with logs, in one click).
What's new
- "Set up with AI" wizard. A first-run flow that walks an agent through scaffolding a new project, dropping bundled skills (markdown instructions plus YAML schemas) that teach any agent following the agentskills.io convention how to author Vantage configs.
- Embedded MCP server. Vantage UI exposes a local MCP endpoint so coding agents (Claude Code, Cursor, anything that speaks MCP) can introspect your project's datasources and config without leaving the editor.
- Log viewer + one-click feedback. Browse the app's structured logs in-app and attach them to a
"Send feedback…" message so bug reports don't need a separate
tail -f. - Datasource hot-reload. Edit a YAML datasource and the connection rebuilds in place — no app restart.
- Update channels behave properly. Stable builds offer stable updates; nightly builds offer nightly updates. The auto-updater uses the version reported by the running binary instead of guessing.
- Nightly icon variant. Nightly builds get a distinct icon so they don't get confused with stable in your dock.
- Privacy: error reports redact datasource credentials. Sentry reports no longer carry connection strings, hostnames or credentials from your datasources.
- Fix: SurrealDB form values round-trip cleanly. Forms backed by SurrealDB no longer fail deserialization for tagged CBOR values.
0.5.1
- SurrealDB option in the "Set up with AI" wizard, with a bundled skill that walks the agent through
INFO FOR DB/INFO FOR TABLEintrospection and the YAML mappings for record-link relations.
0.5.2
- The "Send feedback…" dialog now picks up
FEEDBACK.mdfrom the project root. Tick Include feedback from the agent to ship the agent's notes alongside your own; View agent feedback pops a larger viewer so you can read it first. Sent contents are deleted from disk. - The bundled
vantage-ui-builderskill (now 1.3.0) tells the agent to drop UX, validator and schema suggestions intoFEEDBACK.mdas it works, under a# Vantage <version>header. - Bundled skills install under
.agents/skills/instead of.claude/skills/, so they're picked up by any agent following the agentskills.io convention. - Opening or switching to a project refreshes any installed skills whose embedded version has moved
on, and tops up missing skill folders for datasources you added by hand. Gated on
AGENTS.mdbeing present at the project root, so projects that never ran the wizard stay untouched. Skills you've edited are left alone; on-disk versions newer than embedded are never downgraded.
Raw file: changelog-0.5.md
Vantage 0.4
9 May 2026
Vantage 0.4
First 0.4-line release: more backends, a project-aware shell, and a built-in macOS auto-updater.
What's new
- Connect to SurrealDB, MongoDB, REST APIs, AWS CloudWatch Logs, and CSV files alongside SQLite.
- Browse AWS CloudWatch Logs: pick a group, drill into events, follow master/detail.
- New master-detail page layouts (vertical and horizontal).
- Edit inventory YAML and the open page rebuilds in place — no restart.
- Results cache to disk; reopening a project is near-instant.
- Project switcher with recently-opened list.
- Sidebar groups pages per data source with collapsible sub-menus.
- Computed columns from inline expressions.
0.4.1
- Built-in auto-update with progress in the title bar; native Mac download from the website.
0.4.2
- Fix: SQLite datasources work when launched from Finder.
- Fix: AWS list views walk all pages (vantage#231).
AWS_PROFILEand SSO logins supported (vantage#230).- DynamoDB
begins_withsort-key filter + scan-filter fix (vantage#230).
0.4.3
- Fix: auto-updater no longer offers to "update" 0.4.2 to itself on every launch.
Raw file: changelog-0.4.md
Nightly channel
Living on the edge?
Nightly builds track main — every commit is signed,
notarized, and shipped. Expect rough edges; the in-app updater
keeps you on the nightly channel automatically.
v0.31.1-main.20260728005734 · Apple Silicon
sha256: 331197293d8f3c4c…