When to build an app
Build an app when the integration:- has its own deployment, release cycle, and operational ownership
- talks to a system that stays authoritative for its own data, such as an accounting ledger or a CRM
- should be installable, pausable, and revocable by the operator without a platform release
- should not be able to run code inside the deployment
How an app integrates
An app has five seams, and no others:Scoped APIs
The app calls the deployment’s APIs with the scopes granted at installation. Grants are explicit and revocable.
Events
The app reacts to domain events emitted by the platform’s modules.
Durable webhook subscriptions
Delivery survives the app being down. The deployment retries rather than dropping.
Namespaced custom fields
The app owns its own custom fields under its namespace, so its data does not collide with the operator’s or another app’s.
Sandboxed admin extensions
The app can render surfaces inside the admin without running in it. See Build an admin UI extension.
Lifecycle
The deployment-local runtime for apps lives in@voyant-travel/apps. It owns:
- Registration — the app becomes known to the deployment.
- Immutable declarative releases — a release artifact describes what the app asks for. It is declarative and versioned, so what was consented to cannot change underneath the operator.
- Consent — the operator sees what is being requested before anything is granted.
- Installation and grants — the scopes actually given, which may be narrower than what was requested.
- Pause, revoke, uninstall — the operator can stop an app at any point without a platform release, and revocation is immediate.
Apps on Voyant
On Voyant, apps are distributed through the app marketplace: an app is reviewed and admitted before it can be acquired, and acquisition connects it to a deployment. Self-hosted Voyant OSS deployments use the same app runtime and the same install, consent, and revoke model, without the marketplace distribution around it.Adapters and providers
The other seam: changing an implementation inside the deployment.
Admin UI extensions
Rendering an app’s surface inside the admin.
App compatibility
What an app can rely on across deployments and versions.
Consume a deployment's API
The API surface an app calls.