A Crash Course Guide to Nostr

Different network, different ideas.

Nostr is a strange beast: in some ways, it resembles what the Fediverse built with ActivityPub. In other ways, it follows a bunch of totally different concepts. This guide is a best attempt to understand and explain what Nostr is, why it’s different, and how it works. We’ll also cover how to get started with using it.

Let’s dive in.

What is Nostr?

Nostr is short for “Notes and Stuff Transmitted Over Relays”. The description is right there in the name: people transmit notes and other stuff across a network, using a relay system to do it. Initially developed by a Bitcoin developer named fiatjaf, it has grown into a standard and a network of nearly 10,000 daily active users.

The Network in a Nutshell

A key part of understanding Nostr is that your data and identity don’t live on one specific server. Instead, your posts are sent out over an interconnected relay system, and the data all points back to your digital identity.

What this more or less means is that you’re not really tethered to a specific server or platform at all. You and your stuff are effectively everywhere.

How does Nostr work?

As a protocol, Nostr is heavily inspired by communication projects in the peer-to-peer space, such as Secure Scuttlebutt. It takes some very different approaches to how ActivityPub does things.

Let’s take a look at NIP-01, which describes the flow that every other part of Nostr builds on: posting stuff to a network.

Keys, Identity, and Login

Every single user on Nostr starts with a keypair – in fact, that’s a requirement for signing up. You get keys: npub, which is the public key, and nsec, which is your private key.

Effectively, your identity is your npub, which does two things:

  1. Tells everybody who you are.
  2. Helps people discover your profile.

Your nsec is what you use for secure login, and lets apps create posts on your behalf.

Posting with Nostr

All posts in Nostr are called events. When you post, the app you’re using is creating an event with some specific data assigned to it. Here’s a quick example of what a very basic event looks like:

{
  "content": "Taking a big step with nostr:npub1w9wuqc3s6lr25c4sgj52werj3tngvt43qrccqrher4wvn7tjm32s2ck403: we're beginning to write about #Bluesky and #Nostr, and have given them dedicated sections on the site. \n\nI have a piece coming up that's a crash course guide to Nostr for newcomers. It's pretty good so far, but needs work. What are things you think people totally new to Nostr ought to know? What would current-you tell past-you about it?",
  "created_at": 1713698786,
  "id": "fd063434f8c30cece33e87a3bffa7bddae8bef00126a9315a1836ed3434d3887",
  "kind": 1,
  "pubkey": "fb45f982d24c6ddaaed012e28c2514ba7207a08cd738d52e27a5ef6827667900",
  "sig": "6bad1a4b8fcfe878d38b0f9d3691fb78fad5916cb7cebf187edaac9f47b74217e1b2f89eab99ec0bcea2a65b85555602518bda748caf74b92697b5e20b39ef3b",
  "tags": [
    [
      "p",
      "715dc06230d7c6aa62b044a8a764728ae6862eb100f1800ef91d5cc9f972dc55",
      "",
      "mention"
    ],
    [
      "t",
      "Bluesky"
    ],
    [
      "t",
      "bluesky"
    ],
    [
      "t",
      "Nostr"
    ],
    [
      "t",
      "nostr"
    ]
  ]
}

Here’s what that same post looks like on the network.

On a basic level, the data in an event consists of the following:

  • content: a string representing what the user wrote.
  • created_at: a Unix timestamp, represented in seconds of when the post was made.
  • id: a unique identifier, generated as a 32-bytes lowercase hex-encoded sha256 hash.
  • kind: basically the Nostr equivalent of an Activity type. 1 represents a plain-text post with no formatting.
  • pubkey: the public key of the event’s creator.
  • sig: a 64-bytes lowercase hex representation of a signature of the id field.
  • tags: an array of tag objects, represented as string values, that the user put into the post using a client. In this case, there’s a p tag used for a mention, and t tag used for a topic.

That’s basically it. All interactions and data on Nostr build on this concept and extend it in different ways, but this is the simplest representation of what everything else is built on.

The Relay System

Okay, so your post went out to the network. We’ve already established that it doesn’t live on your server, so where is it?

When you post something, the resulting status gets dispatched to relays. Most Nostr apps define a few for you ahead of time, but also let you set relays of your choosing.

My relays, as depicted in Amethyst

Different relays bring different features to the table: some are free, some are paid, some only hold on to your posts for a little while, some are designed to hold posts for years. It’s worth exploring different options, but it’s not a bad idea to start with a few free ones, such as relay.damus.io, relay.nos.social, and relay.snort.social.

Nostr Implementation Possibilities

NIPS, otherwise known as Nostr Implementation Possibilities, are proposed additions to the base specification of NIP-01. They all bring new features and functions to the network, and most apps implement a healthy amount of them. However, not all Nostr apps implement all NIPS.

Here are a few interesting additions

Any Nostr app can bring in any combination of these improvements. They’re very similar to FEPs in ActivityPub, or XEPs in XMPP. Effectively, it’s a grassroots way for developers to come to agreements on how certain things work, without having to go through a lengthy standardization process for every single new feature.

Zaps (Lightning Network)

I would be making a huge mistake if I didn’t bring this up. A significant portion of the Nostr community loves Bitcoin, and many clients implement NIP-57 to hook into the Bitcoin Lightning Network.

Without getting too into the weeds with details, this improvement allows clients to hook directly into a Lightning wallet, enabling users to accept and disburse payments with other Nostr users. This can take the form of:

  • Tipping
  • Market transactions
  • Voting in polls
  • Subscriptions
  • Fundraising

Or pretty much else you can think of. It’s important to understand that this is by no means a mandatory feature of using Nostr, but it’s something a big part of the culture uses and embraces.

How to Get Started

Nostr is a little bit different than other systems in that, typically, registration does not require an email address for accounts to be registered on the network. Instead of passwords, Nostr apps make use of your NPub and NSec keys. It’s a different paradigm from what you might be used to, but the system does work as advertised: any Nostr app can use your keys for login, regardless of where the site is hosted, or what system the app is used with.

Signing Up

For this demonstration, we’re going to register a basic test account. Most web apps for Nostr include a Sign Up button, which generates a dialogue asking for what you want to be called.

After initial registration, you’ll immediately be taken to the timeline. You can edit your details and start posting pretty much right away. Before getting too carried away, though, go to your Settings, and look for a section dedicated to your keys. You will need to back these up immediately.

That’s basically it! Registering with Nostr is pretty easy, and you’ll be able to use these keys to log in to a wide variety of apps that all use the protocol. To provide a simple starting point, we’ve included a few suggestions for beginners below!

Nostr Apps

Nostr has a ton of different apps out there, and you can log in to pretty much any of them. To get you started, here are a few worth trying out:

Snort Social (Web, Free)

Snort is a React-based Web app that kind of feels like Twitter. It has a huge amount of features, is open source, and is super easy to use.

Damus (iOS, Free)

Damus is a high-quality Nostr app for iOS built by some veteran devs of the Nostr community. It features a Global feed, encrypted DMs, and zaps.

Nos (iOS, Free)

Nos Social is a mobile app brought to you by the team behind Planetary, a Secure Scuttlebutt app. Nos prioritizes safety, accessibility, and a beautiful design.

Amethyst (Android, Free)

Amethyst is my personal app of choice for the moment. It’s packed to the gills with features, and includes live streams, community groups, and a marketplace.

Openvibe (Android / iOS, Free)

Formerly known as Plebstr, Openvibe is a simple, stylish app with big ambitions: it aims to support Nostr, Bluesky, Mastodon, and Threads together in one app.


We hope you enjoyed this guide, and that it was helpful! If you had a question or feel like we missed something, feel free to drop a reply in the comments.

Sean Tilley

Sean Tilley has been a part of the federated social web for over 15+ years, starting with his experiences with Identi.ca back in 2008. Sean was involved with the Diaspora project as a Community Manager from 2011 to 2013, and helped the project move to a self-governed model. Since then, Sean has continued to study, discuss, and document the evolution of the space and the new platforms that have risen within it.

Leave a Reply

Your email address will not be published. Required fields are marked *

Back to top button