Windows
macOS and Linux today. A signed Windows build brings the same app to the laptops most of your colleagues actually use — no VM, no remote desktop.
Vantage UI
Use Vantage to build your own data-heavy applications. Vantage stores its project files in a folder, constantly monitoring them for changes — so the app can be easily modified from the outside.
Menu items, page layout and widget types are described in YAML. Custom logic and behaviour live in Rhai. The project folder also ships .skills that teach your AI coding agent to write both.
# table/clients.yaml
title: Clients
source: main_db
columns: [name, email, balance]
has_many:
- orders
context_menu:
- title: View orders
open_page: orders
model: model.get_ref("orders", row.id)
// a computed label for each row
let label = row.name;
if row.balance < 0 {
label += " • owes " + row.balance;
}
label
// drill two hops, in one expression
model.get_ref("clients", row.id)
.get_ref("orders", client_id)
When a file changes on disk, Vantage re-reads it and the UI updates live.
Vantage needs a DataSource to read data. Each DataSource has a unique set of capabilities. Once a connection is established, Vantage reads tables to learn about columns, record types and relations. Enterprise builds can also define strongly typed tables in Rust.
The most complete driver — full querying, aggregation, pagination and dataset-level traversal. It is also the one source that pushes: tables update themselves when data changes, with nothing to set up.
Retrieving data
| Filter by conditions | check_circle |
| Server-side sort | check_circle |
| Quick search | check_circle |
| Count | check_circle |
| Aggregate — sum / avg / min / max | check_circle |
| Custom page size | check_circle |
| Random-access pages | check_circle |
| Progressive (cursor) load | check_circle |
| Drill to related record | check_circle |
| Drill across a dataset (subquery) | check_circle |
| Live updates — the source pushes changes | check_circle |
Editing data
| Add records | check_circle |
| Update records | check_circle |
| Delete records | check_circle |
Full SQL driver via sqlx — sort, search, aggregation, offset pagination and subquery traversal.
Retrieving data
| Filter by conditions | check_circle |
| Server-side sort | check_circle |
| Quick search | check_circle |
| Count | check_circle |
| Aggregate — sum / avg / min / max | check_circle |
| Custom page size | check_circle |
| Random-access pages | check_circle |
| Progressive (cursor) load | check_circle |
| Drill to related record | check_circle |
| Drill across a dataset (subquery) | check_circle |
| Live updates — the source pushes changes | remove |
Editing data
| Add records | check_circle |
| Update records | check_circle |
| Delete records | check_circle |
CRUD, aggregation and dataset traversal via the SQL query builder; interactive sort/search push-down is being wired up. The framework can also read live changes from a NOTIFY trigger you install — connecting that up from the console is next.
Retrieving data
| Filter by conditions | check_circle |
| Server-side sort | remove |
| Quick search | remove |
| Count | check_circle |
| Aggregate — sum / avg / min / max | check_circle |
| Custom page size | remove |
| Random-access pages | remove |
| Progressive (cursor) load | remove |
| Drill to related record | check_circle |
| Drill across a dataset (subquery) | check_circle |
| Live updates — the source pushes changes | remove |
Editing data
| Add records | check_circle |
| Update records | check_circle |
| Delete records | check_circle |
CRUD, aggregation and dataset traversal via the SQL query builder; interactive sort/search push-down is being wired up.
Retrieving data
| Filter by conditions | check_circle |
| Server-side sort | remove |
| Quick search | remove |
| Count | check_circle |
| Aggregate — sum / avg / min / max | check_circle |
| Custom page size | remove |
| Random-access pages | remove |
| Progressive (cursor) load | remove |
| Drill to related record | check_circle |
| Drill across a dataset (subquery) | check_circle |
| Live updates — the source pushes changes | remove |
Editing data
| Add records | check_circle |
| Update records | check_circle |
| Delete records | check_circle |
Native aggregation pipeline with sort, search and pagination; record-level traversal.
Retrieving data
| Filter by conditions | check_circle |
| Server-side sort | check_circle |
| Quick search | check_circle |
| Count | check_circle |
| Aggregate — sum / avg / min / max | check_circle |
| Custom page size | check_circle |
| Random-access pages | check_circle |
| Progressive (cursor) load | check_circle |
| Drill to related record | check_circle |
| Drill across a dataset (subquery) | remove |
| Live updates — the source pushes changes | remove |
Editing data
| Add records | check_circle |
| Update records | check_circle |
| Delete records | check_circle |
Key and scan-filter queries with cursor pagination. Often paired as a read source with writes routed elsewhere.
Retrieving data
| Filter by conditions | check_circle |
| Server-side sort | remove |
| Quick search | remove |
| Count | check_circle |
| Aggregate — sum / avg / min / max | remove |
| Custom page size | check_circle |
| Random-access pages | remove |
| Progressive (cursor) load | check_circle |
| Drill to related record | check_circle |
| Drill across a dataset (subquery) | remove |
| Live updates — the source pushes changes | remove |
Editing data
| Add records | remove |
| Update records | remove |
| Delete records | remove |
Generic and Hasura dialects. Read rows, filter, and drill into related records.
Retrieving data
| Filter by conditions | check_circle |
| Server-side sort | remove |
| Quick search | remove |
| Count | check_circle |
| Aggregate — sum / avg / min / max | remove |
| Custom page size | remove |
| Random-access pages | remove |
| Progressive (cursor) load | remove |
| Drill to related record | check_circle |
| Drill across a dataset (subquery) | remove |
| Live updates — the source pushes changes | remove |
Editing data
| Add records | remove |
| Update records | remove |
| Delete records | remove |
Paginated REST endpoints as tables, with filtering and record-level drill-down.
Retrieving data
| Filter by conditions | check_circle |
| Server-side sort | remove |
| Quick search | remove |
| Count | check_circle |
| Aggregate — sum / avg / min / max | remove |
| Custom page size | remove |
| Random-access pages | remove |
| Progressive (cursor) load | remove |
| Drill to related record | check_circle |
| Drill across a dataset (subquery) | remove |
| Live updates — the source pushes changes | remove |
Editing data
| Add records | remove |
| Update records | remove |
| Delete records | remove |
Infrastructure (CloudWatch, IAM, S3 and more) browsed as tables, with equality filters pushed down to the API.
Retrieving data
| Filter by conditions | check_circle |
| Server-side sort | remove |
| Quick search | remove |
| Count | check_circle |
| Aggregate — sum / avg / min / max | remove |
| Custom page size | remove |
| Random-access pages | remove |
| Progressive (cursor) load | remove |
| Drill to related record | remove |
| Drill across a dataset (subquery) | remove |
| Live updates — the source pushes changes | remove |
Editing data
| Add records | remove |
| Update records | remove |
| Delete records | remove |
Wrap a command (aws, kubectl, gh…) and read the JSON it prints as rows.
Retrieving data
| Filter by conditions | remove |
| Server-side sort | remove |
| Quick search | remove |
| Count | check_circle |
| Aggregate — sum / avg / min / max | remove |
| Custom page size | remove |
| Random-access pages | remove |
| Progressive (cursor) load | remove |
| Drill to related record | remove |
| Drill across a dataset (subquery) | remove |
| Live updates — the source pushes changes | remove |
Editing data
| Add records | remove |
| Update records | remove |
| Delete records | remove |
Local files as tables, with in-memory filtering and record-level traversal.
Retrieving data
| Filter by conditions | check_circle |
| Server-side sort | remove |
| Quick search | remove |
| Count | check_circle |
| Aggregate — sum / avg / min / max | remove |
| Custom page size | remove |
| Random-access pages | remove |
| Progressive (cursor) load | remove |
| Drill to related record | check_circle |
| Drill across a dataset (subquery) | remove |
| Live updates — the source pushes changes | remove |
Editing data
| Add records | remove |
| Update records | remove |
| Delete records | remove |
Append-only JSONL log files — write structured entries that the log viewer picks up on its next refresh.
Retrieving data
| Filter by conditions | remove |
| Server-side sort | remove |
| Quick search | remove |
| Count | remove |
| Aggregate — sum / avg / min / max | remove |
| Custom page size | remove |
| Random-access pages | remove |
| Progressive (cursor) load | remove |
| Drill to related record | remove |
| Drill across a dataset (subquery) | remove |
| Live updates — the source pushes changes | remove |
Editing data
| Add records | check_circle |
| Update records | remove |
| Delete records | remove |
Every GUI element adapts to the table it's bound to — buttons and features follow the backend's capabilities.
In Vantage, UI elements are reactive. YAML controls layout and visibility, while Rhai drives behaviour. The data grid is a typical example — YAML sets column order, types, widths and captions, plus the buttons above the grid; Rhai scripts what a button press does.
As an enterprise client, you get a custom release pipeline with your own configuration of Vantage. Supply your own DataSources, add table definitions in native Rust, and bundle your own actions.
| Capability | Free download One binary, everyone | Enterprise build Assembled for you |
|---|---|---|
| Build your app | ||
| Datasources out of the box | 12 | 12 + your own |
| Colour themes | 36 | 36 + one that's yours |
| Native types mapped per source | up to 24 | + types you define |
| Grids past a million rows | check_circle | check_circle |
| Charts, KPI cards, dashboards | check_circle | check_circle |
| Multi-step wizards & CSV import | check_circle | check_circle |
| Custom form layouts | check_circle | check_circle |
| Auto-refresh in the background | check_circle | check_circle |
| Push-style instant refresh | SurrealDB, PostgreSQL | + CDC: Kafka, Debezium, custom listeners |
| Your AI agent builds it over MCP | check_circle | check_circle |
| MCP debugging — query preview, error check | check_circle | + BDD suite, run at build |
| Custom tables | ||
| Custom queries & aggregates | Rhai | Rhai + Rust |
| Actions | Rhai | Rhai + Rust |
| Internal API | Rhai | Rhai + Rust |
| Custom datasources | OSS, community | yours or ours |
| UI widgets | 21 built in | + your own in Rust |
| Third-party WASM plugins | remove | check_circle |
| Internal distribution control | ||
| Application distribution | vantage-ui.com, or clone by hand | internal catalog, apps auto-update |
| Platforms | macOS, Linux | + API/MCP |
| Verifiable builds, on demand | remove | your components in the binary |
| Your name, icon and About box | remove | check_circle |
| Turn off what you don't need | remove | check_circle |
| Your own release channel | remove | signed & notarised |
| vantage:// install allowlist | remove | your apps only |
| Central credentials & SSO sign-in | remove | check_circle |
| Crash telemetry | optional | your own Sentry account |
| What you're standing on | ||
| MIT framework underneath | forever | forever |
| Architecture partner & training | remove | check_circle |
| Support | community | Slack Connect |
| Price for personal and commercial use | $0 forever | talk to us |
Where Vantage is heading. Everything we ship reaches every build — free and enterprise alike. Tap the deck to flip through.
macOS and Linux today. A signed Windows build brings the same app to the laptops most of your colleagues actually use — no VM, no remote desktop.
The same YAML and Rhai, rendered in a browser. Hand someone a link instead of an install, and put a screen in front of people who will never open a terminal.
Turn the same config — data sources plus Rhai logic — into real backend APIs your own frontend or mobile app can call. Start in the app; graduate to code.
No lock-in: export your app to a code repository or container image you own and run anywhere. Start in low-code, leave with real code.
touch_app Click to deal the next card