plain is one small binary that compiles, tests, deploys and verifies your contracts. It runs your Foundry project as it is, needs nothing else installed, and turns the minute-long edit-and-test loop into about a second.
curl -fsSL https://getplain.org/install | shThe installer works on macOS and Linux. With Rust installed, cargo install --git https://github.com/backmeupplz/plain builds it from source.
# a Counter contract and its test, in an empty folder plain init # compile and run every test plain test # simulate, send, then verify on Sourcify, Etherscan and Blockscout plain deploy Counter --network base-sepolia --broadcast
These are median wall times on an M1 Max for veydrift, a game with 300 tests in a 7,500-line via-IR test file, and for Uniswap v4-core. Foundry ran the same commands on the same machine. Hardhat 3 ran them too, and its times are in the full tables.
Each edit run makes a new change, each cold build starts with nothing cached anywhere, and what plain deploys is byte-for-byte what solc produces. The full tables also cover no-op builds, fresh clones and solmate.
plain replaces a toolchain with a single command, so a new project or a fresh clone is ready as soon as the binary is on your PATH.
plain is a single 7 MB executable. You don't need Node, npm or git submodules, and forge-std is built in, so import {Test} from "forge-std/Test.sol" works in an empty folder.
plain reads foundry.toml, remappings and lib/ the way they are, picks the solc version your pragmas ask for, and downloads it the first time you build.
plain deploy runs your script against a fork first, sends the transactions only when every one of them would succeed, and then verifies each new contract on Sourcify, Blockscout and, with your API key, Etherscan.
Pass --network base, linea or a chain id, and plain finds a working public RPC on chainlist.org, while your own RPC URLs still take priority.