the protocol

nostr is a protocol for establishing pseudonymous identities and using them to cryptographically sign messages and pass them around via relays. it grew out of a small community of bitcoin/lightning devs, specifically fiatjaf. it was a reaction to the counter-party risks in using centralized social networks (twitter, facebook, etc) and the failings of other, semi-decentralized approaches (mastodon).

bitcoin familiarity helps when groking nostr. the identity portion of nostr is private/public key pair. similar to a bitcoin wallet where one uses one’s private key to sign a transaction and publish it into the network, one uses a nostr private key to sign an event and publish it to relays. there are various defined kinds of events, from profile information (name, about, url, avatar url, etc), to contact lists (follows), to notes (a short plain text message). the bitcoin network is peer to peer (distributed), where nodes will gossip transactions around to all the other nodes, but this is not the case with nostr. events stay where you publish them, relays only talk to clients, not other relays. this makes nostr decentralized, but not distributed. since it’s not peer-to-peer, one client doesn’t need to see the entire traffic of the network, or to query some distributed hash table a la IPFS, to find content across the network. this middle ground between centralized and distributed allows snappy response times yet prevents the domination of network lock-in.

a nostr client looking to read messages connects to a set of relays defined by the user and hands them each a filter. that filter usually contains a list of pubkeys that the user follows, but it is also possible to filter on event kind, before and after timestamps, or various combinations.

the first use cases for nostr were various clones of twitter and similar services. and even if this were the full extent of the possible bredth of nostr, it would be immense and very valuable. but this is still very early days. anything that benefits from a publish/subscribe architecture could be mapped onto nostr.

the impact

bitcoin used the power of decentralization to create a digital asset that disallows seigniorage, redirecting the lost purchasing power to those who carry bitcoin over time. nostr aims to do a similar trick with centralized social networks. twitter is able to reap the benefits of the network effect they create by owning the network entirely. they can gatekeep who joins and under what circumstances. since the gravity well of users is so deep there, it has it’s own network inertia. nostr offers an alternative where there is no centralized gatekeeper. anyone anywhere can create a private/public key pair at will. and your followers and content are not locked into one operator. it is as easy as starting your own website to start your own relay. this has the effect of paying the benefit of the network effect to those who provide the network value, proportional to that value. so just as the bitcoin schelling point is to buy and hold, the nostr schelling point is to provide value and find your audience on nostr.


there are all manner of clients across all platforms and more every day. a few suggested clients:




if you have experience using nostr on ios, ping me on nostr (see below) and let me know.


this is a moving target. free relays are quickly becoming a thing of the past, and the role of relays in the nostr ecosystem is still feels like it’s evolving. I’ll add more thoughts here as they arise.


the NIP05 protocol specification is a way to point DNS to a public key, which can serve whatever purpose the user has for that. for one, it’s a good way to discover if someone you follow, a blog or personal website, uses nostr. it’s also a good way to validate that the pubkey you are seeing on nostr is in fact the same entity you know from elsewhere. for example, when @jack showed up on nostr, people were rightly skeptical. however, he caused the domain to point to his public key.

browser plugins

find me

my pubkey is npub1mkq63wkt4v94cvq869njlwpszwpmf62c84p3sdvc2ptjy04jnzjs20r4tx, if you have a nostr: protocol handler configured, you can