LocalNet provides a straightforward topology comprising three participants, three validators, a PostgreSQL database, and several web applications (wallet, sv, scan) behind an NGINX gateway. Each validator plays a distinct role within the Splice ecosystem:Documentation Index
Fetch the complete documentation index at: https://docs.canton.network/llms.txt
Use this file to discover all available pages before exploring further.
- app-provider: for the user operating their application
- app-user: for a user wanting to use the app from the App Provider
- sv: for providing the Global Synchronizer and handling AMT
What LocalNet Provides
- Three validators: Super Validator (SV), App Provider, and App User
- A local synchronizer with sequencer and mediator
- Canton Coin wallet services for each validator
- PQS (Participant Query Store) instances
- JSON API endpoints
- Keycloak for authentication (optional)
- Observability stack: Grafana, Prometheus, Loki (optional)
Setup
From the cn-quickstart repository:make setup prompts you to select a deployment profile and generates the appropriate .env.local configuration. make build compiles the Daml contracts, Java backend, and React frontend. make start launches the Docker Compose stack.
Check the status of running containers:
Network Topology
Each validator runs a participant, wallet services, and supporting infrastructure. The Super Validator also runs the synchronizer components (sequencer and mediator) and the Splice SV app.Port Conventions
Exposed Ports
The following section details the ports used by various services. The default database port is DB_PORT=5432. Other ports are generated using specific patterns based on the validator:- For the Super Validator (sv), the port is specified as
4${PORT_SUFFIX}. - For the App Provider, the port is specified as
3${PORT_SUFFIX}. - For the App User, the port is specified as
2${PORT_SUFFIX}.
- PARTICIPANT_LEDGER_API_PORT_SUFFIX: 901
- PARTICIPANT_ADMIN_API_PORT_SUFFIX: 902
- PARTICIPANT_JSON_API_PORT_SUFFIX: 975
- VALIDATOR_ADMIN_API_PORT_SUFFIX: 903
- CANTON_HTTP_HEALTHCHECK_PORT_SUFFIX: 900
- CANTON_GRPC_HEALTHCHECK_PORT_SUFFIX: 961
- APP_USER_UI_PORT: 2000
- APP_PROVIDER_UI_PORT: 3000
- SV_UI_PORT: 4000
Application UIs
-
App User Wallet UI
- URL:
http://wallet.localhost:2000 - Description: Interface for managing user wallets.
- URL:
-
App Provider Wallet UI
- URL:
http://wallet.localhost:3000 - Description: Interface for managing user wallets.
- URL:
-
Super Validator Web UI
- URL:
http://sv.localhost:4000 - Description: Interface for super validator functionalities.
- URL:
-
Scan Web UI
- URL:
http://scan.localhost:4000 - Description: Interface to monitor transactions.
- URL:
LocalNet rounds may take up to 6 rounds (equivalent to one hour) to display in the scan UI.
*.localhost domains (e.g., http://scan.localhost) will resolve to your local host IP 127.0.0.1. There are some situations where the resolution does not occur and the solution is to add entries to your /etc/hosts file. For example, to resolve http://scan.localhost and http://wallet.localhost add these entry to the file:
Default Wallet Users
- App User: app-user
- App Provider: app-provider
- SV: sv
localhost:2901, and the App Provider’s JSON API is at localhost:3975.
Configuration Options
Deployment Profiles
make setup offers deployment profiles that control which optional services are included:
- Minimal — Core validators and synchronizer only
- Standard — Adds PQS, JSON API, and authentication
- Full — Adds observability (Grafana, Prometheus, Loki)
Environment Variables
The.env file in the quickstart/ directory contains version numbers, feature flags, and service configuration. Create a .env.local file (not tracked by git) to override settings locally.
Docker Compose Modules
LocalNet is built from modular Docker Compose layers indocker/modules/:
localnet/— Base infrastructure (validators, synchronizer)auth/— Keycloak authenticationobservability/— Grafana, Prometheus, Lokipqs/— Participant Query Store instancesapp/— Application services (backend, frontend)
Health Checks
Verify that validators are healthy:When to Use LocalNet vs Sandbox
Use LocalNet when you need to test:- Multi-party workflows across separate validators
- Canton Coin transfers and traffic purchases
- Wallet integration
- Splice API interactions (Scan, Validator APIs)
- End-to-end flows with backend, frontend, and ledger
- Fast iteration on contract logic
- Single-participant testing without Docker
- A lightweight environment for
dpm testand Ledger API integration
Related Pages
- cn-quickstart — Repository overview and project structure
- Sandbox — Lightweight single-node alternative
- QuickStart walkthrough — Step-by-step guide to running the demo application