Quickstart
Create a community manifest from a template, validate it, and resolve it into a deployment plan with the symorva CLI.
This guide takes you from an empty directory to a validated manifest and a deployment plan. It uses the symorva CLI that ships with @symorva/sdk. Every output shown below is real output from the current developer-preview build.
The SDK is in developer preview and is distributed to design partners by the Symorva team; it is not published to a public package registry. Contact the team for access. Once the package is installed in your project, the symorva command is available.
Create a manifest from a template
Run init in an empty directory. Without options it uses the dao template and writes symorva.config.json.
symorva initCreated symorva.config.json from the dao template.
Next: symorva validate && symorva planChoose another starting point with --template (dao, creator, team or ecosystem) and name your community with --name. The name is turned into a stable slug for community.id:
symorva init --template creator --name "Lumen Studio"init refuses to overwrite an existing file unless you pass --force.
Read what was generated
The template writes only the fields it needs; everything else takes its default during validation. Short arrays are shown on one line here.
{
"$schema": "./node_modules/@symorva/sdk/schema/community.v1.json",
"schemaVersion": 1,
"community": {
"id": "orbit-collective",
"name": "Orbit Collective",
"template": "dao",
"locales": ["en"]
},
"brand": {
"primaryColor": "#6E5BFF",
"theme": "system"
},
"platforms": ["ios", "android-apk", "macos", "windows"],
"deployment": {
"mode": "self-hosted",
"region": "asia-southeast"
},
"modules": {
"chat": {
"e2ee": true,
"tribes": true,
"roles": ["owner", "admin", "moderator", "member"],
"joinApproval": true
},
"meetings": {
"broadcast": { "enabled": true, "maxAudience": 2000 }
},
"aiStudio": { "enabled": true, "assistant": true, "imageGeneration": true },
"wallet": { "enabled": true, "memberBenefits": true, "networks": ["bnb-chain", "base"] },
"dapps": { "enabled": true }
}
}The $schema reference gives editors completion and inline validation. Network identifiers and the region in templates are placeholders to edit; they do not indicate where Symorva runs or which networks a wallet is deployed on. "Orbit Collective" is an example name.
Validate
symorva validate✓ Orbit Collective (orbit-collective) — 5 modules, 4 platforms
info Audiences above 500 use large-room mode: speakers stay on real-time media, listeners receive a low-latency stream. (modules.meetings.broadcast.maxAudience · meetings.large-room)Validation runs in two passes: the schema (shapes, ranges, formats) and the composition rules between modules, shared services and platforms. The summary line counts enabled modules and platforms. Each diagnostic ends with its JSON path and stable code. This info note is expected — the template sets a broadcast audience of 2,000, which is above the large-room threshold of 500.
Plan the deployment
symorva planOrbit Collective
navigation Community · Meetings · AI Studio · Wallet · DApps
Your deployment
Community server Accounts, identity, community structure, roles and module host.
Admin console Operator console for members, content, modules and settings.
Data stores Relational database, cache, object storage and message queue, owned by the operator.
Messaging service Message routing, sync, groups, tribes and membership. Runs in the operator's environment.
Meeting service Room lifecycle, scheduling, permissions and invitations. Media flows through the shared real-time media service.
Studio service Projects, prompts, generated assets and publishing rules. Inference runs on the shared AI service.
Wallet service Balances, transfers, payment records and benefit rules. Sensitive key operations run inside a trusted execution environment.
Directory service Listings, categories, allowlists and partner configuration managed by the operator.
Shared services
Real-time media used by Meetings & live rooms · metered in participant-minutes, broadcast-viewer-minutes
AI inference & generation used by AI & creator studio · metered in ai-tokens, images, video-seconds
Resource metering & settlement records usage for the services above
Clients
iOS Signed iOS build for App Store or TestFlight
Android APK Signed Android APK
macOS Notarised macOS app
Windows Signed Windows installer
Notes
info Audiences above 500 use large-room mode: speakers stay on real-time media, listeners receive a low-latency stream. (modules.meetings.broadcast.maxAudience · meetings.large-room)The plan separates what you own (Your deployment) from what you connect to (Shared services). Every enabled module adds one owned component; only meetings and the AI studio consume shared services here. The navigation line is the tab order of the generated app.
See a composition error
Turn off the shared AI service while the AI studio is still enabled:
{
"sharedServices": { "ai": "none" }
}symorva validate✗ symorva.config.json is invalid
error AI & creator studio is enabled but the AI service is set to none. (sharedServices.ai · service.ai-required)
info Audiences above 500 use large-room mode: speakers stay on real-time media, listeners receive a low-latency stream. (modules.meetings.broadcast.maxAudience · meetings.large-room)The command exits with status 1, so it can gate a CI job. Either disable modules.aiStudio or restore sharedServices.ai to symorva. All diagnostic codes are listed in the Manifest reference.
Use the plan in tooling
plan --json prints the same plan as structured data:
symorva plan --json{
"ok": true,
"plan": {
"community": { "id": "orbit-collective", "name": "Orbit Collective" },
"modules": ["chat", "meetings", "aiStudio", "wallet", "dapps"],
"owned": [
{
"id": "community-server",
"name": "Community server",
"description": "Accounts, identity, community structure, roles and module host.",
"source": "core"
}
],
"shared": [
{
"id": "media",
"name": "Real-time media",
"usedBy": ["meetings"],
"meteredUnits": ["participant-minutes", "broadcast-viewer-minutes"]
}
],
"clients": [
{
"platform": "ios",
"name": "iOS",
"artifact": "Signed iOS build for App Store or TestFlight",
"family": "mobile"
}
],
"navigation": ["Community", "Meetings", "AI Studio", "Wallet", "DApps"],
"privacy": [
{
"module": "chat",
"protection": "Message content is encrypted on the sender's device and decrypted only on authorised recipient devices."
}
],
"diagnostics": [
{
"level": "info",
"code": "meetings.large-room",
"path": "modules.meetings.broadcast.maxAudience",
"message": "Audiences above 500 use large-room mode: speakers stay on real-time media, listeners receive a low-latency stream."
}
]
}
}Arrays are abbreviated to their first entry and short arrays are shown on one line. When the manifest is invalid, the output is { "ok": false, "diagnostics": [...] } and the exit status is 1.
Next steps
Core concepts
The vocabulary used across Symorva — who runs what, what a manifest describes, and how modules, deployments and shared services relate.
Architecture overview
Four layers — community apps, the operator's deployment, Symorva foundation modules and shared services — with the request flows and boundaries between them.