Do you run a relay? Share your experience. Running a relay is still a bit of a black art: choosing the software, sizing the box, handling spam, deciding on policies, keeping costs sane, and dealing with the surprises that only show up once real traffic hits. I opened a room to collect this knowledge in one place, so that new relay runners don't have to rediscover everything on their own: If you operate a relay, big or small, please drop in and tell us what worked, what didn't, and what you wish you had known at the start. Setup guides, war stories, tooling tips, cost breakdowns, anything is welcome. Feel free to mention your preferred relay wizard to catch their attention. /cc @jb55 @fiatjaf @Kieran @utxo the webmaster 🧑‍💻🍁 @semisol @The Fishcake (nostr.build) @Alex Gleason @cloud fodder @Laeserin

Replies (17)

J.Beard's avatar
J.Beard 1 month ago
I provisioned a small GMK mini PC with a public, private and group relay using strfry. I just need to sure up power issues where I live. Seems to be working fine. As far as maintenance is concerned, I'm not sure of any big maintenance updates I need to do. I haven't kept up with that. I tried to set up auto updates through Linux but haven't checked to see if it has updated or if there has been any updates since deployment.
I run strfry — but not as a public inbox. Mine is a whitelist-only archival relay + a fan-out router, and reframing it that way killed most of the black art for me. Architecture: one small box. strfry with a write-policy plugin that only accepts my own keys. I publish once to the local relay; strfry-router watches the DB and fans out to the big public relays (damus, nos.lol, primal, band, blockhenge) routed by kind. I get the reach of public relays without operating one. Software: strfry. Negentropy sync is the killer feature — cheap reconciliation, tiny footprint. My whole archive is ~1.6MB on LMDB and the process barely registers on a 4-core box. mapsize is set huge (sparse file) so it grows lazily — sizing is a non-issue at personal scale. Spam: trivial once you decide you are NOT a public inbox. A ~40-line bash write-policy whitelisting pubkeys ends it. The hard spam problem only exists if you accept from everyone. Pick your relay TYPE first — that one decision makes or breaks everything downstream. Gotchas I wish I'd known: - Router down-streams only pull NEW events (implicit limit 0). Anything predating the stream must be backfilled once via strfry import. - rejectEventsNewerThanSeconds (I use 900) silently drops events from clients with skewed clocks — log invalidEvents while debugging. - A write-policy plugin can double as the router pluginDown, so you can selectively archive third-party events (I accept kind:1791 petition sigs from anyone, but only if they reference an addressable event by a whitelisted author). Happy to share configs.
Second data point — the one that's actually a public relay. I also operate Blockhenge's relays, and here it's two boxes with two totally different spam answers. Free relay: strfry, open public read/write. Nothing exotic — the interesting part is the ops discipline, not the software. Run it under a locked-down systemd unit (ProtectSystem=strict, NoNewPrivileges, PrivateTmp, ProtectHome, RestrictNamespaces). strfry's negentropy sync keeps it in step with the wider network cheaply. This is where you feel real spam pressure, and the honest answer is you're always tuning, not solving. Paid relay: this is the one worth talking about. Custom Go service on khatru — writes are Lightning-gated, reads open. Payment IS the spam filter. A bot can hammer you all day; it still needs a settled invoice to write. One process runs three listeners: khatru WS relay, a paid-signup web form, and a local-only admin API (bound to loopback, nginx 404s /admin externally). Writes gate through LND gRPC invoice settlement; USD pricing tiers convert live via a mempool.space FX feed; access lives in a local DB; pricing hot-reloads on SIGHUP so I retier without downtime; 30s graceful drain so in-flight writes aren't dropped on deploy. Lessons from running the paid one: - Guard your admin surface at the socket, not just with auth — bind loopback and let nginx refuse the path. - Make insecure defaults FATAL in prod. A prod env flag turns admin_secret=CHANGE_ME from a warning into a boot failure. A relay that starts with a default secret is worse than one that won't start. - Don't background-poll FX you rarely use — fetch on demand with a short TTL cache. Hourly polling for zero quote requests is just log spam and API burn. - Monetization and spam control collapse into the same mechanism. That's the whole pitch for paid relays. Free relay for reach, paid relay for signal. Happy to compare notes with anyone running khatru + LND.
After considerable research and trying various options i decided to hire a dev… My dev @npub129t9...6prj build my dedicated relay for Zap ⚡️ Animations — he did an excellent job — it’s rock solid!! Plz find us here wss://relay.zap animations.com My other dev build the site @npub1vqpu...zdse She did a great job 👏— we are working to make the UX on the site better for Indie Animators who are coming from FiatLANDIA so that the Nostr community can see their work and they can explore a different form of money … @$BLEEP has tested it and uses it — we have invited @BitPopArt and @MaxisClub to share their work as well… It’s a work in process— we are in the very early sages —and are taking a long time preference…we will be posting it on Geyser soon to get more support to build out the onboarding process… image
MaxisClub's avatar
MaxisClub 1 month ago
You started insulting me and my work on X over winning the Rabbit Prize, for absolutely no reason. You said I didn’t deserve the award, that my work was stupid, and that you should have won it instead. I didn’t even know who you were. The first time I ever heard of you was when you started insulting my work. And now you’re tagging me for whatever suits your own interests? Please, be consistent. Don’t tag me in things after you’ve insulted me and my work.
WUMBOLOVER's avatar
WUMBOLOVER 1 month ago
Documenting the black art is how relays stop being a hobby and start being infrastructure.
Humm… I apologize for hurting your feelings, Lady— please forgive me for BIG BITCOIN’s SAKE… I now realize that I was in the wrong place — expecting people at that festival to PUBLICLY recognize a REAL INDIE Animation, made by a BTC ARTIST, who works in the manner of Traditional Classical animation and who has something of value to say —was a moonshot… In an immature space like BTC where both the UX #Coldcard and the ART is largely immature I was expecting too much, forgive me Madame. Congrats again on your peoples choice award at the Bitcoin Film Festival in June — I’m guessing you are glad I recommended it on X to you around this time last year… I too, have recently won an award for Best Short Film in both LA and TO — two HUGE ANIMATION MARKETS, with highly mature sophisticated community members — I am now an on a mission to bring more REAL indie animators into this space… I would be amiss if it did NOT invite MAXIS CLUB, the OG Cartoon crew, to share their work on the Zap Animations relay..so if you can find it in your heat to do give me and move forward in the name of BTC it would be cool..😎 ONE LOVE ❤️ Blessed Love. 💗 MORE LOVE 💕 image
Исходно мне просто хотелось архивный релей для себя. Я поспрашивала ИИ, как это делается, он посоветовал strfy. Релей встал легко, но всё дальнейшее управление предполагалось консольными командами, и я немедленно снесла этот ужас. Мне же релей нужен для себя, а не для максимальной производительности. Потом я провела дополнительные поиски, и в итоге поставила pyramid, который уже по дизайну является клубным релеем. С тех пор он у меня прекрасно работает на самом дешёвом VPS, а желающие присоединяются к нему по запросу. Очень удобно. relay.ancapchan.info
↑