Flow Emulator
The Flow Emulator is a lightweight tool that emulates the behavior of the real Flow network for local development and testing.
Installation
The emulator is included with the Flow CLI. Follow the installation guide to get started.
Quick Start
First, create a flow.json
configuration file:
_10flow init --config-only
Then start the Flow Emulator:
_10flow emulator
This starts a local Flow network with:
- gRPC server on port
3569
- REST API on
http://localhost:8888
- Admin API on port
8080
Available Commands
snapshot
: Create/Load/List emulator snapshots. See: Create Emulator Snapshot
Key Flags
-
Networking
--host <string>
: Host to listen on for gRPC/REST/Admin (default: all interfaces)--port, -p <int>
: gRPC port (default3569
)--rest-port <int>
: REST API port (default8888
)--admin-port <int>
: Admin API port (default8080
)--debugger-port <int>
: Debug Adapter Protocol port (default2345
)--grpc-debug
: Enable gRPC server reflection--rest-debug
: Enable REST API debug output
-
State & Persistence
--persist
: Enable persistent storage (default disabled)--dbpath <path>
: Directory for on-disk state (default./flowdb
)--sqlite-url <url>
: Use SQLite storage backend--redis-url <url>
: Use Redis storage backend--checkpoint-dir <path>
: Load state from checkpoint directory--state-hash <string>
: Load state from checkpoint state hash
-
Forking
--rpc-host <host>
: Access node to query when forking Mainnet/Testnet--start-block-height <uint>
: Starting block height when forking
-
Cadence & VM
--block-time, -b <duration>
: Time between sealed blocks (e.g.1s
,300ms
)--coverage-reporting
: Enable code coverage reporting--computation-reporting
: Enable computation reporting--legacy-upgrade
: Enable legacy contract upgrade behavior--scheduled-transactions
: Enable scheduled transactions (default true)--script-gas-limit <int>
: Gas limit for scripts (default100000
)--transaction-max-gas-limit <int>
: Max transaction gas limit (default9999
)--transaction-expiry <int>
: Transaction expiry in blocks (default10
)--skip-tx-validation
: Skip tx signature and sequence number checks--simple-addresses
: Use sequential addresses starting with0x01
--storage-limit
: Enforce account storage limit (default true)--storage-per-flow <decimal>
: MB of storage per 1 FLOW token--token-supply <decimal>
: Initial FLOW token supply (default1000000000.0
)--transaction-fees
: Enable transaction fees--setup-evm
: Deploy EVM contracts (default true)--setup-vm-bridge
: Deploy VM Bridge contracts (default true)
-
Service Account & Identity
--chain-id <emulator|testnet|mainnet>
: Address generation chain (defaultemulator
)--service-priv-key <hex>
/--service-pub-key <hex>
: Service account keys--service-sig-algo <ECDSA_P256|ECDSA_secp256k1>
: Service key signature algo (defaultECDSA_P256
)--service-hash-algo <SHA3_256|SHA2_256>
: Service key hash algo (defaultSHA3_256
)--min-account-balance <decimal>
: Minimum account balance / account creation cost--contracts
: Deploy common contracts on start--contract-removal
: Allow contract removal for development (default true)--init
: Initialize a new account profile
-
Logging & Output
--verbose, -v
: Verbose logging--log-format <text|JSON>
: Logging output format (defaulttext
)
-
Snapshots
--snapshot
: Enable snapshots in the emulator
Examples
_20# Verbose logs_20flow emulator --verbose_20_20# Custom ports_20flow emulator --port 9000 --rest-port 9001 --admin-port 9002_20_20# Custom block time (1 second between blocks)_20flow emulator --block-time 1s_20_20# Persist state on disk_20flow emulator --persist --dbpath ./flowdb_20_20# Fork from Testnet at a specific height_20flow emulator --rpc-host access.devnet.nodes.onflow.org:9000 --start-block-height 12345678_20_20# Disable fees and use simple addresses for local testing_20flow emulator --transaction-fees=false --simple-addresses_20_20# Enable code coverage reporting_20flow emulator --coverage-reporting
For the complete and current list of flags, run:
_10flow emulator --help
Debugging & Testing
- Code Coverage: Add
--coverage-reporting
flag and visithttp://localhost:8080/emulator/codeCoverage
- Debugging: Use
#debugger()
pragma in Cadence code for breakpoints
Additional Resources
For advanced configuration options, see the Flow Emulator repository.