Skip to content

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:

  1. Open hub.outer.now and click Add Instance. Hub tests the connection before saving.
  2. Sign in with email OTP. The account's user.role must include an admin role — the templates seed one from ADMIN_EMAIL.

What you get

AreaWhat it does
DashboardTables with record counts, schema versions, and migration status at a glance
Table browserSort, search, and filter any table; create, edit, and delete records with schema-driven forms
FilesBrowse, preview, rename, and delete uploads when the instance enables .files()
API referenceAn embedded Scalar explorer for the instance's /openapi.json (requires .openapi())
API tokensCreate and revoke Better Auth API keys for MCP and other headless clients
SettingsEdit 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

Next steps

  • Auth — the .admin() API Hub is built on
  • MCP — use a Hub-issued API token to connect agents