How to run a Bee node
Install it, fund it, store something, get it back.
Install it, fund it, store something, get it back.
Forty-five minutes of video. About an hour on your own machine. No prior Swarm experience assumed.
Every command is on a slide on this page — you never have to scrub the video to copy-paste. Two points have real waits; a card tells you when.
Funding a node used to be where people gave up on Swarm. It's about four minutes now.
Stuck? discord.ethswarm.org — someone's reading it.
0:02 what Swarm is 0:24 how it works
0:06 pick your lane 0:31 buy + upload
0:09 install 0:38 what breaks
0:14 first download 0:42 what next
0:18 fundingHeld and served by thousands of independent machines, rather than one provider who logs who uploaded what and when.
No account. No sign-up. No card. It's a subscription you hold — not a platform account that holds you.
It finds peers, pays them for your uploads, and fetches your data back. Nothing points at it. Nobody visits it. You can close the laptop.
| Mode | Download | Upload | Needs funding |
|---|---|---|---|
| Ultra-light | Yes | No | No |
| Light | Yes | Yes | Yes — xDAI + xBZZ on Gnosis Chain |
| Full | Yes | Yes | Yes, plus staking |
A light node covers everything in this workshop. Some messaging features need a full node.
The other two are on the next slide, and both end in the same place: a funded node and a file on Swarm.
| What you need | What drives it | Best if | |
|---|---|---|---|
| Agent — demoed | Node.js 18+, Claude Code | /swarm | You want the tedium handled and your time on architecture |
| Terminal | Node.js 18+, a shell | You, copy-pasting this page | You'd rather read than delegate |
| 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.
Desktop app if the terminal is fighting you. And if you want to ship something today without a node at all, Beeport (beta) uploads from the browser — though you're then using someone else's node, not running one.
node --version && npm --versionv18 or newer. Anything older and Bee's tooling misbehaves in ways that look like network problems.
npm install -g @ethersphere/swarm-cliVersion 3.4.0 or newer.
swarm-cli quickstartGrabs the right Bee binary for your platform. No sudo, no piping a script from the internet into your shell.
Prefer the official installer? curl -s https://raw.githubusercontent.com/ethersphere/bee/master/install.sh | TAG=v2.8.0 sudo bash
bee versionExpect 2.8.0 or newer. Do not run 2.7.x — 2.8 was a breaking change.
If this prints a version, you're past the only genuinely fiddly part.
bee start \
--password YOUR_PASSWORD \
--api-addr 127.0.0.1:1633That's ultra-light mode. Downloads work immediately. Uploads don't — that's the next section.
swarm-cli statusThe node is waking up and finding peers. Wait, retry, don't debug it.
swarm-cli download <HASH>These slides are on Swarm. That's the hash. Your brand-new node just fetched the thing you're looking at.
You're paying thousands of independent machines to keep your data and serve it. That payment is the whole reason it stays available without a company behind it.
xDAI — gas. About 0.01 covers deploying your chequebook and buying a stamp.
xBZZ — the storage itself. How much depends entirely on how much space, for how long.
| ~40 KB | ~110 MB | ~680 MB | |
|---|---|---|---|
| 1 week | 0.12 xBZZ | 0.5 xBZZ | 1 xBZZ |
| 1 month | 0.5 xBZZ | 2 xBZZ | 4 xBZZ |
| 3 months | 1.6 xBZZ | 6 xBZZ | 13 xBZZ |
Rough upper bounds — the real price is live, and often ~40% lower.
Your node's address: swarm-cli addresses
bee start \
--password YOUR_PASSWORD \
--swap-enable \
--api-addr 127.0.0.1:1633 \
--blockchain-rpc-endpoint https://xdai.fairdatasociety.orgSame password as before. Ctrl+C the old one first.
Leave it running. The next five slides are the ones worth listening to anyway.
Deploying a chequebook — a prepaid tab with the peers it trades data with, so it isn't settling on-chain every time it talks to someone.
Reading stamp history — catching up on who has paid for what storage, so it knows which data the network owes you.
Depth is how much space. Amount is how long it lasts.
One purchase, two dials. Most confusion about Swarm pricing is someone turning one dial and expecting the other to move.
| Depth | Realistic capacity | Duration | Amount (approx.) |
|---|---|---|---|
| 17 | ~40 KB | 1 week | 9,345,732,487 |
| 18 | ~6 MB | 1 month | 40,053,139,205 |
| 19 | ~110 MB | 3 months | 120,159,417,615 |
| 20 | ~680 MB | 6 months | 240,318,835,230 |
| 21 | ~2.6 GB | 1 year | 480,637,670,460 |
| 22 | ~7.7 GB |
Cost in xBZZ ≈ amount × 2^depth ÷ 10^16. Upper bounds — read the live price: curl -s http://localhost:1633/chainstate | jq .currentPrice
Buy depth 17 first — ~40 KB for about a week, roughly 0.12 xBZZ. Enough to prove the whole round trip.
Reach for depth 22 and you'll need ~4 xBZZ for the same week. It will fail, and the error won't tell you why.
The address never changes — it's derived from the file's contents. Whether the file is still there depends on the space being paid up.
Let a stamp run down and your data stops being served. Top it up and it stays.
swarm-cli statusChainsync Δ under ~10 blocks and you're ready. Buying while it's still catching up is how you get a stamp that doesn't work.
swarm-cli stamp create --capacity 40KB --ttl 1w --label first-stampPrefer the dials directly? swarm-cli stamp buy --depth 17 --amount <computed from live price>
Save the stamp ID. You'll paste it into everything from here on.
swarm-cli stamp listA stamp needs to propagate before the network will honor it. Uploading immediately looks exactly like a broken node.
echo "Hello Swarm" | swarm-cli upload --stdin --stamp <ID> --name hello.txtswarm-cli download <RETURNED_HASH>If Hello Swarm comes back, you're done. Node running, funded, storage paid, data stored and retrieved.
It's derived from the contents, so change one byte and it's a different address. If a hash resolves, what's behind it is byte-identical to what you published.
That's the property people build evidence, archives and citations on.
A feed address is the deliberate exception — it's built to resolve to your newest version instead.
/chainstate.discord.ethswarm.org — or the troubleshooting guide. Ask at hour two, not hour forty.
Nobody is impressed by suffering.
Your node can also: control who reads what (ACT) · keep one address that always resolves to your newest version (feeds) · host a site with nothing to patch · send encrypted notifications.
Before anyone looks at it: top up your stamp. swarm-cli stamp topup --stamp <ID> --amount <more> — a starter stamp lasts about a week, and a dead stamp looks exactly like a broken project.
Swarm Links hub: links.ethswarm.org · Docs: docs.ethswarm.org · Cheatsheet: swarm-devrel.bzz.link · Discord: discord.ethswarm.org
# check
node --version && npm --version
# install
npm install -g @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 this
# 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 # Chainsync delta < 10
# buy storage
swarm-cli stamp create --capacity 40KB \
--ttl 1w --label first-stamp
swarm-cli stamp list # wait ~2 min
# 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>