How to run a Bee node
Install it, fund it, store something, get it back.
Install it, fund it, store something, get it back.
They collectively provide censorship-resistant decentralized storage and communication services.
“Swarm's mission is to enable a self-sovereign global society and permissionless open markets by providing scalable decentralized storage infrastructure for Web3.”
*For ultra-light and light. A full node also stores and serves data for the network, which makes it a server in a sense.
~55 xBZZ stores ~630 MB for a year, around $2.50 at today's rate*.
Gas is separate and small: under 0.01 xDAI a transaction.
*The storage price and the exchange rate move. Read the live price before you buy rather than trusting a figure on this slide.
No prior Swarm experience assumed.
| From here | What you have at the end of it |
|---|---|
| Install | bee and swarm-cli on your machine |
| First download | A running node — no funding yet |
| Funding | xDAI and xBZZ in your node's wallet |
| How it works | Batches, depth, amount — while it syncs |
| Buy and upload | A batch, and a file on Swarm |
| What breaks | The five expensive mistakes |
Every command is on this page. Stuck? discord.ethswarm.org
| Mode | What it costs | What that unlocks |
|---|---|---|
| Ultra-light | Nothing | Read from Swarm directly — no gateway in between, up to a small allowance |
| Light | xDAI & xBZZ | Upload — buy stamps, write your own data |
| Full | Plus disk and uptime | Stores for the network, and earns on bandwidth |
| Full + stake | 10 xBZZ, non-refundable | Joins the redistribution game — optional |
Staking is a separate, optional step. A full node earns on bandwidth without it — only the redistribution game needs a stake, and that stake is non-refundable.
| What you need | What drives it | Best if | |
|---|---|---|---|
| Terminal — demoed | Node.js 18+, a shell | You, copy-pasting this page | You want to see what's actually happening |
| Agent | Node.js 18+, Claude Code | /swarm-setup-bee | You want the tedium handled |
| Desktop app | Just a laptop | A GUI | You don't want a terminal at all |
Windows: WSL2 first for the top two. The desktop app runs on Windows natively.
Switch lanes whenever you like — all three end at a running Bee node.
node --version && npm --versionnpm install --global @ethersphere/swarm-cliswarm-cli quickstartOr the documented installer: curl -s https://raw.githubusercontent.com/ethersphere/bee/master/install.sh | bash
bee version2.8.2 or newer.
Nothing? Don't grind — switch lanes. Swarm Desktop does the same job with a GUI.
bee start \
--password YOUR_PASSWORD \
--api-addr 127.0.0.1:1633It comes up in ultra-light mode — ready to download.
That password protects your node's keys. One of them is full control of its Gnosis Chain wallet — lose the password and the funds in that wallet are unrecoverable.
swarm-cli statusThe node is waking up and finding peers. Wait, retry, don't debug it.
swarm-cli download cf1df8da8f0a858bd417c34ca26f77fd0ee56351de53db8be3c158b57af811fe/how-to-run-a-nodeThese slides are on Swarm. That's the hash — your brand-new node just fetched the thing you're looking at.
No gateway in the middle. A public gateway would have worked too — but then you'd be depending on whoever runs it.
No account. No sign-up. No card.
That's what the xBZZ is for.
| Token | Amount | What it's for |
|---|---|---|
| xDAI | ~0.01 | Gas — enough to get the node started |
| xBZZ | ~0.20 | Your first stamps |
Not Ethereum mainnet. Gnosis Chain.
| Route | Use it when |
|---|---|
| fund.bzz.limo | You hold crypto on any chain — no bridging, no swapping |
| CoW Swap · Jumper · Gnosis Chain bridge | Buying xBZZ directly, or bringing BZZ over from mainnet |
| Gnosis faucet | You only need the xDAI for gas |
swarm-cli addresses # several — fund the Ethereum oneCtrl+C the node you have running first. Then start it again with the same password.
bee start \
--password YOUR_PASSWORD \
--swap-enable \
--api-addr 127.0.0.1:1633 \
--blockchain-rpc-endpoint https://xdai.fairdatasociety.orgThat RPC is a shared public endpoint and gets rate limited. Use your own Gnosis Chain endpoint if you have one.
storage: not found on startup. It's also shared, so if the sync crawls, a private endpoint is the fix.| Deploying a chequebook | Every light and full node gets one automatically. It's how the node pays peers for bandwidth. |
| Reading chain history | Catching up on which batches have paid for what, so it knows which data the network owes you. |
depth | "volume" How much you can upload with it |
amount | "duration" How long what you upload stays |
swarm-cli calls it a stamp. Same thing.
| Depth | Capacity | 1 week | 1 month | 3 months |
|---|---|---|---|---|
| 17 | ~41 kB | 0.13 | 0.57 | 1.71 |
| 18 | ~6.1 MB | 0.26 | 1.14 | 3.42 |
| 19 | ~102 MB | 0.52 | 2.28 | 6.84 |
| 20 | ~629 MB | 1.05 | 4.56 | 13.68 |
| 22 | ~7.1 GB | 4.19 | 18.24 | 54.72 |
Costs in xBZZ, at the storage price on the day this was written.
The network moves that price with demand. swarm-cli status prints today's, and swarm-cli stamp create quotes a batch before it asks you to confirm.
| Buy | depth 17 — ~41 kB, about a week, ~0.13 xBZZ |
| Don't buy | depth 22 — ~4.2 xBZZ for the same week, far more than the ~0.20 you funded |
Batches can be extended later, so starting small costs you nothing but a second purchase.
TTL is the seconds left on the batch. At zero, the network is free to drop what it was holding.
swarm-cli statusChainsync tells you how far behind the chain your node is. Wait until it's caught up.
swarm-cli stamp createIt asks for a capacity, then a TTL. Answer 40KB and 1w. It works out the rest, shows you the cost, and waits for you to confirm.
Save the stamp ID. You'll paste it into everything from here on.
swarm-cli takes the same thing as flags — --capacity, --ttl, --label — and stamp buy takes a raw depth and amount if you ever need them.
echo "Hello Swarm" \
| swarm-cli upload --stdin \
--stamp <ID> --name hello.txtswarm-cli download <RETURNED_HASH>--stdin | Take the data from the pipe, instead of a file path |
--stamp | Which batch to take the stamp from |
--name | What the file is called once it's on Swarm |
The upload returns a reference. Anyone who has it can download the content.
| Agent | /swarm-setup-bee in Claude Code | Install, funding and first stamp, in the same order |
| Swarm Desktop | ethswarm.org/build/desktop | A GUI, no terminal. Starts ultra-light — download only |
Switch Desktop to light in its configuration before you upload.
| Funding the wrong address | swarm-cli addresses prints several. Only the Ethereum one takes funds. |
| Bringing your own RPC endpoint | It has to be a full archival node. Anything else gives storage: not found. |
| Buying more storage than you funded | Depth 17 ≈ 0.13 xBZZ. Depth 22 needs ~4.2 xBZZ for the same week. |
| Hardcoding the storage price | Ask for a capacity and a TTL and let the tooling price it. |
| Losing the stamp ID | swarm-cli stamp list prints it again. |
| Letting the batch expire | Nothing warns you. Top it up before the TTL runs out. |
discord.ethswarm.org · docs.ethswarm.org
Check the docs. Ask for help.
| Upload a folder | The same command, pointed at a directory |
| Host a website | A folder with an index.html, hosted with nothing to patch |
| Feeds | Static addresses for content you intend to change |
| Build an app | create-swarm-app to scaffold, or bee-js in what you already have |
| Give it a name | Point an ENS name at the hash. It resolves on bzz.link |
| Access control (ACT) | Encrypt chunks and grant access by wallet key |
| Messaging | GSOC — the receiving node has to be a full node |
# check
node --version && npm --version
# install
npm install --global @ethersphere/swarm-cli
swarm-cli quickstart
bee version
# run, unfunded
bee start --password YOUR_PASSWORD \
--api-addr 127.0.0.1:1633
swarm-cli status
swarm-cli download <HASH>
# fund — send xDAI + xBZZ to the
# Ethereum address, on Gnosis Chain
swarm-cli addresses# run, funded
bee start --password YOUR_PASSWORD \
--swap-enable \
--api-addr 127.0.0.1:1633 \
--blockchain-rpc-endpoint \
https://xdai.fairdatasociety.org
swarm-cli status # wait until it is caught up
# buy storage
swarm-cli stamp create --capacity 40KB \
--ttl 1w --label first-stamp
swarm-cli stamp list
# prove it
echo "Hello Swarm" | swarm-cli upload \
--stdin --stamp <ID> --name hello.txt
swarm-cli download <RETURNED_HASH>
# keep it alive
swarm-cli stamp topup --stamp <ID> \
--amount <more>| links.ethswarm.org | Every Swarm link, in one place |
| docs.ethswarm.org | The official documentation of Bee |
| discord.ethswarm.org | Ask a question, join a discussion |
| swarm-devrel.bzz.link | A cheatsheet, served from Swarm |
| github.com/ethersphere | Bee, swarm-cli and bee-js, open-sourced |
These slides: commons3nse.swarm-devrel.bzz.link/how-to-run-a-node