Community

NIPs

NIP-89: Recommended Application Handlers

NIP-89 lets Nostr apps advertise which event kinds they can open and lets users recommend handlers, so an unknown event can lead to the right web, mobile or native client instead of a dead end.

NIP-89: Recommended Application Handlers visual
NIPs Under the hood Events, NIPs, relay behavior and the shared formats apps can trust.
Back to Nostr
NIPs Open NIP map Deep guidesConcepts, NIP pages and source checks BrowseClose
Application datadraftoptionalapp discovery

NIP-89: Recommended Application Handlers

NIP89Recommendationkind 31989Handler infokind 31990Core tagsd, a, k, web, ios, androidEntity formatNIP-19RelatedNIP-5A nsite manifests

Nostr keeps inventing event kinds faster than every client can understand

A strength of Nostr is that new event kinds can appear without asking a central platform for permission. The cost is discoverability. A client may encounter a chess game, classified listing, video event, zap goal or wiki page and have no idea which app can open it well.

NIP-89 creates a recommendation and handler-discovery layer. Apps can publish handler information. Users can recommend which apps handle a given kind. A client that sees an unfamiliar object can ask the network where to send the user.

That is a product-layer standard, not core relay plumbing. It helps the long tail of Nostr apps feel connected.

Kind 31989 recommends; kind 31990 describes

Recommendation events use kind 31989. The d tag is the supported event kind, and a tags point to handler information events, optionally scoped to platforms such as web, iOS or Android.

Handler information events use kind 31990. They can carry app metadata, one or more k tags for supported event kinds and URL templates for NIP-19 entities. A web handler might publish a URL with a bech32 placeholder, which the client replaces with an naddr, nevent or nprofile.

Recent edits connect web handlers to NIP-5A-style site manifests through latest and next tags, making app discovery more deployment-aware.

App handlers became more serious as Nostr apps diversified

NIP-89 entered the repo in 2023 and saw early compatibility work from Jon Staab and Asai Toshiya. In June 2026, hzrd149 connected handler descriptors to aggregate hashes and site snapshots through PR #2287, tying the NIP to the newer nsite deployment story.

The file history is a reminder that NIP-89 is not only about opening a link. It is about helping users move between specialized Nostr applications without each client becoming a monolith.

The more event kinds Nostr gains, the more important this routing layer becomes.

Early handler work2023 by Jon Staab and Asai Toshiyansite linkage2026-06 via PR #2287Open Git history

Recommendations needs to respect platform and user preference

A client needs to not blindly open the first handler it finds. It needs to consider the user's platform, installed apps, web fallback, who recommended the handler and whether the handler actually declares the event kind.

Apps publishing handler information needs to keep URL templates current and support the NIP-19 entity forms they advertise. Broken handler URLs are worse than no handler because they teach users not to trust cross-app routing.

NIP-89 works well when the user feels in control: open in this app now, remember my choice later, or inspect other handlers.

31989User recommendation for handlers.
31990App handler descriptor.
kSupported event kind.
web / iosPlatform-specific route templates.

Handler discovery can become app spam

If any app can claim support for any kind, clients need reputation, user preference and sanity checks. A malicious handler can phish keys, misrender data or trap users in a bad app.

The NIP is strongest when recommendations come from trusted users and handler descriptors are treated as claims to verify through product behavior.

Read NIP-89 in the wild

NIP-89 lets people recommend application handlers for event types. That helps Nostr avoid one super-app by letting specialized tools open specialized objects.

Handler choice can also become quiet capture. Show who recommends the handler, let users override it and avoid turning recommendations into an app-store funnel.

What changes when you actually use it

For you, NIP-89: Recommended Application Handlers is felt when a specialized experience still remains portable. Games, forums, handlers, static sites and local transports become useful only when another client can understand the same object. The source terms kind 31989, kind 31990, kind 0, kind 1, kind 31337, draft are the difference between an open feature and a private app convention.

What changes for builders and operators

For builders, NIP-89: Recommended Application Handlers needs cross-client proof. Create an object in one product, open it in another, then test what survives without special server knowledge. That is where an app-specific idea becomes a real Nostr surface.

What the official file makes concrete

The official file is organized around Rationale, Parties involved, Events, Recommendation event, Handler information, Client tag, User flow, Example. Inspect kind 31989, kind 31990, kind 0, kind 1, kind 31337, draft, kind:31989, kind:31990 because these are the pieces most likely to surface as product behavior. Read it beside NIP-01, NIP-19, NIP-31 before treating it as isolated.

NIP-89: Recommended Application Handlers earns trust when a second client can understand the same object without a private handshake.

Where it breaks

The failure mode in NIP-89: Recommended Application Handlers is private interoperability. The event exists on Nostr, but only the original app knows how to use it. Test a second interface and a second relay before calling the feature portable.

Where this appears outside the markdown

In the ecosystem, NIP-89: Recommended Application Handlers is where Nostr stops being only a feed and becomes a surface for specialized products: forums, games, static sites, handlers, local transport or application state. The standard matters only when another client can open the same object without calling the first app for private instructions.

The nearby-standard trap

The nearby-standard trap in NIP-89: Recommended Application Handlers is mistaking novelty for interoperability. A clever app-specific event is not a standard until another client can use it. Read NIP-01, NIP-19, NIP-31 to see whether the feature has a path out of its first product.

Language that keeps the feature honest

Good product copy for NIP-89: Recommended Application Handlers names portability. It tells you whether another client can open the object, whether a relay or app-specific convention is required, and what might fail when you leave the original product.

What this page does not promise

NIP-89: Recommended Application Handlers does not make a niche feature portable just because it uses Nostr events. Portability begins when another client can parse the object, recover the context and show a useful experience without a private API. Read NIP-01, NIP-19, NIP-31 and look for second-client evidence before treating the format as settled.

Read it as a field test

Start NIP-89: Recommended Application Handlers with interoperability. If kind 31989, kind 31990, kind 0, kind 1, kind 31337, draft cannot travel into another useful interface, the feature is still mostly an app convention. Read NIP-01, NIP-19, NIP-31 and look for public examples before assuming a specialized NIP has become a stable product surface.

Where the standard earns trust

The source links give you places to test the interpretation in public: PR #2287, NIP-19 entities, Amethyst release note. Use those links to move from the spec to live libraries, mirrors, pull requests, guides or products.

Official NIP-89 source is the anchor for exact wording, and NIP-89 commit history shows how that wording moved over time. The strongest secondary clues here are PR #2287, NIP-19 entities, Amethyst release note. Treat this evidence chain as part of the article, not as footnotes. A NIP page becomes useful when you can move from claim to source to working behavior without guessing.

Keep the chain visible for NIP-89: Recommended Application Handlers: first the human promise, then kind 31989, kind 31990, kind 0, kind 1, kind 31337, draft, then the implementation record, then the real-world failure case. That order keeps NIP-89 useful without turning it into marketing copy or protocol trivia.

Three questions to carry forward

  • Can a second app open the object and make it useful, or does the first product still carry the real meaning?
  • Which part is standardized in kind 31989, kind 31990, kind 0, kind 1, and which part remains a convention, server policy or UI choice?
  • What happens when the app, relay, local transport or handler that created the object is gone?

What to verify before you rely on it

  • Find kind 31989, kind 31990, kind 0, kind 1, kind 31337 in the official file and check where the UI exposes the same concept.
  • Read NIP-01, NIP-19, NIP-31 as context before treating NIP-89 as a complete product story.
  • Open at least one implementation, mirror, pull request or library source from the source links before trusting that the idea is mature.
  • Test the unhappy path: missing relays, stale metadata, invalid signatures, blocked events, expired state, revoked permissions or unavailable media.
  • Write the user-facing copy in plain language. If a standard changes authority, privacy, money, moderation or recovery, say that before the click.

Direct sources

Use these sources for NIP-89: Recommended Application Handlers in that order: Official NIP-89 source for the current wording; NIP-89 commit history for the change record; PR #2287, NIP-19 entities, Amethyst release note for public context. The article gives you the consequence in plain language, but the source trail is where exact fields, status notes, unresolved debates and implementation proof stay checkable.

Back to the NIP hub
NIPs route visual cue 1
NIPs route visual cue 2
NIPs route visual cue 3
NIPs route visual cue 4
NIPs route visual cue 5