Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Floonet

Floonet is a network of Nostr relays for the Grin community. Anyone can run one, and anyone can run a name authority on one so people can claim (and optionally pay for) a name.

A Floonet relay is an ordinary Nostr relay with strong opinions. It stores only the handful of event kinds the Grin ecosystem actually uses, it says nothing about payments in its public metadata, it welcomes connections arriving over Tor, and it ships hardened by default. Wallets like Goblin use Floonet relays to deliver gift-wrapped Grin payments and to resolve names like alice.

The flagship relay, relay.floonet.dev, runs floonet-strfry and is the Goblin wallet’s default money-path relay: wallets reach it over Tor, dialing its ordinary clearnet host through a Tor exit so the wallet’s own IP never touches the payment path. The same relay also hosts the Magick Market marketplace, so it runs the shipped default whitelist unmodified: one relay, two applications.

The two packages

Floonet ships as two relay packages. Both carry the same conventions; pick the one that fits how you like to operate.

PackageBaseShape
floonet-strfrystrfry (C++)Stock strfry at a pinned ref plus a spec: a modular write-policy plugin, a bundled name authority, and a TLS proxy, deployed as one Docker Compose unit.
floonet-rsnostr-rs-relay (Rust)A single binary with an installer and a hardened systemd unit. Policy lives in a composable admission module; the name authority and the GoblinPay payment processor are built in.

Both add the same four features, each configurable, optional, and modular:

  1. An event-kind whitelist (the keystone: default deny, see below).
  2. Authentication: NIP-42 plus pubkey whitelists.
  3. Paid access and paid names via GoblinPay (Grin).
  4. A name authority: the bundled NIP-05 service that maps names to keys, served under the relay’s own subdomain by default so name@relay.yourdomain just works with no separate hostname to run. Chosen in setup, it can run alongside the relay, standalone, or not at all, and it supersedes the older standalone goblin-nip05d.

The relay needs no special transport component. Wallets reach it over Tor; a Floonet relay is just a normal public relay that accepts Tor connections.

The whitelist keystone

The single most important design decision in Floonet is default deny. A Floonet relay accepts only the event kinds it has been explicitly told to allow, and drops everything else. The core of the allowed set is exactly what a Grin payment wallet needs:

KindWhat it is
0Profile metadata
3Contact list
5Deletion request (NIP-09)
13Seal (NIP-59)
1059Gift wrap (NIP-59): the sealed envelope payments travel in
10002Relay list (NIP-65)
10050DM relay list (NIP-17)
27235HTTP auth (NIP-98): used by the name authority

The shipped default in both packages is this wallet core plus the Magick Market marketplace kinds (listings, orders, receipts) and Nostr Connect login: 24 kinds in total, and exactly the list running in production on relay.floonet.dev; the allowed kinds reference has the full table. Everything else, zaps and bot spam, is rejected. This keeps a Floonet relay lean, cheap to run, and uninteresting to abuse. The list is one editable config value in both packages, so it can grow (or shrink to the wallet core) without code changes. See The whitelist: default deny.

Public notes get one extra gate on top. The two public-note kinds, 1 (text notes) and 30023 (long-form articles), are accepted only from an operator-chosen set of authorized authors, and are closed by default. That is the self-hoster guarantee: running a Floonet relay means no public-note spam, and you decide exactly who can post notes and articles (for example an official news key), while profiles, gift wraps, marketplace events, and DM and relay lists keep flowing for everyone. See Public notes are author-locked.

How to read these docs

  1. Concepts: the ideas every operator should know, whichever package they run.
  2. floonet-strfry and floonet-rs: deploy, configure, and extend each package.
  3. Operate: hardening, rate limits, and charging GRIN for relay resources.
  4. Reference: config keys, endpoints, and the allowed-kinds table.

Where these docs cite code, they use file:line references into the package source or the pinned upstream so you can read along.