# Eject a dashboard into your own app

> A real ejected dashboard running outside our app: the portability claim, demonstrated rather than asserted.

Source: https://vibedasher.com/eject-demo

Own your code

# This dashboard was ejected — and it runs in your browser

A real Vibedasher dashboard, pulled out through the MCP as plain React and mounted directly on this page. No iframe. And every row you see was computed by DuckDB-WASM on your own machine — we ran no query for you.

45

files, ejected through the MCP — the entire dashboard

22 KB

of Parquet, downloaded once to your browser

0

queries run on our servers to render this

## How this page was built

Three steps, no bespoke glue. An AI agent with access to the Vibedasher MCP did all of it — the same way yours would.

```
# 1. install, sign in, point your AI at the Vibedasher MCP
pip install 'vibedasher-mcp>=0.6.0' && vibedasher login   # opens your browser; no API key
{ "mcpServers": { "vibedasher": { "command": "vibedasher-mcp",
    "env": { "VIBEDASHER_REGION": "eu-central-1" } } } }

# 2. ask it to eject the dashboard
eject_viz(viz_id=1275)
  -> 45 files: App.tsx, pages/, charts/, components/, stores/,
     vibedasherWasm.ts, tailwind.config.js, package.json, main.tsx

# 3. mount it in your app and hand it a query function
<App viz={viz} useSQL={useSQL} />
```

Nothing in the ejected tree was hand-tuned to run on this page — that is the whole claim, and it holds. It is real eject\_viz output: the five files the MCP ships identically to every customer (build config, tsconfig, the DuckDB-WASM runner) are pinned byte-for-byte against its current output by a CI test, and three spots across two generated files were brought forward to match a generator fix this tree predates. tsc --noEmit over all 45 files is clean, and CI keeps it there. The only file we wrote is the ~40-line component that mounts it and hands it a query function.

## The ejected dashboard, live

rendering natively on this page — not in an iframe

The query function we inject is backed by DuckDB-WASM reading a Parquet extract of the dataset. Swap it for the Vibedasher SDK client and the exact same components run against the hosted engine instead — that is the only thing that changes.
