Outer Hub
Outer Hub is the admin dashboard for Outer instances — the counterpart to PocketBase's dashboard or Supabase Studio. You add an instance by URL, sign in with an admin account, and get a table browser, record editing, a storage browser, API tokens, and an embedded API reference.
Hub is a static app. Saved instances live in your browser's localStorage, and every request goes straight from your browser to your instance — nothing is stored or proxied centrally.
Connect your instance
Hub talks to the admin API, so the instance must enable .admin() and allow Hub's origin in cors:
new Outer({
db: pglite(),
cors: { origins: ["https://hub.outer.now"], credentials: true },
})
.schema(v1_0) // built with schema().auth(), so the admin fields exist
.auth({ secret, plugins: [emailOTP({ ... })] })
.admin()
.build();
The templates ship with https://hub.outer.now in CORS_ORIGINS by default, so a fresh instance connects without changes.
Then:
- Open hub.outer.now and click Add Instance. Hub tests the connection before saving.
- Sign in with email OTP. The account's
user.rolemust include an admin role — the templates seed one fromADMIN_EMAIL.
What you get
| Area | What it does |
|---|---|
| Dashboard | Tables with record counts, schema versions, and migration status at a glance |
| Table browser | Sort, search, and filter any table; create, edit, and delete records with schema-driven forms |
| Files | Browse, preview, rename, and delete uploads when the instance enables .files() |
| API reference | An embedded Scalar explorer for the instance's /openapi.json (requires .openapi()) |
| API tokens | Create and revoke Better Auth API keys for MCP and other headless clients |
| Settings | Edit the saved instance name and URL |
Forms drive themselves from your schema: enum columns render as selects, { multiple: true } enums as multi-selects, booleans as switches, timestamps as date pickers, and foreign keys link to the referenced record.
Self-host it
Hub lives in the repo at apps/hub. Build it and serve dist/ from any static host, then allow that origin in cors instead:
cd apps/hub
bun install
bun run build