Devnet
Run the full Secondlayer stack — Postgres, indexer, API, subgraph processor — against your local Clarinet devnet. No cloud, no keys.
Coming from Chainhook?
This is the local path; map your predicates over with Migrating from Chainhook.
- Clarinet and a Clarinet project (a directory with
Clarinet.toml). - Docker (Docker Desktop or OrbStack on macOS).
- The CLI:
bun add -g @secondlayer/cli.
From inside your Clarinet project:
sl devnet connect- Patches
settings/Devnet.tomlso the devnet node forwards events to the local indexer (stacks_node_events_observers = ["host.docker.internal:3700"]). - Writes
.secondlayer/docker-compose.ymlfor the published OSS images. - Brings the stack up with
docker compose up -d.
Secondlayer stack up
api → http://localhost:3800
indexer → http://localhost:3700Patch config without starting Docker
Pass --no-up to write settings/Devnet.toml and the compose file without starting containers — then bring it up yourself with docker compose -f .secondlayer/docker-compose.yml up -d.
Options
| Flag | Default | Purpose |
|---|---|---|
--project <dir> | nearest Clarinet.toml | Clarinet project directory |
--image-tag <tag> | latest | Published image tag to run |
--owner <owner> | Secondlayer namespace | ghcr image owner to pull from |
--no-up | — | Patch config + write compose without starting Docker |
Start the devnet; it auto-deploys your contracts and streams every block to the indexer.
clarinet devnet startPoint the CLI at the local API — no login, no API key, the local stack accepts a dummy key:
SL_API_URL=http://localhost:3800 SL_API_KEY=dummy sl subgraphs deploy ./subgraph.tsFire a contract call in your devnet and the matching rows land in your subgraph's tables.
sl devnet statusSTACK
● indexer healthy :3700
● api healthy :3800
INGEST
chain tip 142 indexed 142 lag caught up last block 2s ago
SUBGRAPHS
my-balances active block 142 balances · 37 rowsAdd -w to refresh every 2s, or --limit <n> to change how many recent rows show.
Tail logs for the whole stack or one service (indexer, api, subgraph-processor, postgres):
sl devnet logs indexer -fsl devnet down # stop the stack
sl devnet down --purge # stop and wipe the local index volumes