Community

Apps

Lantern

Lantern is fiatjaf's Nostr annotation extension, forked from Hypothesis to publish highlights, bookmarks, page notes and PDF annotations as portable Nostr events.

Lantern icon
Apps The product layer Clients, signers, publishing tools, wallets and protocol utilities.
Back to Nostr
Apps

Apps shelf

Apps pages collect clients, signers, tools, developer libraries and product research without turning the app into the whole network.

Apps All Apps pages App routeProduct profiles, categories, tools and source links Browse appsClose shelf

App orientation

App categories

App profiles

0xchatadvanced-nostr-searchAegisAlbyAlby GoAlby HubAlby HubAlby SDKAmberAmberAmethystAmethystApp and product researchApplication-specific dataBlossomBlossom spec NIP-B7BookstrBorisBouquetCalendar by FormstrChachiNostr Apps DirectoryCoracleCoracleCorny ChatCreatrDamusDamusDeveloper stack researchDittoDittodiVineDocstrDTANEmojitoFlotillaFlycatFormstrFountainFreeFromFundstrfutrGIF BuddyGittrgo-nostrGossipGossipGrimoireGroups NIP-29HablaHablaHello Nostr — ResourcesHighlighterHiveTalkhomebrew-nostrHORNET StorageHugo2NostrHyperNoteIrisIrisJumblekanbanstrKeys BandListrLNBits NostrmarketLumeLumilumiLUMINAMapstrMarmot Protocolmatrix-nostr-bridgeMeetstrMemestrMindsmonstrmostardMostronaknak — Nostr Army KnifeNalgorithmNarrnashboardNDKNegentropyngitNofluxNosNos Socialnos2xnosbinnosclNostorg Feature MatrixNostr App ManagerNostr Apps Directory GuideNostr clients feature listNostr Compass — ProjectsNostr Developer GuideNostr Development KitNostr Events MonitorNostr MCP ServerNostr NestsNostr PlaygroundNostr Service ProvidersNostr Writernostr-post-checkernostr-protocol/nostrnostr-rubynostr-sdknostr-sdk-ffinostr-sdk-flutternostr-to-rssnostr-toolsNostr.bandnostr.buildnostr.co.uk ClientsNostr.how — Clientsnostr.hsNostrabilityNostrAppsNostrApps category — AudioNostrApps category — CareerNostrApps category — CommunityNostrApps category — CurationNostrApps category — Direct MessageNostrApps category — DiscoveryNostrApps category — File SharingNostrApps category — Group ChatNostrApps category — MeatspaceNostrApps category — OnboardingNostrApps category — SignersNostrApps category — Toolsnostrchecknostrdbnostrdb-rsNostreeNostreonNostriaNostridNostrium / read.nostr.comNostrmoNostrubenoStrudelnoStrudelNostterNosturNosturNotedeckNpub.proNpub.worldnsec.appnsiteNsiteNstart.meObsidian Nostr WriterOlasOpenvibeOracoloOstrich WorkOwn Your PostsP2P BandPazPeridotPhoenixPlebeian MarketPostizPostr / write.nostr.comPrimalPrimalPrimal Article Editor / Reads authoringPrimal Studiopynostrpython-nostrRecommended Application HandlersRelay Toolsrsslayrust-nostrrust-nostr docsSatelliteSatellite EarthSatlantisSatShootShakespeareShopstrSlidestrSnortSnortStemstrswift-nostr-clientTreasuresWavlakeWavlakeWikifreediaWikistrYakiHonneYakiHonneYakiHonne mobile/web app directoryYondar

App pages

Deep dives

Field guides

Awesome Nostr branches

Research and library

Source inventory

Deep Research: Clients, apps and product surfacesDeep Research: Developer stack and toolingResearch Map: nostrapps.comResearch Source: 0xchatResearch Source: 0xchat — NostrApps pageResearch Source: advanced-nostr-searchResearch Source: Aegis — NostrApps pageResearch Source: AlbyResearch Source: Alby — NostrApps pageResearch Source: Alby GoResearch Source: Alby HubResearch Source: Alby Hub GitHubResearch Source: Alby SDKResearch Source: AmberResearch Source: Amber — NostrApps pageResearch Source: AmethystResearch Source: Amethyst GitHubResearch Source: Awesome Nostr ResourcesResearch Source: BookstrResearch Source: BorisResearch Source: Boris — NostrApps pageResearch Source: BouquetResearch Source: Bouquet — NostrApps pageResearch Source: Calendar by FormstrResearch Source: ChachiResearch Source: Chachi — NostrApps pageResearch Source: CoracleResearch Source: Coracle — NostrApps pageResearch Source: Corny ChatResearch Source: DamusResearch Source: Damus — NostrApps pageResearch Source: DittoResearch Source: Ditto — NostrApps pageResearch Source: DocstrResearch Source: DTANResearch Source: DTAN — NostrApps pageResearch Source: EmojitoResearch Source: Emojito — NostrApps pageResearch Source: Flotilla — NostrApps pageResearch Source: FlycatResearch Source: FormstrResearch Source: Formstr — NostrApps pageResearch Source: FountainResearch Source: FreeFromResearch Source: FreeFrom — NostrApps pageResearch Source: FundstrResearch Source: futrResearch Source: futr — NostrApps pageResearch Source: GIF BuddyResearch Source: GIF Buddy — NostrApps pageResearch Source: GittrResearch Source: go-nostr GitHubResearch Source: GossipResearch Source: Gossip — NostrApps pageResearch Source: GrimoireResearch Source: Grimoire — NostrApps pageResearch Source: HablaResearch Source: Habla — NostrApps pageResearch Source: Hello Nostr — ResourcesResearch Source: HighlighterResearch Source: HiveTalkResearch Source: HORNET Storage — NostrCompassResearch Source: IrisResearch Source: Iris — NostrApps pageResearch Source: JumbleResearch Source: Jumble — NostrApps pageResearch Source: Keys BandResearch Source: Keys Band — NostrApps pageResearch Source: ListrResearch Source: LNBits NostrmarketResearch Source: LumeResearch Source: LumilumiResearch Source: LUMINAResearch Source: MapstrResearch Source: Marmot ProtocolResearch Source: MeetstrResearch Source: MemestrResearch Source: MindsResearch Source: monstr GitHubResearch Source: mostardResearch Source: MostroResearch Source: my.nostr.comResearch Source: nak — Nostr Army KnifeResearch Source: nak GitHubResearch Source: NalgorithmResearch Source: Narr — NostrApps pageResearch Source: nashboardResearch Source: NDK GitHubResearch Source: NDK NPMResearch Source: NegentropyResearch Source: Noflux — NostrApps pageResearch Source: Nos SocialResearch Source: Nos Social — NostrApps pageResearch Source: nos2xResearch Source: nos2x — NostrApps pageResearch Source: nosbinResearch Source: noscl GitHubResearch Source: Nostorg Feature MatrixResearch Source: Nostr App ManagerResearch Source: Nostr Book — KindsResearch Source: Nostr DesignResearch Source: Nostr Developer GuideResearch Source: Nostr NestsResearch Source: Nostr Nests — NostrApps pageResearch Source: Nostr PlaygroundResearch Source: nostr-post-checkerResearch Source: nostr-protocol/nostr GitHubResearch Source: nostr-sdk crates.ioResearch Source: nostr-sdk-ffi GitHubResearch Source: nostr-tools GitHubResearch Source: nostr-tools NPMResearch Source: Nostr.BandResearch Source: nostr.buildResearch Source: nostr.co.uk ClientsResearch Source: Nostr.howResearch Source: Nostr.how — ClientsResearch Source: Nostr.how — ProtocolResearch Source: Nostr.how — What is Nostr?Research Source: Nostr.orgResearch Source: NostrabilityResearch Source: NostrAppsResearch Source: NostrApps category — AudioResearch Source: NostrApps category — CareerResearch Source: NostrApps category — CommunityResearch Source: NostrApps category — CurationResearch Source: NostrApps category — Direct MessageResearch Source: NostrApps category — DiscoveryResearch Source: NostrApps category — File SharingResearch Source: NostrApps category — Group ChatResearch Source: NostrApps category — MeatspaceResearch Source: NostrApps category — OnboardingResearch Source: NostrApps category — SignersResearch Source: NostrApps category — ToolsResearch Source: nostrcheckResearch Source: nostrdb GitHubResearch Source: NostreeResearch Source: Nostree — NostrApps pageResearch Source: NostriaResearch Source: Nostria — NostrApps pageResearch Source: NostridResearch Source: Nostrmo — NostrApps pageResearch Source: Nostrmo GitHubResearch Source: NostrubeResearch Source: noStrudelResearch Source: noStrudel — NostrApps pageResearch Source: NostterResearch Source: NosturResearch Source: Nostur — NostrApps pageResearch Source: NotedeckResearch Source: Npub.proResearch Source: Npub.worldResearch Source: nsec.appResearch Source: NsiteResearch Source: Nstart.meResearch Source: Nstart.me — NostrApps pageResearch Source: Obsidian Nostr Writer — NostrApps pageResearch Source: OlasResearch Source: Olas — NostrApps pageResearch Source: OpenvibeResearch Source: OracoloResearch Source: Oracolo — NostrApps pageResearch Source: Ostrich WorkResearch Source: P2P BandResearch Source: PazResearch Source: PeridotResearch Source: Peridot — NostrApps pageResearch Source: PhoenixResearch Source: Phoenix — NostrApps pageResearch Source: Plebeian MarketResearch Source: Plebeian Market — NostrApps pageResearch Source: PrimalResearch Source: Primal — NostrApps pageResearch Source: Primal Article Editor / Reads authoringResearch Source: Primal StudioResearch Source: pynostr GitHubResearch Source: python-nostr GitHubResearch Source: Registry of KindsResearch Source: Relay Tools — NostrApps pageResearch Source: rsslayResearch Source: rust-nostr docsResearch Source: rust-nostr GitHubResearch Source: SatelliteResearch Source: SatShootResearch Source: ShakespeareResearch Source: Shakespeare — NostrApps pageResearch Source: ShopstrResearch Source: Shopstr — NostrApps pageResearch Source: SlidestrResearch Source: SnortResearch Source: start.nostr.netResearch Source: StemstrResearch Source: TreasuresResearch Source: WavlakeResearch Source: WikifreediaResearch Source: Wikifreedia — NostrApps pageResearch Source: WikistrResearch Source: Wikistr — NostrApps pageResearch Source: YakiHonne mobile/web app directoryResearch Source: YondarResearch Source: Yondar — NostrApps page
Apps18 min readannotation extension

Lantern

Lantern is fiatjaf's Nostr annotation extension, forked from Hypothesis to publish highlights, bookmarks, page notes and PDF annotations as portable Nostr events.

The quick readLantern turns the margin of a web page into a Nostr surface. You highlight, annotate or bookmark a page or PDF, and the result becomes signed Nostr data instead of a note trapped inside one annotation service.

A margin for the open web

Lantern is for the reader who wants to write in the margins without handing the margins to a platform. That sounds old-fashioned in the best way. You read an essay, a spec, a PDF, a forum post, a research paper. Something matters. You highlight it. You leave a note. Maybe someone else replies. The question is: where does that margin live after the page is closed?

In most annotation tools, the answer is a company database. Lantern tries a different answer. It is a browser extension that publishes page notes, annotations, bookmarks and highlights to Nostr. NostrApps describes it as a tool for collaboratively annotating, highlighting and bookmarking web pages and PDF documents on Nostr. The Chrome Web Store says the same thing, then adds the important technical trail: Lantern is a fork of Hypothesis, URLs are normalized, highlights follow NIP-84, replies and annotations follow NIP-22, relay-list publishing uses NIP-65, custom annotation groups use NIP-51 relay sets, and login can happen with either a pasted nsec or a NIP-46 bunker.

The project is associated with fiatjaf. The Chrome Web Store listing is offered by fiatjaf, and fiatjaf's own tools page lists Lantern as a web annotator and highlighter forked from hypothes.is, with links to installation and source code. As of the store listing checked for this work, Lantern was published as a Chrome extension, version 0.3.3, updated October 22, 2025, with source code pointed to `git.fiatjaf.com/lantern`. That source link now opens through GitWorkshop, a decentralized Git interface over Nostr, which is thematically perfect and a little inconvenient for old-school repository inspection.

Why Hypothesis matters here

The Hypothesis lineage is not a footnote. Hypothesis is one of the best-known social annotation systems on the web. Its pitch is simple: highlight and comment directly over web content, turn annotations into discussion and let readers collaborate over the text itself. It is especially common in education, where teachers want students to respond to a reading in the reading, not in a separate discussion board that feels detached from the sentence under debate.

Lantern borrows that interface idea and moves the storage question into Nostr. That matters because annotation is intimate. A highlight is not just a bookmark. It is a small record of attention. A margin note is not just a comment. It is a private or public trace of how you met an idea. If those traces are locked into one service, the reader's intellectual map is locked there too. If they become Nostr events, other clients can theoretically discover them, render them, reply to them, index them or move them into a different reading workflow.

There is also a cultural difference. Hypothesis is an annotation platform. Lantern wants to make annotation part of the open Nostr graph. That means your highlights can sit closer to your public identity, your relay choices and your broader network of notes. It also means the tool inherits all the usual Nostr mess: relays can differ, clients may not render every event kind, and discoverability depends on standards being implemented by more than one app. Lantern is valuable precisely because it pushes that problem into a concrete use case.

The event shape under the highlight

The most important Lantern feature is not that you can highlight text. Many tools can do that. The important part is what the highlight becomes. NIP-84 defines a highlight event, `kind:9802`, for content a user finds valuable. The content of the event is the highlighted text when text exists. It can tag the source with a URL, and the NIP explicitly encourages clients to clean obvious tracking junk from URLs. It can also carry context around the highlighted portion and attribution tags for original authors.

That maps neatly onto Lantern's promise. A highlight of an article can become a Nostr object with the selected quote, the source URL and enough surrounding context to be useful elsewhere. A quote highlight can behave more like a quote repost, avoiding the ugly pattern where a highlight and a separate note appear as two unrelated posts. This is the kind of detail that separates a real Nostr annotation tool from a browser extension that merely posts a link to your timeline.

NIP-22 is the other half of the margin. It is used for comments, replies and annotations. Lantern's store text says it follows NIP-22 for replies, annotations and page notes. That means the note you leave on the page is not just free-floating prose; it has a standard event shape that can point back to the thing being discussed. In a mature ecosystem, that would let a reader see conversations attached to a URL even when the conversation did not happen on the original website.

This is where Lantern becomes genuinely exciting. The ordinary web treats the page and the conversation as separate. The article lives here, the replies live in a comment system, the quote lives on a social network, the bookmark lives in a browser account, the classroom discussion lives in an LMS. Lantern tries to attach the reader's reaction to the object being read while still using open Nostr events. It is small, but the idea is large.

Login, relays and URL discipline

Lantern supports two login paths in the public description: pasted nsec or NIP-46 bunker. That choice deserves care. Pasting an nsec into any browser extension is a serious act. NIP-46 is more interesting because it lets a client talk to a remote signer or bunker instead of holding the key directly. For a tool that lives on arbitrary web pages and PDFs, a signer-aware path is the one experienced Nostr users will notice first.

The relay story is also deliberate. Lantern uses NIP-65 relay lists for publishing in the common case. NIP-65 is the relay-list metadata mechanism that lets an account state where it reads and writes. For custom groups of annotations, Lantern uses NIP-51 relay sets. That means the extension is not only publishing into a vague cloud of relays. It is trying to use the user's normal relay information when appropriate and separate relay groups when the annotation context calls for it.

URL normalization may sound like housekeeping, but for annotation it is survival. The same article can appear with tracking parameters, fragments, referral codes, uppercase/lowercase differences or alternate forms. If every reader annotates a slightly different URL, the shared margin fragments. The Chrome Web Store and NostrApps both call out URL normalization because it is one of the unglamorous requirements that makes collaborative annotation possible. A highlight has to know what page it belongs to.

The Chrome Web Store listing also states that the developer disclosed no data collection or use. That is useful, but it is not a substitute for judgment. Browser extensions can see powerful context depending on permissions and implementation. Lantern's job requires it to interact with web pages and PDFs. The right question is not only, "Does it collect data?" The right question is, "Do I understand what I am asking this extension to watch, sign and publish?"

Who should install it

Lantern is for people who read actively. If your Nostr life is mostly short posts and replies, you may not need it. If you spend time in specs, essays, documentation, PDFs, academic papers, legal texts, manuals, source pages or long posts, Lantern is exactly the kind of weird useful tool that makes Nostr feel bigger than a timeline.

It is especially interesting for research groups, teachers, open-source maintainers, protocol people and newsletter readers. Imagine a NIP discussion where highlights of the spec become public Nostr events. Imagine a reading group where everyone annotates the same essay without joining a private SaaS workspace. Imagine a project maintainer leaving notes on documentation that can be surfaced by a Nostr-aware client later. Lantern is not the whole answer, but it makes the shape visible.

The caution is interoperability. Lantern can publish according to the standards it names, but other clients have to care. A beautiful highlight event is more useful when clients render it well, relays keep it reachable and search/indexing tools know how to find it. That does not make Lantern weak. It makes it early. Annotation on Nostr is exactly the sort of feature that needs one stubborn implementation before the rest of the ecosystem notices what it is missing.

The best way to judge Lantern is to perform one real reading action. Install it, log in with a low-risk key or a NIP-46 signer, highlight a sentence on a page you care about, publish it, then see where the event can be found. Does the URL look clean? Does the highlight carry the right text? Can another Nostr tool understand it? If yes, you have not merely saved a quote. You have put a small lamp in the margin of the open web.

Sources worth opening

This article keeps claims close to the public project trail. Start with these pages when you want to verify the product yourself.

Back to the Crays Nostr page
Apps route visual cue 1
Apps route visual cue 2
Apps route visual cue 3
Apps route visual cue 4
Apps route visual cue 5

How to use this page

Find the product surface first.

Search clients, signers, product categories or developer tools when you need a specific app, source file or comparison clue.

AppsKeep exploring AppsApp routeProduct profiles, categories, signer guides and source links.Browse apps
Apps route visual cue 1
Apps route visual cue 2
Apps route visual cue 3
Apps route visual cue 4
Apps route visual cue 5

Bring something back

Ask, suggest, submit or nominate.

Use these links when something is missing, a source is stale, or a public Nostr builder belongs in the map.