bind.ws
Relay on demand. Sign once, and it's yours.
A relay at a name picked for you, open to anyone for 14 days. Claim it to keep it.
durable object
Each name has one object. The object holds the SQLite database and the relay's open sockets. The owner is the pubkey that signed the first claim. After the claim, all management is done via NIP-86 calls signed by that key. The relay page is a client of this API. The object can hibernate between frames; retained storage and scheduled work still count.
lease
A lease is a relay at a name picked for you, open to everyone, for a fixed number of days. POST /lease returns one; no key needed. A claim before it expires keeps it, events and files included. After that, the object is wiped and the name is free again.
fuel
Fuel prices four values: events stored, files stored, estimated hours awake and metered rows written. Mirrored site files share the file allowance; Git repositories use SQLite storage and the events allowance. Traffic is visible but uncharged. Below the allowances, you owe nothing. Above them, a zap adds balance. The Health tab and public /fuel show usage and prices.
leave
NIP-77 sync copies readable events to a different relay. Copy site files through Blossom and clone Git repositories separately; event sync does not copy their bytes.
Interfaces
| Endpoint | Protocol | Auth | Notes |
|---|---|---|---|
| wss://<name>.bind.ws | NIP-01, 09, 13, 17, 29, 40, 42, 43, 45, 46 transport, 50, 56, 59, 62, 66, 67, 70, 77 | optional NIP-42 | Sockets hibernate; a negentropy session carries on after a wake. |
| GET / (accept nostr+json) | NIP-11 | none | limitation, retention, payments_url, self |
| POST / | NIP-86 | NIP-98, owner | claim and the management methods |
| POST /lease | lease | optional NIP-98 | A temporary relay for 14 days. A signature reserves the claim for that key. |
| wss://relay.example.com | custom domain | owner | A hostname you own, CNAME to customers.bind.ws. Set on the Identity tab; up to three per relay. |
| POST /events /query /count | HTTP bridge | NIP-98 | The signer has the same access as an authenticated socket. |
| PUT /upload, GET /<sha256> | Blossom | kind 24242 | Stored in R2. Counted as files. HEAD /upload checks first; PUT /mirror copies from a URL; PUT /report files a report. |
| POST /nip96, GET /.well-known/nostr/nip96.json | NIP-96 | NIP-98 | Same bucket and file list as Blossom. NIP-94 tags in every answer. |
| GET /.well-known/nostr.json | NIP-05 | none | Members that have a name. |
| GET /e/<id>, /a/<d>, /feed.xml | pages, Atom | none | Notes and articles as pages with Open Graph tags, and a feed. Only when anyone may read. |
| GET /card.json, /card.svg, /card.nostr | card | none | A status card for links and profiles: members, rules, fuel, the group naddr as a QR. The .nostr form is signed by the relay key. |
| GET /fuel, POST /fuel/invoice | NIP-57 | none | Gauges are public. The invoice comes from a signed zap request. |
| https://<site-label>.bind.ws/ | NIP-5A | relay read rule | Root, named and snapshot sites, verified files and custom-domain targets. Restricted sites use browser sign-in or NIP-98. |
| /<npub>/<identifier>.git | GRASP-01 | signed NIP-34 state | Public clone, fetch and state-authorized push while enabled with open reads. The identifier is percent-encoded. Bounded hosting; storage limits remain independent of fuel balance. |
Limits
| Parameter | Default | Range |
|---|---|---|
| name | 3 to 32 of a-z 0-9 - | some names are reserved |
| max_message_length | 128 KB | 16 to 1,024 KB |
| max_subscriptions | 20 | 1 to 200 |
| max_limit | 500 | 1 to 5,000 |
| eventsPerMinute / reqsPerMinute | 120 / 240 per connection | set by the owner |
| maxBlobMB | 25 | 1 to 95 |
| min_pow_difficulty | 0 | set by the owner |
Metering
| Line | Backing cost | Free / month | Beyond |
|---|---|---|---|
| events stored | DO SQLite | 100 MB | 400 sats/GB-mo |
| files stored | R2 | 1,024 MB | 30 sats/GB-mo |
| time awake | DO duration | 100 h | 11 sats/h |
| rows written | SQLite writes | 250,000 | 2,000 sats/M |
| traffic, rows read | not fuel-priced | not billed | free |
Below the allowances, you owe nothing. With no balance past an allowance, event writes and uploads stop; GRASP requests and remote site fetches also stop. Fuel exhaustion does not delete stored data.
The meters are relay totals, not a bill per feature. Git history remains in retained SQLite storage after refs expire. Provider requests and object operations are host overhead, not separate tenant charges. Understanding fuel explains the shared allowances and metering limits.
Protocol
| NIP | What it does here |
|---|---|
| 01 | Publish, subscribe, and query events. All clients use this. |
| 09 | Delete your own events. |
| 11 | The relay describes itself: limits, retention, owner, payment. |
| 13 | The owner can require proof of work on events. |
| 29 | The relay is one group: joins, leaves and moderation by owner and moderators, state signed by the relay. |
| 40 | Events with an expiration tag are removed at that time. |
| 42 | Clients prove their key. Needed for private kinds and members-only reads. |
| 45 | Count events without downloading them. |
| 50 | Prose search by default; the owner can index all public content or switch search off. |
| 17, 59 | Private messages are sent only to the sender and the recipient. |
| 62 | Request to vanish: the relay deletes all your events and refuses older ones. |
| 70 | Protected events are accepted only from their author, over an authenticated socket. |
| 77 | Sync events with a different relay, in either direction. |
| 86 | Manage the relay with signed JSON-RPC calls. |
| 98 | Sign an HTTP request with your key. Used by claim, management, and the HTTP endpoints. |
| 05 | Members with a name are you@name.bind.ws. |
| 43 | The relay signs and publishes its member list. |
| 57 | Zaps to the relay add fuel. The receipt is stored on the relay. |
| 66 | The relay signs a discovery record about itself, so directories find it without a probe. |
| Blossom | Upload and fetch files by hash on the same host. Check an upload before sending it, mirror a file from a URL, report one by hash. |
| 94, 96 | The same files through the NIP-96 door, with NIP-94 metadata in every answer. |
| NIP-5A | Root, named and snapshot websites from signed manifests, on isolated hostnames. Site hosting and mirroring are on by default; the relay's read rule governs access. |
| Marmot | Opt-in KeyPackages and opaque MLS group messages. Account admission and caps apply to ephemeral authors; clients handle encryption. |
| GRASP-01 | Opt-in public Git Smart HTTP. Signed NIP-34 state authorizes refs, and publication waits for matching Git objects. Owners can inspect retained storage. Later GRASP specifications are not advertised. |