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.

Start
sh
git clone <repo> && cd dvm
cp ops/.env.example ops/.env
docker compose --env-file ops/.env -f ops/docker-compose.yml up --build

2. Verify the processes

Default host ports from the example environment:

  • Operation gateway — http://localhost:19200 (the API you integrate against).
  • Runtime daemons — http://localhost:19100 and :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.
Health checks
sh
curl http://localhost:19100/readyz     # ready (kernel reachable)
curl http://localhost:19200/healthz    # gateway ok

3. 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.

Gateway end-to-end
sh
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.