← Back to all products
$20
OP Stack Deployer
Deploy and configure OP Stack rollups with custom gas tokens, sequencer settings, and L1 contracts.
TypeScriptJSONYAMLMarkdownDocker
📁 File Structure 18 files
op-stack-deployer/
├── README.md
├── docker/
│ └── docker-compose.yml
├── package.json
├── security-notes.md
├── src/
│ ├── cli.ts
│ ├── commands/
│ │ ├── deploy.ts
│ │ ├── genesis.ts
│ │ ├── init.ts
│ │ ├── status.ts
│ │ └── validate.ts
│ ├── config/
│ │ └── loader.ts
│ ├── templates/
│ │ └── default-config.ts
│ └── utils/
│ ├── docker.ts
│ ├── genesis.ts
│ ├── health.ts
│ ├── l1-deployer.ts
│ └── validator.ts
└── tsconfig.json
📖 Documentation Preview README excerpt
OP Stack Deployer
One-command OP Stack rollup deployment with Docker orchestration and YAML-driven configuration.
Price: $19.99 | License: MIT | Category: Tooling | Runtime: Node.js 18+
Overview
op-stack-deployer is a CLI tool that deploys a complete OP Stack rollup from a single command. It handles L1 contract deployment, genesis generation, Docker Compose orchestration for the sequencer, batcher, proposer, and op-geth nodes, and post-deployment health checks.
Stop wrestling with dozens of manual steps. Define your chain in a YAML config file, run one command, and get a working rollup.
Features
- Single-command deployment —
npx op-deploy deployhandles the full rollup lifecycle - YAML-driven configuration — Define chain ID, gas limits, addresses, and fees in one file
- L1 contract deployment — Deploys SystemConfig, OptimismPortal, L2OutputOracle, and all required L1 contracts
- Genesis generation — Builds L2 genesis and rollup config from your parameters
- Docker Compose orchestration — Spins up op-node, op-geth, op-batcher, and op-proposer
- Health checks — Validates sequencer liveness, block production, and L1 submission after deployment
- Interactive init —
npx op-deploy initscaffolds a config file with sensible defaults
Architecture
op-deploy init op-deploy deploy
│ │
▼ ▼
YAML Config ──→ L1 Contract Deployment
│
▼
Genesis Generation
│
▼
Docker Compose Up
┌──────────────────┐
│ op-geth │
│ op-node │
│ op-batcher │
│ op-proposer │
└──────────────────┘
│
▼
Health Checks ✓
Tech Stack
| Component | Technology |
|---|---|
| CLI | TypeScript, commander |
| Chain | ethers.js v6 |
| Orchestration | Docker, Docker Compose |
| Config | YAML (js-yaml) |
| Templates | Handlebars (docker-compose generation) |
Quick Start
... continues with setup instructions, usage examples, and more.
📄 Code Sample .yml preview
docker/docker-compose.yml
# ═══════════════════════════════════════════════════════════════
# OP Stack Deployer — Docker Compose
# Runs all OP Stack components for the rollup
# ═══════════════════════════════════════════════════════════════
version: "3.8"
services:
op-geth:
image: ${OP_GETH_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/op-geth:latest}
container_name: op-geth
ports:
- "8545:8545"
- "8546:8546"
- "8551:8551"
volumes:
- geth-data:/data
- ./genesis.json:/genesis.json:ro
environment:
- GETH_VERBOSITY=3
command: >
--datadir=/data
--http
--http.addr=0.0.0.0
--http.port=8545
--http.corsdomain=*
--http.vhosts=*
--ws
--ws.addr=0.0.0.0
--ws.port=8546
--authrpc.addr=0.0.0.0
--authrpc.port=8551
--authrpc.jwtsecret=/data/jwt.hex
--rollup.sequencerhttp=http://op-node:8547
--gcmode=archive
--networkid=${L2_CHAIN_ID:-42069}
healthcheck:
test: ["CMD", "wget", "-qO-", "http://localhost:8545"]
interval: 10s
timeout: 5s
retries: 5
restart: unless-stopped
op-node:
image: ${OP_NODE_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/op-node:latest}
container_name: op-node
depends_on:
op-geth:
condition: service_healthy
ports:
# ... 52 more lines ...