The CLI: fly in Your Terminal 🍯
The buzz
One command, no browser, no wallet popup. It asks the chain, shows you the plan, and does
nothing until you add --yes. The dry run is the default on purpose: a typo should cost you
a re-run, not a transaction. 🪰
The boring part
Read and quote
No key needed. Use --from <address> to say whose wallet you mean.
fly info # network, RPC host, signer, contracts
fly terms # launch fee and the curve's fixed shape
fly launches --limit 10 # newest first
fly launch 3 # by id or token address
fly balance 0xYou # ETH, USDG, $FLY (add --token to include more)
fly fees 0xYou # fees credited to an address
fly quote buy 1 25 --via USDG --from 0xYou # amount is in the --via asset
fly quote sell 1 1000 --via ETH --from 0xYou # amount is in the launch token
fly quote swap ETH FLY 0.01 --from 0xYou
fly manifest # addresses, ABIs, fees, rules as JSON (offline)
Trade
fly buy 1 5 --via USDG # prints the plan and the simulation, sends nothing
fly buy 1 5 --via USDG --yes # signs and sends
fly sell 1 1000 --via USDG --yes
fly swap ETH FLY 0.01 --yes
fly create --name "My Token" --symbol MYT --quote USDG --yes
fly claim USDG --yes
Logo, description and links
fly details 5 --description "What it is" --website https://example.com --x @handle --logo ./logo.png # dry run
fly details 5 --x @newhandle --yes # change one thing; the rest keeps its saved value
fly create --name "My Token" --symbol MYT --quote USDG --description "..." --logo ./logo.png --yes
Only the token's creator can save these. They are stored by the launchpad website, not on chain:
the command signs one message (no gas, no funds) and sends it there, the only command that
contacts a FLY server. create checks the details first, so a bad link fails before the launch
fee is spent. If the launch lands but the save fails, the token exists and fly details retries.
Rules: description up to 500 characters; https links (X on x.com, Telegram on t.me, Discord on
discord.gg or discord.com, website anywhere); logo a PNG, JPEG, GIF or WebP up to 1 MB.
--yes still has to get past the spending limits. The limits are the same ones the SDK uses
(The SDK), set in the environment, never as flags: flags end up in shell history.
export FLY_PRIVATE_KEY=0x... # or FLY_KEY_FILE=/path/to/file
export FLY_ENABLE_WRITES=1
export FLY_MAX_PER_TX="ETH=0.01,USDG=25"
Flags
| Flag | Meaning |
|---|---|
--network testnet|mainnet |
default testnet. mainnet is refused until the launchpad is deployed there |
--rpc <url[,url]> |
your RPC, or set FLY_RPC_URL. Default: the chain's public endpoint (rate limited) |
--from <address> |
act for this address when there is no signer (reads, quotes, dry runs) |
--via <asset> |
the asset you pay (buy) or receive (sell). Default USDG |
--slippage <bps> |
default 100 (1%). The spending policy caps it |
--recipient <address> |
send the result elsewhere. Refused unless FLY_ALLOW_OTHER_RECIPIENT=1 |
--description, --website, --x, --telegram, --discord, --logo <file> |
for details and create. --x and --telegram accept a bare @handle |
--premine <amount> |
on create: a first buy in the pairing asset, in the same transaction |
--json |
machine-readable output |
--limit, --offset |
for launches (1 to 50) |
What a dry run shows
The pay and receive amounts (with the minimum after slippage), the route (directly on the curve or through pool hops), the price impact, a warning when the buy would fill the curve and graduate the token, the steps (an approval first, if needed), and the simulation result. If the simulation fails the command exits with an error and nothing is sent.
fly mcp starts the agent server on stdio.
Back to Builders and Agents.