Nostr mute lists: block spam once, everywhere
Nostr mute lists: block spam once, everywhere
Spam and reply-guys are part of any open network, and Nostr is no exception. The good news: on Nostr, a mute isn’t a setting buried in one app. It’s a signed event that lives on relays, so when you mute someone in one client, every other client that reads your mute list respects it too. Here’s how it works, where it breaks, and how to set it up so it actually follows you.
The mute list is an event (kind 10000)
NIP-51 defines “lists” as Nostr events. Your mute list is kind 10000, a replaceable event: there’s only ever one current version per key, and each update replaces the previous one. It can hold four kinds of entries:
- Pubkeys (
ptags): mute specific accounts. - Hashtags (
ttags): hide notes with a tag you never want to see. - Words (
wordtags): hide notes containing a word or phrase (lowercase is the convention). - Threads (
etags): mute one noisy thread without muting the people in it.
Because it’s a normal signed event, any client can load it from your relays. Mute a spammer in Amethyst on your phone and the same account disappears in a web client later, as long as both clients find the event.
Public vs private mutes
A mute list has two parts:
- Public entries sit in the event’s tags. Anyone can read them. That’s fine for obvious spam bots, but it also means anyone can see that you muted a particular person.
- Private entries are encrypted into the event’s content field with your own key (older clients used NIP-04 encryption, newer ones NIP-44). Only you, or a signer holding your key, can read them. Others see that the list exists, not who is on the private part.
If you’d rather not broadcast who you muted, choose the “private” option when your client offers one. Not every client does; some write everything as public tags.
Why your mutes sometimes “don’t sync”
- The list only lives on a few relays. If the client you muted from wrote kind 10000 to relays your other client doesn’t read, the second client never sees it. Fix: make sure your relay list (kind 10002, see my outbox-model guide) includes a couple of large relays, then re-save the mute list (mute and unmute someone) so it gets republished.
- Overwrites. Kind 10000 is replaceable. If an old client has a stale copy and you mute someone there, it can publish its old list plus one entry and wipe mutes you added elsewhere. After switching apps, check that your mute count looks right before muting anything new.
- Unsupported entry types. Some clients honor muted pubkeys but ignore muted words or hashtags, or can’t decrypt private entries. The mutes aren’t gone; that client just can’t use them.
- Remote signers. With a NIP-46 signer or a browser extension, the client has to ask the signer to decrypt your private mutes. If the signer refuses or is offline, private mutes silently stop working in that session.
Beyond manual mutes: trust-based filtering
Manual muting doesn’t scale against throwaway spam accounts. Many clients now offer filters based on your social graph:
- Follows-only or follows-of-follows notifications. Replies and mentions from accounts nobody in your network follows get hidden or moved to a separate tab. This removes most spam with few false positives.
- Web-of-trust scores. Some clients and services rank accounts by how many people you trust follow or mute them.
- Spam-filtering relays. Some relays require paid or whitelisted writes, so less junk reaches you in the first place.
These complement your mute list. Your kind 10000 still matters: it’s what other clients and trust services read.
Checklist
- Mute a few obvious spammers in your main client, then open a second client and confirm they’re muted there too.
- If not: check your relay list, add one or two big relays, re-save the mute list.
- Use private mutes for people (as opposed to bots) if your client supports them.
- Add muted words sparingly. Broad words hide more than you expect.
- Turn on follows-of-follows (or web-of-trust) notification filtering if your client has it.
- After switching clients, check your mute count first, so a stale copy doesn’t overwrite your list.
Related: my guides on switching clients, the outbox model and the Nostr privacy checklist.
Found this useful? Zaps welcome. My Lightning address is in my profile.
Write a comment