Community

Apps

Boris

Boris turns Nostr bookmarks, long-form posts and ordinary web articles into a quiet reading room: read, highlight, return later, see what others marked and decide whether your attention should send value back.

Boris 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
Apps27 min readreader, bookmarks, highlights, local relays, zap splits, PWA and long-form Nostr

Boris

Boris is Gigi's Nostr-native reader for people who save good things and actually want to come back to them: bookmarks on the left, text in the middle, highlights on the right, and the network underneath instead of a private app silo.

The quick readBoris is a Nostr-native read-it-later app by Gigi. It reads Nostr articles and ordinary web pages, turns bookmarks into a library, publishes public highlights as NIP-84 events, works toward offline reading through local relays and can split zaps between authors and curators.

Reading becomes a Nostr habit

Boris starts from a very ordinary human weakness: you find a good essay, save it, promise yourself you will read it later, and then the link disappears into the same dusty pile as every other saved thing. Most social apps treat that as a small side feature. Boris treats it as the main room.

The name is part joke and part product brief. In Gigi's own write-up, Boris stands for "bookmarks and other stuff read in style." The app is not trying to be a new Twitter client with nicer buttons. It is a reader. The public app gives you a three-pane shape: your bookmarks and lists sit on the left, the article sits in the middle, and highlights sit on the right. That tells you almost everything about its priorities. Boris assumes that reading is an action, not a passive scroll.

That difference matters inside Nostr. A normal feed is good for catching the present tense: notes, replies, jokes, links, arguments, quick sparks. A reader is built for returning. Boris asks what happens after discovery. You saw a NIP-23 article in a client, or someone posted a web essay, or a friend highlighted a paragraph that suddenly looks worth your time. Boris wants to take that loose trail and turn it into a calm session where you can read without the rest of the feed shouting at you.

The official project page is refreshingly direct about the desired feel: clean typography, no ads, no trackers, no paywalls, no subscriptions, and a PWA that works on desktop, mobile or tablet. The point is not decoration. When a reading app is full of noise, the app is fighting its own job. Boris is opinionated because reading needs quiet. If you have ever tried to read a serious essay in the middle of a notification-heavy social client, the value is obvious before any protocol talk begins.

NostrApps gives the compact catalog version: Boris reads Nostr articles or articles from the web, lets you highlight them and lets you browse highlights from yourself or friends. The fuller story is better: Boris is an attempt to make reading, saving, marking and paying attention feel like native Nostr behavior rather than a private database bolted onto a website.

The library starts with bookmarks

The important word in Boris is not only "highlight." It is "bookmark." Gigi's article says Boris focuses on consuming bookmarks, not merely creating them. That sounds small until you look at how much of our reading life is really a queue. We do not lack links. We lack a good place where saved links become readable again.

On Nostr, bookmarks are not just a local browser feature. NIP-51 defines lists that can hold references to many kinds of things, and one of the standard list kinds is bookmarks. Those list items can be public or private. That gives Boris a real substrate for a read-it-later library: a saved Nostr note, a saved long-form article, a saved URL, a saved item that can move with your public key instead of staying trapped inside one service.

For Nostr-native writing, Boris leans into NIP-23 long-form content. NIP-23 defines kind 30023 for articles and blog posts, with Markdown content and metadata such as title, image, summary and published_at. That is the boring-looking part that becomes powerful in practice. If an article is a signed, addressable Nostr event, a reader can fetch it from relays and render it without asking one publishing platform to stay friendly forever.

Boris also reads ordinary web articles. That is important because the web is still where most writing lives. But the distinction should stay clear. A web URL in Boris does not magically become a permanent Nostr article. It is still a web page, with all the usual fragility of sites, redirects, paywalls, bad HTML and dead domains. Boris can make that page more readable and can let you attach Nostr-native activity to your reading, but it does not turn every external page into an indestructible archive.

The practical promise is this: your library can become less dependent on one company's export button. You can keep reading progress, jump back to passages, mark articles as read, and carry at least part of that reading life through Nostr events. A perfect version of that future needs many clients to agree on kinds, tags and relay behavior. Boris is one of the apps that makes the idea concrete enough to test.

Highlights are public memory

Highlights are where Boris becomes more than a nice reading surface. The act of highlighting says: this passage mattered. In a closed reading app, that sentence usually stays inside your own account, maybe synced to a company server, maybe exported later as a markdown file if the product is generous. In Boris, highlights are part of the Nostr trail.

NIP-84 defines a kind 9802 highlight event. The content of the event is the highlighted text. The event can tag its source: an "a" tag for addressable Nostr events, an "e" tag for regular events, or an "r" tag for URLs. It can also tag authors, editors and surrounding context. This gives highlights enough structure to be found, shown, filtered and connected back to what was read.

The privacy sentence is not optional here. Boris says it plainly in its FAQ: highlights and annotations are public by default. Private bookmarks exist in the broader Nostr list model, but you should not treat a Boris highlight as a secret margin note. If you mark a passage from a political essay, a health article, a business memo or a personal post, assume that highlight can become public. That is not a bug. It is the social reading model. But it changes how careful you should be.

Boris makes those public highlights useful by layering them. The GitHub README describes three highlight levels: your own highlights, highlights from friends, and highlights from the wider Nostr world. In the Boris visual language, those layers become yellow, orange and purple. This is not just color coding. It is a reading interface for trust. Your own marks help you remember. Friends' marks help you decide what deserves attention. The wider crowd can reveal a passage that many people independently found worth saving.

That is what Boris calls swarm highlights. The phrase is playful, but the product idea is serious. Discovery usually happens before reading: someone posts a link, the feed reacts, you click or ignore it. Boris lets discovery happen inside the text. You enter the article and see where other readers stopped. The margin becomes a social map, and because those marks are Nostr events, they are not only decorations inside one app.

Offline reading is the quiet trick

The most interesting Boris feature may be the least flashy one: flight mode. Gigi writes that every Nostr app should work in flight mode because the network is not meant to rely on a single central server. If your relay can live near you, even on your own device, then being offline should not feel like total exile. You should still be able to read, draft, react, highlight and later sync what you created.

The official Boris page says the app is offline-first by design. With a local relay, you can read, create highlights and browse your library without a network connection. When the connection comes back, Boris stores local changes and syncs later. The page points phone users toward Citrine and desktop users toward Nostr Relay Tray for that local-relay setup.

This is the kind of feature that only sounds boring until you imagine the habit. You load reading material before a flight, take the train through bad reception, or sit somewhere without wanting your attention pulled back into the live feed. You can still read and mark. The app does not need to ask a central account server whether you are allowed to keep thinking.

There are limits. Offline-first does not mean every article in the world is already on your device. It does not mean every relay will accept every event later. It does not mean sync conflicts vanish. The honest version is better: Boris is pushing Nostr reading toward a local-first pattern where your own machine can carry more of the work. That is a real product idea, not a slogan.

Zap splits turn curation into a money trail

Boris is also quietly about value. Not paywalls. Not subscriptions. Not trapping the text and charging admission. The official page says that when you create highlights, Boris can set up zap splits so value flows to authors and curators. You can change the split or use presets. That is a small feature with a large idea hiding inside it.

A highlight is a signal of attention. A zap is a payment signal. A zap split says the value of a reading moment may belong to more than one person. The author wrote the piece. A curator helped you find it. A reader marked the passage that got you to open it. In the old web, those roles are usually flattened into traffic, likes or affiliate links. Boris tries a more direct route: let value move with the social act that created attention.

NIP-57 explains the zap machinery underneath: zap requests, invoices, zap receipts and tags that can point to people or events. It also allows zaps to address Nostr events, including addressable events such as NIP-23 long-form posts. Boris builds a reader-side experience on top of that: while you read and highlight, the app can prepare who should receive what if sats move.

This matters because long-form writing is hard to fund without either ads, subscriptions or a platform middleman. Boris does not solve the economics of writing by itself. No single reading app does. But it gives the reader a cleaner gesture. If a passage helps you, you can mark it, share it through a Nostr event and send value toward the people in the path. That makes curation feel less like unpaid labor and more like part of the publishing circuit.

The calm surface has machinery underneath

The official feature file shows how much product sits below the friendly reader view. Boris is described as a three-pane app: bookmarks on the left, the reader in the center, highlights on the right. Those sidebars can collapse, which matters on mobile and during serious reading. The reader can show estimated reading time, hero images, summaries and dates. It can also use browser-native text-to-speech with speed controls, so a saved article can become something you listen to while doing something else.

The app also reaches beyond text. The feature list mentions supported video embeds, including YouTube, with title, description, transcript and duration handling when available. That is not a side gimmick. A modern reading queue is full of long videos, talks, essays, transcripts and mixed media. Boris is trying to treat "read later" as "return to this piece of attention later," whether the object is a Nostr article, a web URL, a video or a thread of highlights.

Settings are more serious than they look. Boris uses NIP-78 application-specific data for preferences, including themes, font family, font size, highlight style, per-level highlight colors, default view modes, startup behavior, auto-collapse settings, zap split presets and relay choices. That is the right place for personal reader configuration: attached to your Nostr identity, not buried in a single browser install forever.

The technical stack explains the feel. The package file lists Vite, React, TypeScript, nostr-tools, the Applesauce packages for accounts, events, relay work and React integration, React Router, React Markdown, Prism, Workbox and vite-plugin-pwa. In plain language: Boris is a browser app that wants to feel local and installable while still speaking Nostr. The PWA layer, service worker, local image cache, relay partitioning and Applesauce event store are not decorative details. They are how the calm reader surface stays usable when the network is uneven.

Supporters even have their own product surface. Boris can display users who zapped the project, including thresholds and special styling for larger supporters. That is easy to dismiss as cute. It is more useful to read it as part of the same value loop: the reader, the author, the curator and the app builder all leave traces in the same open network.

The builder left the workshop door open

Boris is not a faceless product with a polished corporate origin story. The public trail points to Gigi, known on his own site as dergigi, a writer and builder in the Bitcoin and Nostr world. His projects page lists Boris beside ants, njump.to and other small tools. The GitHub repository is under dergigi/boris, MIT licensed, public, and mostly TypeScript with CSS. The official Boris page says it is free and open-source and developed by one guy.

On June 6, 2026, the repository showed 10 stars, 1 fork, 4 open issues, 2,543 commits and a latest release, v0.12.1, published on May 24, 2026. The package file also reports version 0.12.1. The release notes are practical: cache decrypted content for hidden bookmarks, clear encrypted cache on logout, remove a defunct Upstash-backed OpenGraph preview cache, fix Article OpenGraph crashes, and harden title and description parsing. That tells you where the app is spending time: privacy-sensitive cache behavior, web article previews, metadata parsing and the dull reliability work of a real reader.

The most useful source is Gigi's own "Building Boris" article, because it is unusually honest. He says Boris began as a demo-day question, became a 21-day obsession, and was not originally called Boris. He also says the name came from a false answer about the inventor of the highlight marker. That origin is funny, but it also fits the app: Boris is experimental, personal and self-aware about its rough edges.

Gigi does not present Boris as finished enterprise software. In the article he says version 1.0 was still ahead of him, and that the app remained in a 0.10-ish state at the time of writing. The current 0.12.1 release shows progress without pretending the 1.0 line has been crossed. That honesty is valuable for readers. You do not test Boris like you would test a bank app. You test it like a promising open tool whose creator is showing you both the idea and the sawdust on the floor.

The app also stands on other Nostr work. The official page names Applesauce, Citrine, Highlighter, Kind 9802, Lantern, NIP-23, Prism and Purple Text as shoulders Boris stands on. That is a good sign. In Nostr, the interesting products are often made from small pieces: a signer here, a relay pattern there, a kind number, a NIP, a library, a previous experiment. Boris is not trying to hide that chain. It makes the chain part of the story.

How to test Boris without fooling yourself

Start with a low-risk identity or a signer you trust. Boris is a web app, so the sane move is to use a NIP-07 style signer or another signing setup that keeps your private key out of the page. Then feed it material that represents your real use: one Nostr long-form post, one ordinary web article, and one bookmark list you actually care about.

Read slowly enough to catch the product. Does the article render well? Do images, headings and links survive the reader view? Can you collapse sidebars when you want focus? Do highlights jump to the right place later? Does your reading progress feel reliable after a reload? The app is about long sessions, so five seconds of clicking tells you very little.

Then test the Nostr part. Create a small highlight that you are comfortable making public. Look for the event in another place. Check whether the source is tagged in a way that makes sense. If the highlight was on a Nostr article, see whether another client or tool can understand the connection. If it was on a web URL, remember that the highlight may outlive the page, but the original page might not.

Test the social layer only after that. Friends' highlights are useful only if they come from people whose reading you value. The wider Nostr highlight layer can be beautiful, noisy or empty depending on the article and relays involved. That is the nature of the system. Boris can show the layer; it cannot force the whole network to have read the same essay.

If you care about the offline promise, set up a local relay and try a real offline session. Load content, disconnect, create a highlight, reconnect and watch what syncs. If you care about payments, inspect zap splits before sending sats. Boris is strongest when you treat it as a reader with public memory and value flow, not as a vague "Nostr app" you admire from a distance.

Sources worth opening

Boris has enough public material that you do not have to guess. These are the places worth opening before you trust the app with your reading habits.

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.