I've been deep in the architecture of a Nostr-based project for a while now, and I figured it was time to step back and write down what I've been picking up. Partly to organize my own thoughts, partly because every time I try to explain Nostr to someone in a single sentence, I fail. So let me try the long way.
So what is Nostr, actually?
Nostr stands for "Notes and Other Stuff Transmitted by Relays." Catchy, no. Accurate, yes.
The thing that finally made it click for me: Nostr isn't an app, it isn't a company, it isn't even really a "network" in the way Twitter or Mastodon are networks. It's a protocol. A very small one. The whole spec fits in your head once you sit with it for a weekend.
At its core, Nostr is two things:
1. Events — signed JSON blobs. Notes, profiles, reactions, DMs, zaps, whatever. Each one signed by a keypair.
2. Relays — dumb servers that accept events, store them, and stream them to anyone who asks.
That's it. No accounts in the traditional sense. No central server. No federation handshake like ActivityPub. You generate a keypair, you sign events, you push them to whatever relays you like, and clients fetch them from whatever relays they like.
The part that surprised me
I came in expecting "decentralized Twitter" and instead found something stranger and more interesting. Your identity isn't tied to any server. Your `npub` (the public half of your key) is you. If a relay disappears tomorrow, you don't lose your identity — you just publish to a different relay. If a client bans you, you switch clients and your followers come with you, because they were never following you on the client. They were following your pubkey.
This inverts the usual power dynamic. The relay can't deplatform you in any meaningful sense, because there are hundreds of relays and you can run your own in about ten minutes. The client is just a viewer. The user owns the identity.
The trade-off, of course, is that you own the identity. Lose your private key and there's no "forgot password" link. There's no one to call. This is the part that gives normies hives, and it's the part I keep going back and forth on as I design around it.
How a post actually moves
Walking through the lifecycle helped me more than any diagram:
1. I write a note in a client.
2. Client wraps it in an event object, signs it with my private key.
3. Client pushes the event to the relays I've configured (could be 3, could be 30).
4. Each relay stores it and broadcasts it to any subscribed clients.
5. Someone who follows me has their client subscribed to those (or overlapping) relays. Their client receives the event, verifies the signature against my pubkey, and renders it.
No DNS-based instances. No "where do you have an account." Just keys and relays.
Why I keep finding it compelling
A few things keep pulling me back in as I work on the architecture:
- The protocol is genuinely small. You can read every NIP that matters in an afternoon. Compare that to ActivityPub.
- Censorship resistance is structural, not aspirational. It isn't a value statement on a landing page; it falls out of the design.
- Composability. Because events are just signed JSON with a `kind` field, you can invent new kinds. Long-form articles, marketplaces, file metadata, calendar events, encrypted DMs — all just different kinds. The same identity carries across all of them.
- Lightning integration via zaps. Native micro-payments that don't need a payment processor in the middle. Still figuring out how I feel about this one but it's undeniably novel.
Where it gets messy
I want to be honest about the rough edges, because pretending they aren't there does no one any favors:
- Relay discovery is unsolved. How does my client know which relays have the notes I want? Outbox model helps. Not solved.
- Spam. Open protocol, signed events, no gatekeeper. You do the math. Proof-of-work, web-of-trust, and paid relays are all being tried.
- Deletion is a polite request. You can publish a "delete this event" event, but relays are not obligated to honor it. Once it's out, it's out. Has implications I'm still thinking through.
- Key management UX is genuinely hard. NIP-46 (remote signing) and bunkers help, but we are not at "your mom can use this" yet.
Clients I've been poking at
There's a Cambrian explosion of clients right now. Some I've actually used:
- Damus (iOS) — probably the most polished mobile experience. Feels like a Twitter client.
- Primal (web/iOS/Android) — slick, has its own caching layer that makes it feel snappier than most.
- Snort / Iris (web) — good for getting started in a browser without installing anything.
The fun part: the same `npub` works in all of them. Switch clients on a Tuesday, all your follows and posts come along. I cannot overstate how strange this feels coming from the walled-garden world.
Where I am right now
I'm still in the middle of figuring out how all this maps onto what I'm building. Some of the design decisions that feel obvious in a centralized system get genuinely interesting when you remove the central server — moderation, content discovery, user search, even something as basic as "show me replies to this post" turn into protocol-level questions instead of database queries.
I'll keep posting as I work through it. If you've been on the fence about Nostr, my honest take after a few months in: it's early, it's rough in places, but the underlying idea is the most interesting thing I've seen in social protocols in a long time. Worth generating a key and poking around.
If you want to find me on there, my npub is — well, I'll save that for the next post, once I've got the relay set I actually want to commit to.
More soon.