You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Static assets (apps/web/dist + apps/site/out) are served by
Vercel's global CDN.
API (api/index.ts) runs as a Vercel Serverless Function that
bootstraps the ObjectStack Kernel on cold-start, then handles requests
via the Hono adapter (@hono/node-server/vercel).
Files
File
Purpose
vercel.json
Build command, output directory, rewrites, function config
api/index.ts
Serverless function — kernel bootstrap + Hono handler
apps/web/vite.config.ts
Sets base: '/' when VERCEL env is detected
Build Flow
pnpm run build:vercel
└─ turbo run build # Builds packages → apps (dependency order)
├─ packages/*/dist # Server plugins (tsup)
├─ apps/web/dist # Admin Console (Vite)
└─ apps/site/out # Docs (Next.js static export)
└─ cp -r apps/site/out apps/web/dist/docs # Combine into single output
Framework Preset: Other (not Next.js — this is a monorepo)
Vercel auto-detects vercel.json and applies the configuration
Push to the connected branch to trigger a deployment
Key Differences from Self-Hosted
Aspect
Self-Hosted (pnpm start)
Vercel
API runtime
Long-running Node.js process
Serverless function (cold-start)
Static assets
Served by Hono static mounts
Served by Vercel CDN (Edge)
SPA base path
/console/
/ (root)
Docs path
/docs/ (static mount)
/docs/ (CDN subfolder)
WebSocket
Supported (@objectos/realtime)
Not supported (Vercel limitation)
Background Jobs
In-process queues
Limited by function timeout (30s)
Limitations on Vercel
No WebSocket support — @objectos/realtime requires a persistent
connection. Use a separate WebSocket provider (e.g., Ably, Pusher) or
self-host for realtime features.
Cold-start latency — The kernel bootstraps on first request to a
serverless function instance. Subsequent requests reuse the warm instance.
Function timeout — Default 30 seconds (maxDuration in vercel.json).
Long-running workflows or jobs should use external queues.
No filesystem persistence — Use external databases (PostgreSQL, MongoDB)
instead of SQLite. The default InMemoryDriver works for demos but data
is lost on cold-start.