Nostr vs Emojery
Both sign every reaction with your own key. Nostr is built for portable, uncensorable posting; Emojery is built for a count that means something.
The same first step, different goals
Nostr is an open protocol: you hold a key pair, your client signs each post or reaction with it, and sends it to any number of independent servers called relays. Nobody can post in your name, and no single company can switch your
account off.
Emojery starts the same way: every reaction is signed by a key on your device, so the server can't react for you. From there the 2 designs want different things. Nostr wants your voice to be portable and hard to silence. Emojery wants the number under a post to be worth reading: 1 account adds 1 to it, and
anyone can recount it. Those goals pull in opposite directions, and the table below shows where.
Side by side
| Question | Nostr | Emojery |
| Who signs a reaction | Your key | A key on your device |
| Can the server forge your reaction | No | No |
| Cost of 1 fake reaction | A new key, which is free | A real account at a sign-in provider |
| One account, one reaction | Per key, and 1 person can hold any number of keys | Per provider account, with a public proof that each account is real |
| Does everyone see the same count | No: each client adds up whatever its relays returned | Yes: 1 public log, anchored in Sigstore Rekor and mirrored |
| Can you show nothing was left out | No: a relay can skip events without leaving a trace | Yes for the published log: a count must equal a recount of every entry, and an entry can't vanish without breaking the signed history |
| Showing a count under a post | Fetch every reaction to that post from several relays and add them up, or trust 1 relay's own total | 1 cached request |
| Dealing with fake votes | Each client and relay filters on its own | A public reversal of the account's whole history, recorded in the log |
| Deleting your reactions | A deletion request that relays may ignore | Deleting your account takes your reactions out of the counts |
| Who runs it | Anyone can run a relay; there is no central operator | Emojery runs the service; the log, its copies, and the verifier are public |
| Sign-in | None: the key is the account | 1 provider sign-in, needed only to react; reading counts takes none |
| Works in other apps | Any Nostr client | The Emojery extension; the log is open to any tool that reads it |
Why the Nostr model doesn't fit a reaction count
A key costs nothing, so a count of keys means nothing
Making a Nostr key takes milliseconds. That is the point of the protocol, and it is fine for posting: a reader decides whom to follow. A reaction count is different. If 10,000 new keys can each add 1, the number measures how many keys someone made. Nostr's spam defences (paid relays, proof of work in
NIP-13, trust in people you follow) help a feed. They don't help a stranger reading the count under a post on X or YouTube, who has no Nostr follow list to lean on.
Emojery prices a vote at 1 real provider account, and the log shows every account that was opened. Someone with many accounts still gets many votes, but each one costs a real sign-in and is visible to anyone who recounts.
No relay can prove it showed you everything
A relay returns the events it chooses to return. If it skips some reactions, nothing in the protocol tells you, and 2 clients connected to different relays will show different numbers for the same post. Relays can also report a total directly (NIP-45), but then you are trusting that relay's word.
Emojery's log is a single append-only history. Its signed checkpoints are anchored in Sigstore Rekor and copied to a public mirror, so everyone is shown the same history, and the open-source verifier recomputes every count from it. A count that doesn't match the entries fails the check.
Counting is left to every reader
Reactions in Nostr are individual events (NIP-25). To show a number, a client fetches every reaction to that item from each relay it uses and adds them up. A feed on X shows 20 to 40 posts per screen, so that
becomes a stream of queries on every scroll. Emojery answers 1 request per post from a short cache, and the counting is done once, in the open, where anyone can redo it.
Deletion is a request, not a guarantee
A Nostr deletion (NIP-09) asks relays to drop an event; a relay that already copied it can keep serving it. In Emojery, deleting your account always takes your reactions out of the counts, and that reversal
is itself a public entry anyone can check. The same goes for fake votes: removing them is a visible reversal of an account's whole history, never a quiet edit.
Where Nostr is stronger
No single operator
Nostr has no company in the middle. If 1 relay refuses you, you post to another. Emojery is run by 1 operator: if the service stops, new reactions stop. What survives is the public log and its copies, which keep every count checkable after we are gone.
An identity you carry everywhere
A Nostr key works in any Nostr client, for posts, messages and reactions alike. An Emojery account exists for reactions in the Emojery extension.
No sign-in with a provider
Nostr asks for nothing but a key. Emojery asks for 1 sign-in with a provider you already use, and that provider learns that you signed in to Emojery. It never learns what you react to; How sign-in works covers exactly what each side sees.
The bottom line
Nostr is a good answer to "who owns my account and my posts". It is a poor answer to "how many real people reacted to this", because keys are free and no relay can show it gave you everything. Emojery keeps the part they share, a reaction signed on your device, and adds the 2 things a count needs: a real
account behind every vote, and 1 public history anyone can recount.