Quickstart
Local cluster in ten minutes
A two-node development cluster — two runtime daemons, two secret kernels, a relay, the operation gateway, the debugger UI, and a monitoring stack — starts from one compose file. Authentication is disabled in the development profile; every production control (auth mode, kernel channel security, persistence) is configuration.
1. Start the cluster
Requirements: Docker with Compose. The example environment file carries development-only keys and ports.
git clone <repo> && cd dvm
cp ops/.env.example ops/.env
docker compose --env-file ops/.env -f ops/docker-compose.yml up --build2. Verify the processes
Default host ports from the example environment:
- Operation gateway —
http://localhost:19200(the API you integrate against). - Runtime daemons —
http://localhost:19100and:19110(/healthz,/readyz,/metrics). - Debugger UI —
http://localhost:8080; Prometheus —:9090; Grafana —:3001. - Secret kernels are on private networks only — the runtime is their sole client, which mirrors the production boundary.
curl http://localhost:19100/readyz # ready (kernel reachable)
curl http://localhost:19200/healthz # gateway ok3. Sign an operation end to end
The development gateway requires two approvals (DVM_OPERATION_GATEWAY_REQUIRED_APPROVALS=2) and allows the demo recipients SETTLEMENT_A and SETTLEMENT_B.
GW=http://localhost:19200
OP=$(curl -s -X POST "$GW/v1/operations/sign" -d '{
"idempotency_key": "quickstart-1",
"payment": { "from_account": "TREASURY", "to_account": "SETTLEMENT_A",
"amount_minor": 250000, "currency": "USD",
"reference": "quickstart" },
"requested_participants": [0, 1],
"publication_mode": "manual",
"client": { "client_id": "quickstart", "subject_id": "dev",
"roles": ["ops"], "scopes": ["operations.sign"] }
}' | jq -r .operation.operation_id)
curl -s -X POST "$GW/v1/operations/$OP/approve" \
-d '{"subject_id":"approver-1","roles":["approver"],"approved_at_ms":0}'
curl -s -X POST "$GW/v1/operations/$OP/approve" \
-d '{"subject_id":"approver-2","roles":["approver"],"approved_at_ms":0}'
curl -s -X POST "$GW/v1/operations/$OP/execute" -d '{}'
curl -s -X POST "$GW/v1/operations/$OP/publish" \
-d '{"scope":"signature","requested_at_ms":0}'
curl -s "$GW/v1/operations/$OP" | jq '{state, runtime: .runtime.phase}'
# -> { "state": "published", "runtime": "Published" }4. Where to go next
The five-node variant with the vault console overlays ops/docker-compose.dvmdev.yml. Mobile SDK integration starts at the iOS or Android sections; server-to-server integration at the Gateway API section; node-level tooling at the Node API section.