New to full self-hosting? Read the Overview first for what the deployment contains and how it differs from partial self-hosting.
Check the prerequisites
People and access
- A GCP project you can administer (or create), with billing enabled.
- Ability to create a Google OAuth client for console sign-in. This is one human console step.
- Someone available to run an AI coding agent, or the shell commands themselves, for the duration.
The agent checks exact versions itself in Phase 0 and stops if anything is missing.
Decide your inputs
Decide these once, up front. The agent asks for all of them at the start of Phase 0 rather than interrupting you later.
Give your agent the guides
This is the step that does the work. Point your AI coding agent at these two pages:Keep
- Install guide, the phase-by-phase procedure it executes.
- Reference, the field-level contract it checks shapes against.
velt-selfhost-state.json in your working directory. It is what lets a fresh session pick up where the last one stopped.Stay available for the human steps
Five moments need a person. The agent pauses and asks at each one.
Wire your app
Serving the SDK from your CDN only moves code. Runtime still defaults to SaaS until you pass Vanilla and Vue use
selfHosted.initVelt(apiKey, { proxyDomain, version, selfHosted }).Rules that break production if violated:- Path on the CDN is exactly
/lib/sdk@<version>/velt.jswith all chunks flat in that directory (@is literal). - CORS:
Access-Control-Allow-Originon every.jsfile (app origin or*). This is the number one failure mode. selfHosted.strict: trueanddeploymentProfileset to Terraform’s resolvedenabledModules, never hand-derived.- CSP: allow your CDN in
script-src, and removecdn.velt.devonce you cut over.
selfHosted config.Confirm it is done
The deployment is complete only when all four pass:
- Console sign-in as a seeded admin lands on the dashboard with the workspace and keys.
- The app loads
velt.jsand its chunks from your CDN, andwindow.Velt.versionmatches the pin. - Creating a comment in the app persists and appears in the console data browser.
- A Network audit on both the app and console sessions shows no requests to
velt.devor other Velt-owned hosts.
What the agent does
Maintain
velt-selfhost-state.json after every phase so a fresh session can resume without guessing.
Troubleshooting
Full tables live in the Install guide’s troubleshooting appendix.
Upgrading later
Upgrades are a delta, not a reinstall. The Upgrade guide pulls and verifies the target manifest, diffs it against therelease recorded in your state file, and runs only the tracks that changed.
Releases are migration-free today: new backend code reads existing data shapes. If that ever changes, the release notes and the manifest call it out and ship a dedicated migration runbook.
