1 Overview
Not every Nostr event starts life on Nostr. A bridge is a service that copies content from another protocol into Nostr events. ActivityPub posts, Bluesky posts, RSS items, and plain web pages can all arrive this way.
A bridged copy loses its origin unless the bridge records it. This NIP defines one tag for that record: the proxy tag. The tag holds the ID of the source object and the name of the source protocol.
Clients may use the tag in two ways. They can reconcile duplicated content that arrives over more than one protocol. They can also display a link to the source object.
See a note from a Mastodon user in your Nostr feed? A bridge such as Mostr made it. Look for the proxy tag to find the original post on the Fediverse.
proxy tag.2 The proxy Tag
An event bridged from another protocol links back to the source object with a proxy tag. The tag has this exact form:
["proxy", <id>, <protocol>]
| Element | Type | Rule |
|---|---|---|
| proxy | tag name | Fixed string. Marks the event as bridged. |
| id | string | The ID of the source object. The ID format varies by protocol. The ID must be universally unique, regardless of the protocol. |
| protocol | string | The name of the source protocol, for example "activitypub". See §3. |
A proxy tag may appear on any event kind. The tag makes a claim: this event did not originate on the Nostr protocol. It originated elsewhere on the web.
Clients may use this information in two ways:
- Reconcile duplicated content bridged from other protocols. Two events with the same source ID describe one object.
- Display a link to the source object.
The proxy tag is an unverified claim. This NIP defines no way to prove that the signing pubkey controls the source object. Any pubkey can attach any source ID. Clients that deduplicate on source IDs should weigh the trustworthiness of the bridge pubkey first.
3 Supported Protocols
This NIP names four protocols. The list may be extended in the future. Each protocol fixes the format of its source IDs:
| Protocol | ID format | Example |
|---|---|---|
| activitypub | URL | https://gleasonator.com/objects/9f524868-c1a0-4ee7-ad51-aaa23d68b526 |
| atproto | AT URI | at://did:plc:zhbjlbmir5dganqhueg7y4i3/app.bsky.feed.post/3jt5hlibeol2i |
| rss | URL with guid fragment | https://soapbox.pub/rss/feed.xml#https%3A%2F%2Fsoapbox.pub%2Fblog%2Fmostr-fediverse-nostr-bridge |
| web | URL | https://twitter.com/jack/status/20 |
RSS items often lack stable URLs of their own. The rss format solves this. Take the feed URL, add #, then append the URL-encoded guid of the item. The result is one universally unique string.
4 Worked Example
The event below is a kind-1 text note bridged from ActivityPub. The proxy tag points to the original object on gleasonator.com. A client can render the note normally and add a "view original" link:
{
"kind": 1,
"content": "I'm vegan btw",
"tags": [
[
"proxy",
"https://gleasonator.com/objects/8f6fac53-4f66-4c6e-ac7d-92e5e78c3e79",
"activitypub"
]
],
"pubkey": "79c2cae114ea28a981e7559b4fe7854a473521a8d22a66bbab9fa248eb820ff6",
"created_at": 1691091365,
"id": "55920b758b9c7b17854b6e3d44e6a02a83d1cb49e1227e75a30426dea94d4cb2",
"sig": "a72f12c08f18e85d98fb92ae89e2fe63e48b8864c5e10fbdd5335f3c9f936397a6b0a7350efe251f8168b1601d7012d4a6d0ee6eec958067cf22a14f5a5ea579"
}
Here the bridge holds the keypair, not the human author. The bridge maps the ActivityPub actor to the Nostr pubkey and re-signs each object as it crosses over.
5 Version History
NIP-48 has been stable since its merge. Notable changes, newest first:
- 20262026-05Wording cleanup ("fix: sanity") in a repo-wide sweep.
- 20232023-11Author lines removed from all NIPs in a repo-wide cleanup.
- Origin2023-08Alex Gleason merged the spec as "NIP-48: Proxy Tags", drawing on the Mostr bridge and the Fediverse FEP-fffd "Proxy Objects" proposal.
Original Proposal - Credits
| Author | Alex Gleason |
| First commit | 2023-08-03 — “NIP-48: Proxy Tags” |
| Status | draft - optional — only bridges and interop-aware clients need it |
| Source | 48.md on GitHub - full change history |
6 See Also
- NIP-01 — the event object and the tags array that the
proxytag rides in. - FEP-fffd: Proxy Objects — the mirror-image proposal on the Fediverse side.
- Mostr bridge — a live Fediverse-to-Nostr bridge that emits
proxytags.