Quickstart
This guide walks you through launching CoW Protocol Services locally using Docker Compose. The environment operates in “fork mode,” allowing developers to test against a forked blockchain with real token contracts while maintaining isolation.
Prerequisites
You will need:
- Docker Desktop/Engine with Docker Compose
- An Ethereum RPC endpoint (e.g., Alchemy, Infura, or a local node)
- Rust toolchain (optional, for local development)
RPC demand is very high. Free tier RPC endpoints may rate-limit or perform poorly. We recommend either local nodes or paid services.
Setup Steps
1. Clone the Repository
git clone https://github.com/cowprotocol/services.git
cd services
Set your RPC endpoint and chain ID:
cp .env.example .env
# Edit .env with your RPC endpoint and desired chain ID
3. Launch Services
Start all services using Docker Compose:
On macOS/Windows, use the non-interactive compose file for better performance:
docker compose -f docker-compose.yml -f docker-compose.noninteractive.yml up
4. Monitor Logs
Wait until all services initialize properly. You should see logs from the orderbook, autopilot, driver, and solver services.
Access Points
Once running, you can reach the following interfaces:
| Service | URL |
|---|
| CoW Swap UI | localhost:8000 |
| CoW Explorer | localhost:8001 |
| Orderbook API | localhost:8080 |
| Database UI (Adminer) | localhost:8082 |
| Otterscan Block Explorer | localhost:8003 |
| Anvil RPC Node | localhost:8545 |
Testing Workflow
Test Accounts
The playground provides test accounts with 10,000 ETH each, derived from the standard mnemonic:
test test test test test test test test test test test junk
Never use these keys on real networks! They are publicly known test accounts.
Place a Test Swap
- Wrap ETH to WETH using the Anvil RPC node
- Place a swap order through the CoW Swap UI or directly via the Orderbook API
- Monitor settlement through service logs and the block explorer
Network Support
The setup supports multiple chains by adjusting environment variables and restarting services:
- Ethereum Mainnet
- Gnosis Chain
- Arbitrum One
- Base
- Polygon
Simply update the CHAIN_ID and RPC_URL in your .env file and restart Docker Compose.