Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

902 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

nostr Badge Go Badge

H.O.R.N.E.T Storage Nostr Relay 🐝

Unleashing the power of Nostr with a configurable all-in-one relay supporting unchunked files as Blossom Blobs, chunked files as Scionic Merkle Trees, and various social media features as Nostr kind numbers.

Choose Kind Numbers and File Extensions

Relay operators can select which file types and nostr features to enable in the H.O.R.N.E.T Storage Relay Panel with elegant GUI toggles, displayed alongside diagrams and graphs to visualize the amount of data hosted over time.

17 Supported Nostr Features (NIPs)

βœ… - Implemented: Features that are currently available and fully operational. ⚠️ - In-Progress: Features that are currently under development and not yet released.

NIP Number NIP Description Kind Number Description
NIP-01 Basic Nostr Protocol kind0 β†’ User Metadata βœ…

kind1 β†’ Short Text Post [Immutable] βœ…
NIP-02 Following List kind3 β†’ List of Users You Follow βœ…
NIP-05 Mapping Nostr Address to DNS No Specific Kinds Listed βœ…
NIP-09 Delete Note kind5 β†’ Delete Request βœ…
NIP-11 Relay Info Document No Specific Kinds Listed βœ…
NIP-18 Reposts kind6 β†’ Repost of Kind1 Notes βœ…

kind16 β†’ Repost of All Other Kind Notes βœ…
NIP-23 Formatted Articles kind30023 β†’ Markdown Post [Updatable] βœ…
NIP-25 Reactions kind7 β†’ Like, Heart, or Custom Reaction βœ…
NIP-45 Counting Followers & more... No Specific Kinds Listed βœ…
NIP-50 Search Capability No Specific Kinds Listed βœ…
NIP-51 Custom Lists kind10000 β†’ Mute List βœ…

kind10001 β†’ Pinned Note βœ…

kindxxxx β†’ Private Follow List [Encrypted] ⚠️

kindxxxx β†’ Private Bookmark [Encrypted] ⚠️

kind30000 β†’ Public Follow List [Unencrypted] βœ…
NIP-56 Reporting kind1984 β†’ Report a User, Post, or Relay βœ…
NIP-57 Lightning Zaps kind9735 β†’ Lightning Zap Receipt βœ…
NIP-58 Badges kind8 β†’ Badge Award βœ…

kind30008 β†’ Profile Badge βœ…

kind30009 β†’ Badge Definition βœ…
NIP-65 Propagate Tiny Relay Lists kind10002 β†’ Tiny Relay List [Outbox Model] βœ…
NIP-84 Highlights kind9802 β†’ Snippet of a Post or Article βœ…
NIP-116 Event Paths kind30079 β†’ Paths Instead of Kind Numbers βœ…

Run the complete relay stack

The GitHub release archives are the normal deployment path. Each platform archive contains:

  • hornets-relay, Airlock, and the platform-matched hyperswarm sidecar.
  • Native sidecar prebuilds.
  • The version-matched relay web panel.
  • Relay and Airlock example configuration.
  • start.bat for Windows and start.sh for Linux/macOS.
  • Docker runtime assets and a build manifest containing all source revisions.

Extract one archive, keep its directory structure intact, and run:

.\start.bat

or:

chmod +x start.sh
./start.sh

The launcher starts the relay first. On a new installation it waits for the first-run setup to create the relay and Airlock configuration, then starts Airlock. It supervises only the processes it started and cleans them up on exit.

Open http://127.0.0.1:11012 for first-run setup. The setup port is loopback-only in the supplied launchers and Compose files. The default relay endpoints are 11000 and 11002; Airlock's optional HTTP endpoint is configured for loopback on 11006 and is not published by the Docker configuration.

Configuration contract

The standard release layout is:

hornets-relay-<platform>/
β”œβ”€β”€ bin/
β”‚   β”œβ”€β”€ hornets-relay
β”‚   β”œβ”€β”€ airlock
β”‚   β”œβ”€β”€ hornets-hyperswarm
β”‚   └── prebuilds/
β”œβ”€β”€ relay/
β”‚   β”œβ”€β”€ config.example.yaml
β”‚   └── web/
β”œβ”€β”€ airlock/
β”‚   └── config.example.yaml
β”œβ”€β”€ start.bat
β”œβ”€β”€ start.sh
└── README.md

No private key or executable path is copied between processes:

  • The relay owns the relay Nostr identity.
  • Airlock uses its explicit private_key when configured; otherwise it reads the relay key through relay_config_path and derives an Airlock-specific, domain-separated DHT seed. The raw relay key is not copied or reused directly as an Ed25519 seed.
  • The shared Go client discovers a sidecar beside the caller, in the working directory, on PATH, or in standard Hornet Storage install locations.
  • Explicit config and environment values always take precedence, preserving standalone and service deployments.

Generated configuration contains secrets. Restrict it to the service account and do not commit it.

Docker

From a linux-amd64 release archive:

docker compose up -d

From the sibling source checkout (hornets-suite/hornets-nostr-relay, airlock, nosis-cli, hornets-hyperswarm, and hornets-relay-panel):

./docker/build.sh
docker compose up -d

On Windows use docker\build.bat, then docker compose up -d. Persistent relay and Airlock data live in named volumes. The setup UI is mapped only to 127.0.0.1:11012. Operators who need inbound DHT/UDP behavior beyond Docker bridge networking should configure host networking or explicit deployment-specific networking deliberately.

Build the complete stack from source

Requirements: Go 1.25+, Git, Node.js 22+, npm 11.10+, Corepack, Yarn Classic, and a C compiler for the relay and Airlock CGO builds. The relay keeps CGO enabled because its existing statistics store uses SQLite; Bleve remains embedded and does not add another native runtime service. Keep Airlock, Nosis CLI, hyperswarm, and the relay panel as sibling repositories because the development build uses the local checked-out sources.

Badger remains the authoritative event database. NIP-50 uses an embedded, derived Bleve index beside the configured Badger path; it adds no service, port, or separately managed process and is rebuilt automatically if it is missing, incompatible, or corrupt.

Linux/macOS:

./build-stack.sh

Windows:

.\build-stack.bat

The development bundle is written to dist/hornets-relay-dev with the same layout as a release archive. Individual relay-only build scripts remain available for standalone development and the existing service installer continues to use its explicit configuration paths.

Release workflow

Pushing a v* tag runs .github/workflows/release.yml. It checks out the matching component repositories, builds each binary and the relay panel natively on Linux x64, Windows x64, macOS Intel, and macOS Apple Silicon, validates the complete runtime layout, and publishes ready-to-extract archives with SHA-256 checksum files. If sibling repositories are private, configure HORNETS_REPO_TOKEN with read access; public repositories can use the workflow token.

Manual workflow runs build and retain the archives without publishing a GitHub release. Component refs are explicit inputs so a release can pin reviewed Airlock, hyperswarm, Nosis CLI, and relay-panel revisions.

Additional services

The relay can also integrate with:

Security and verification

Bundling changes process discovery and deployment ergonomics only. Airlock remains the verification boundary for repository pushes and pulls; authentication, signatures, permissions, DAG verification, and relay/Airlock trust rules are unchanged. The relay and Airlock can still run separately, can use separate identities, and can connect to an externally managed persistent sidecar.

About

Nostr Relay with Dashboard🌐 Choose Paid, Public or Invite-Only ModeπŸ‘₯ Self-Host Your Posts and CodeπŸ“‚

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages