Wizards
Multi-step flows for guided data entry and operations — collect input across screens, then commit in one go.
Vantage UI
A native console built from config you own — declarative YAML for structure, Rhai for logic, written by your AI agent.
Config in Vantage is two first-class languages, not one with an escape hatch. YAML declares the shape; Rhai carries the logic. Both live in the same git folder — and your agent writes 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)
Queries, drill-downs, actions, computed fields and visibility are all real, diffable code.
One sidebar over every system you run. Reading and listing rows is baseline — every source does it. Beyond that, each driver advertises an honest capability contract, and the UI renders only the controls a backend really supports. Pick one to see what it can do.
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 |
Create / update / delete also depend on whether the source is writable — a query-sourced (Rhai) table is read-only by design. You can also read from one backend and write through another.
There are hundreds of enhancements and custom UI elements to achieve best UX.
The same config you build the console from can serve your own frontend. Author the backend in Vantage UI — no hand-written Rust — then take it live two ways, both with zero code.
Start the API server on your machine and point your own React or mobile app at it — the same typed data surface the console speaks, now backing your frontend.
Export a standalone, dockerised Axum server — your project embedded straight from Vantage UI — and ship it to AWS Lambda or Kubernetes. Stateless, with a local cache.
Transactional REST first; reactive (WebSocket) after. See the engine that runs it →
Vantage UI embeds a local MCP server, so the coding agent you already use — Claude Code, Cursor, any MCP client — builds your console without leaving the editor.
list_data_sources
introspect_schema
sample_records
current_project_layout
get_json_schema
validate_config
list_logs
The agent writes config to disk via plain file I/O; the tools only read and validate. You review and commit — it's early and gets better every release.
Vantage ships agentskills.io-style skills (vantage-ui-builder) that teach any agent how to author pages, charts, Rhai expressions and drill-downs — no extra subscription, kept in sync with the app.
Built on GPUI, not a web view.
Edit YAML or data — the UI updates in place.
Your app, data and config never leave the box.
YAML + Rhai you version, diff and hand off.
Where Vantage is heading. Tap the deck to flip through.
Multi-step flows for guided data entry and operations — collect input across screens, then commit in one go.
Turn the same config — data sources plus Rhai logic — into real backend APIs your own frontend or mobile app can call. Start in the console; graduate to code.
No lock-in: export your console to a code repository or container image you own and run anywhere. Start in low-code, leave with real code.
SurrealDB tables already update themselves. Next: subscribe to the change-data-capture stream you already run, so Postgres, MySQL and Oracle go live the same way.
touch_app Click to deal the next card