Nostr

I have recently been re-dipping my toes into Nostr (tried it a while back just to experiment with it but never really stuck around), and so far it’s become my preferred microblogging platform. There’s a handful of reasons surrounding that, both in the protocol itself and what’s being built up around it, and I think it has a lot of promise that merits its very quick growth. Today I thought I would go over why I am a fan of it, and why I think it might be worth checking out if you’re interested in a more decentralized web.

Further, moments before I was going to do the final proofread of my post, I ran across a video from [email protected] that covers pretty much everything I talk about in video form, and if you’re like me seeing things visualized is always nice so you can check it out here. As a bonus, it’s hosted on IPFS.

A quick dropdown on Activity Pub and the Fediverse I just wanted to clarify this real quick, a lot of this post (especially towards the beginning) is going to be me comparing why I think Nostr works better than Activity Pub in certain circumstances. I don’t want this to come across too much as me just bashing Activity Pub, it works fine and I’m just comparing it to point out the benefits of the Nostr protocol since Activity Pub is currently the standard for non-centralized social media (assuming you don’t include RSS in the mix there). I’d also like to quickly point out, which I’ll delve into more later on, that in the world of open protocols it’s less a zero-sum game and the two protocols are actually playing nice together with both bringing value to users on both protocols. Even further, by my definition, Nostr is becoming part of the “Fediverse” as opposed to competing with it even if it’s decentralized and not federated.

The Protocol

To summarize how Nostr works, when you create an account your device generates a key pair which acts as your account. Your client can then create “notes and stuff” which it uploads to the relays (servers) of your choosing. Other clients that are also connected to those same relays can then grab a copy of your post as well as stuff like your profile details.

Decentralization

The post Decentralized vs Federated by Kevin Cox is a great on topic read that covers what decentralization is in depth, but the shortened version is a Nostr account (as opposed to something on a federated service) can jump around from relay to relay without any device other than your own controlling the account. This is unlike a Federated protocol like Activity Pub, where your account is created on a server and controlled by said server. Relays can still control what content they host and prevent an account from posting to it, but they can’t modify, delete, or hijack your account; and they also cannot control what other relays your account is or is not communicating with alongside their relay.

Efficiency and Simplicity

Nostr is also very efficient and fairly simplistic. As for efficiency, all posts on Nostr are text only, and relays do not communicate with other relays. While you can still see images or videos in posts like any other platform, they’re hosted elsewhere and embedded in the post instead of being hosted by a relay, limiting storage requirements to plain text. Similarly, unlike an Activity Pub server that keeps a copy of posts on other servers it’s federated with, relays exist entirely independently of each other and don’t communicate with each other or keep copies of data stored on other relays.

Its simplicity ends up making it easier for projects to be built on top of it. That’s not to say that other protocols like Activity Pub can’t interact with other projects outside of its main implementation, but Nostr still lends itself to easier integration: two examples being Lemmy and BirdSiteLive. As Lemmy goes, even though it’s using Activity Pub, because accounts are tied to a server and a standard microblogging server doesn’t understand Lemmy a Mastodon account can’t properly interact with Lemmy and generally requires a separate account on a Lemmy server to use it properly. BirdSiteLive is a bridge that takes Twitter posts and presents them in Activity Pub format, allowing you to follow Twitter accounts with an account on an Activity Pub server. However, because Mastodon servers handle federation a large number of server owners (including the flagship mastodon.social instance) defederated with it.

In Nostr’s case, however, with accounts that are not tied to servers you can sign into an account with any client that communicates with any combination of relays, therefore adding an equivalent service is generally as easy as copying and pasting a relay URL. There are plenty of good faith reasons for an instance to defederate with various instances and projects such as BirdSiteLive, but with Nostr it gives you the option to choose exactly which services you use and which you do not, without the need for the server to make the decision on the community’s behalf. Similarly, since an account is not tied to a server there are no issues where the server itself doesn’t support a particular implementation of the protocol. Similar to the case with Lemmy’s, not all Nostr clients and relays support link aggregator style content on Nostr, but it’s a breeze to switch to a client that does and add supported relays to begin using it without getting locked into only what a particular server supports and has enabled.

Account Identification

Finally - as far as the protocol is concerned - there’s identifiers, which are a bit of a double-edged sword. Being a key pair accounts are not paired to a server, but that comes at the cost of having a particularly long username. As I mentioned in my post about IPFS which also uses cryptography to identify things (in this case files):

Generally speaking, you can identify content three ways: by consulting a central authority (such as ICANN with normal domains), a decentralized authority such as a blockchain, or math using hashes and/or public-private key pairs (IPFS being the latter). While this leads to the benefits of IPFS, it also means that there can be no human memorable domains built in.

That means that your main username is long, something like npub1jy90jpcdl447ae3lp4924s65khdpvnttkg7fepmvmafycusyueksrvllx9, which is a hash of your public key and referred to as a NIP01. Being in a digital age your NIP01 can just be copied and pasted, though it’s obviously not too convenient. There are multiple different NIPs, however, some of which can be used to identify accounts more memorably. For example, a NIP05 can be set with a domain, allowing a more Activity Pub style username like [email protected] and accounts can also be located with that username as well. These are set by a client, signed with your private key, and then uploaded to any relay you’ve set to mirror your account.

Better Elaboration on NIPs To elaborate further NIP stands for Nostr Implementation Protocol and there are a total of 99 NIPs implemented in the official Nostr project at this moment. It is up to a client and relay to choose which ones they do or do not support, and theoretically (as far as my limited knowledge goes) if a client and relay both agreed on unofficial ones they could also be implemented. Not all of them are the same, for example while NIP05 acts as a username that is verified through ICANN domain ownership, NIP90 acts as “vending machine” instructions to automate sales. Long story short, a NIP is just a bit of code that handles how a client and relay interact to perform a particular function, with functions like identifying an account with an easier username, building a marketplace, or creating a livestream being amoung the 99 currently existing NIPs.

Every Day Use

Beyond the above where I went over how it differs from similar protocols like Activity Pub at a more core level, there are also the differences you’re likely to run into if you’re actually using it, and those will likely have an even bigger effect.

Client and Relay Customization

One of the first things that will likely stand out is that your client, not the relays (servers), combines all of the posts and replies from various relays into one big network. You can add a relay (most clients come with defaults, but those can be changed), choose how to interact with that relay, and then the content from the accounts that use the relay will be visible and interactable in a very similar way to how Activity Pub handles federation. You can of course tune how your client interacts with a relay, for example in the Amethyst client you can enable or disable a relay:

Uploading Data Will enable/disable the client from mirroring your account on the relay
Downloading Data Will enable/disable the client from downloading content from other people’s profiles mirrored on the relay
Showing up in your home feed Will enable/disable content from that relay from showing up in your home feed
Delivering direct messages Will enable/disable other users’ ability to use that relay to send direct messages from you
Showing up in Nostr chat rooms Will enable/disable the delivery of public chat content from that relay
Showing up in the global feed Will enable/disable content from that relay from showing up in your global feed
Showing up in searches Will enable/disable content from that relay from showing up in searches

This gives a great deal of control over what you see and where it shows up, for example by disabling private messages from users on a particular relay. Keep in mind that it only prevents that relay from delivering the message, so if you and a user have two relays in common and only one relay has been disabled the other relay will still deliver that same message. In this way choosing your preferred level of moderation and how you go about doing so is entirely up to you.

This also makes it a lot easier to add or remove various projects built on top of Nostr. For example, if you wanted to follow RSS feeds in a Nostr client you can simply add a relay such as rsslay.nostr.moe and begin using the project without any hassle. For example, by adding the relay then following my blog’s feed below:

npub1mw8lhf8lcuvy6gvkmkphdekf80mr52jcywf92ys5230g4r76pptq98rfny

Once relays have been configured you can then go and follow/interact with any account that you share at least one relay in an identical manner to any other microblogging platform.

Openness

Something else I’ve observed in my second go around toying with Nostr is that there are a lot of people building projects that take advantage of Nostr’s openness as well as various protocols and tools built into Nostr almost like plugins via the various NIPs. Group chats and boards, relays that convert RSS to Nostr profiles, live streams, photo/video posts you can scroll through like YouTube Shorts, Mostr - a bridge that brings Nostr into the Fediverse; all just random things that make the protocol feel really open when compared to something like an Activity Pub server where the server is responsible for handling everything and can’t let a client connect to a different server that serves a completely different function.

I mean heck, of the handful of accounts I followed at the time of my first draft of this post not a single one was a traditional Nostr account, all of them were Fediverse and RSS feeds bridged in by community members who built projects on top of Nostr that make it feel incredibly open.

Community & Growth

Nostr has grown pretty fast, growing to about half of what the Fediverse has in under a third of the time (albeit, both getting a jolt of users with the Twitter drama so it’s not totally 1:1). I’m expecting it to grow a lot more, especially given it’s probably at the stage where the platform and community are rapidly improving rather than being more mature in a more final form that doesn’t leave a ton of room for improvement that risks breaking things that it was built around.

The community itself is a bit of a double-edged sword. Right now it’s very somewhat dominated by crypto enthusiasts, and hey, I like the ideals behind it but I doubt it’s replacing central banks, I’m not interested in your NFTs, and I really don’t want to follow a bunch of people who make it their entire personality. But, at the same time, I think it’s also becoming the home of a lot of techy people who appreciate technology as opposed to the other branches of people in the alternate tech space such as the ones who left mainstream platforms for political reasons or the kinds of people who think web technology shouldn’t have progressed passed the ’90s. And to paraphrase a post from Jack Dorsey I saw somebody share partway through drafting this post, it’s usually the techy people who build something up and get things ironed out so that it can suddenly be plug-and-play for the rest of the internet.

Moderation can also be a bit meh, given accounts are created with key pairs it’s really easy to generate a bunch and connect to a lot of relays without any sort of hurdles in place. It’s not issue with the the protocol itself, since relays are still able to control who’s accounts they do and do not mirror using some of the standard hurdles to problematic users such as: requiring registration, using automated filters and tools, asking for payment, and good ‘ol manually kicking people off a particular relay. It isn’t horrendous as the “standard” global Nostr feed isn’t too dissimilar to the federated timeline on any moderately or mildly moderated Activity Pub timeline, and again gives you the tools to choose exactly how and what you want to connect to. Still though, if you want a very toxicity-free experience you’ll probably need to either avoid the global feed or modify relays from the “standard” relays that clients often default to. Not that it’s dissimilar to choosing a Fediverse server in part based on how much or how little moderation you prefer.

A further elaboration on moderation

I finished this post’s draft a while back, and since then I’ve actually noticed that most of the more chaotic portion of the global feed is acutally coming from Activity Pub bridges: while Mostr is the main project a number of other additional relays build off Mostr and mirror content one way from Activity Pub to Nostr (including ones that are pre-set on clients like Amethyst). I’m leaving the above paragraph in since it’s still the case of the standard experience, but would like to update this to further emphesize the point that it’s not the protocol but just what you (or your client) configures to see or not see. I don’t mean to scare anyone away from either, it’s just the firehose you’d expect to see from any federated protocol (or decentralized protocol, or even centralized social medias) that contains all sorts of characters from all sorts of communities. I’ll speak more on the bridge(s) in just a second.

Again though, I’d like to emphesize it’s completely up to your configuration to control what relays (and what people on those relays) show up in feeds, and which ones are communicated with or not entirly.

Last, on the community side of things, there’s already a plethora of communities on Nostr integrated through its openness. I know I’ve been comparing Nostr and Activity Pub a lot in here, but it actually feels like they’re integrating nicely together. For example: with RSS bridges on Nostr all of your favorite blogs + microblogs, news sites, and even your favorite YouTube channels and Substack creators are already part of the Nostr community without them even being aware of it. The same goes for the entire Fediverse, thanks to Mostr the bridge that allows accounts on the Fediverse and Nostr to interact without any issues (soon alongside Ditto, a dual Nostr Relay/Activity Pub server in development). I guess that’s the great thing about open protocols, as they allow integration as opposed to jumping from one walled garden to the next - and Nostr is built to be about as open as it gets.

Trying out Nostr

If the above sounds interesting, then there are a couple easy ways to check Nostr out. Despite the complex options to configure clients and relays, the act of joining Nostr really only takes about five seconds plus the time to install any applicable software.

Clients

The simplest way to check out Nostr is to try something like Snort.Social in your web browser. This is very much counterintuitive to the whole decentralized aspect, and theoretically they could nab your keys and take over your account at any time. Still though, worst case it’s no different than a traditional social media site or a Fediverse server, and if you want to give Nostr a try you can fire up the Snort web client that’s using the Snort relay and check it out. Something like this would also probably suffice if you only wanted a generic account to follow other accounts or to post the occasional pseudonymous meme.

Beyond that, I’ve been using the Amethyst client. It’s built for Android and available on F-Droid, Google Play, and Github. It’s a pretty functional client that runs fast, is kept up to date, and has a lot of additional feature support like livestreams or group chats if you want to toy around with those alongside standard Nostr microblogging. I almost exclusively use microblogging platforms from my phone, but when toying around with it on my computer I’m just using Amethyst via Waydroid. But if you’re not looking to use Android or an Android container I would recommend checking out awesome-nostr, a GithHub repo with a list of various tools including an extensive list of clients. Using a trusted software client is the only way you can truly make use of the benefits Nostr brings to the table and the only way to actually be sure you control your account keys.

Registration

Once you have your client all ready to go you’ll generally be prompted to log in or to register. Registering is usually a single click away, and your client will generate a private and public key. Your private key is your account itself, and you can usually log into any client with it, but if you lose it or it gets stolen your account is lost so be careful with it. Your public key, and more specifically your NIP01 (SHA-256 hash of your public key) is how people find your account and follow or interact with your posts. From here you can edit your profile details (display name, bio, links, etc).

You can also optionally register a NIP05 using your own domain or a service that lets you use theirs. This will give you a username that’s easier to remember, at the cost of requiring you to have a domain or giving control of your NIP05 username to another service. Here’s a guide to using your own domain, but it pretty much boils down to creating a /.well-known/nostr.json file on a web server, such as mine at nate.mecca1.net/.well-known/nostr.json. Alternatively, if you don’t have a domain or don’t want to use your own you can register for free with a service like Nip05.Social.

Configuration and Use

With your account all registered and setup, from here you can optionally configure relays, such as taking less moderated ones out of your global feed or adding relays that serve a particular function such as Mostr or RSSlay. With that complete you’re ready to find/follow accounts by searching NIP01s or NIP05s, follow tags or configure what shows up in the global feed, and to start posting your own posts.

Wrapping Up

So after all that, is it a good time for me to mention I don’t spend a ton of time on microblogging platforms or social media in general? I usually just check in every few days to share some random thought or article and check in on accounts I find interesting. But as far as microblogging platforms go I think Nostr has to be my favorite, especially when I can follow just about anything anywhere, and it’s the only microblogging platform I am activly using at the moment. If you’re also on Nostr send me your public key, I’m looking to find some new people to follow and if you’re reading this you can’t be too bad, right?


Follow Me via Nostr

If you want to check out my profile you can find me on Nostr at [email protected] or at:

npub1jy90jpcdl447ae3lp4924s65khdpvnttkg7fepmvmafycusyueksrvllx9

or on some Fediverse servers via the Mostr bridge by searching:

@910af9070dfd6beee63f0d4aaac354b5da164d6bb23c9c876cdf524c7204e66d@mostr.pub
-or-
https://mostr,pub/users/910af9070dfd6beee63f0d4aaac354b5da164d6bb23c9c876cdf524c7204e66d

and you can follow my blog’s feed via Nostr by adding wss://rsslay.nostr.moe to your relays and following:

npub1mw8lhf8lcuvy6gvkmkphdekf80mr52jcywf92ys5230g4r76pptq98rfny