New here? Start with the Overview for concepts, then the Get Started page. Execute steps with the Install and Upgrade guides. When those guides and this Reference disagree on shapes and contracts, this Reference wins.
Release registry
All customer-facing artifacts live in one public Artifact Registry repo (anonymous read):
Pull with
oras. Non-image artifacts are OCI artifacts; the image is a normal container.
Discovery vs trust: mutable tags (latest) are for discovery only. Always resolve to a digest and verify the cosign signature before deploying.
Umbrella version semantics
selfHostVersion (e.g. 0.9.4) is the customer-visible release number.
Component versions do not need to equal the umbrella version (a console-only fix can ship as self-host
1.2.1 pinning console 1.2.1 + image 1.2.0).
Immutability: a given velt-selfhost-manifest:<X.Y.Z> is never rewritten. Fixes publish a new patch version.
Migration-free contract (current): releases do not require customer-side data migrations. If that ever changes, release notes and the manifest call it out explicitly.
Manifest schema (schemaVersion: 2)
Field rules
Index artifact
Schema version 1 (legacy)
Older manifests used GCS URLs (moduleUrl / bundleUrl) instead of registry refs.
New installs must use schemaVersion: 2. If you encounter a v1 manifest, contact Velt.
Trust model
Verify the manifest (mandatory)
Trust chain
cosign verify-attestation.
Image scan sign-off
After copying the image into your registry, re-scan it. Diff CRITICAL/HIGH findings againstbackend.knownFindings. Fixable findings (fixAvailable: true) are never accepted in a published manifest. If you see one, stop and contact Velt.
Deployment profiles
Customers pick a curated profile, then optionally opt in modules. There is no per-function control plane.Curated profiles
Module catalog
Opt-in
Pass comma-separated module ids at install time (Terraform / guideOPT_IN_MODULES), e.g. migrations,ai. Only modules from the catalog above are valid: the CLI rejects unknown ids.
dataRegions (optional)
Regional setencrypteddata* variants can be filtered. Omit the key for the default “all catalog regions” shape; [] and omitted are different fleets, so never coalesce them when generating SDK config.
Emitted profile document
Terraform / the deployment-profiles CLI writesvelt-deployment-profile.json (v1):
enabledModules verbatim, and never re-derive the dependency closure.
SDK selfHosted config
Generated during install (Phase 5.1) as velt-selfhosted-config.json. Contains no secrets, only public URLs, web-app firebaseConfig, and the module list.
Semantics
App wiring
Console runtime config
Self-host console builds load same-origin/velt-console-config.json before bootstrap. Terraform emits this file; the install guide deploys it next to the static bundle.
Minimum validity (fetch must be 200 + JSON with non-empty):
firebaseConfig.apiKeyfirebaseConfig.projectIdfirebaseConfig.appIdfirebaseConfig.databaseURL
sendLoginLink, aiChat, and others), enabledModules, and self-host flags. Fail-soft: if the fetch fails or the payload is invalid, the app boots on build defaults and logs one error. It never falls open to Velt SaaS URLs (self-host builds ship with those stripped).
configSchemaVersion inside the bundle’s console-version.json must match the backend-emitted schema (pinned in the umbrella manifest as console.configSchemaVersion).
State file contract
velt-selfhost-state.json (working directory or config repo) is the resume and handoff record for Install/Upgrade.
release only after the upgrade completes so an interrupted run still knows the installed version.
Backend module archive contents
Pulled frombackend.moduleRef, verified with backend.moduleSha256:
Install/Upgrade guides are not packed into the archive. Use the copies on this docs site.
Acceptance criteria (definition of done)
A deployment is complete only when all hold:- Console sign-in as a seeded admin lands on the dashboard with the workspace + keys.
- App loads
velt.js+ chunks from your CDN (nothing fromcdn.velt.dev);window.Velt.versionmatches the pin. - Creating a comment in the app persists and appears in the console data browser.
- Network audit on app + console sessions: no requests to
velt.devor other Velt-owned hosts.

