Community

Apps

futr

futr is a native desktop Nostr client by Sascha-Oliver Prolic, built in Haskell and Qt5 with NIP-17 messaging, NIP-65 relay logic and local LMDB storage.

futr 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 readnative desktop Nostr client

futr

futr is a native desktop Nostr client by Sascha-Oliver Prolic, built in Haskell and Qt5 with NIP-17 messaging, NIP-65 relay logic and local LMDB storage.

The quick readfutr is the rare Nostr client that feels like a desktop engineering project first and a social app second. The current public trail shows Linux Flatpak and Windows builds, GPLv3 code, a Haskell/Qt5 stack, NIP-17 private messages, NIP-59 gift wraps, NIP-65 relay lists and a local LMDB store.

Software, not a tab

Most Nostr clients ask you to open a website. futr asks a slightly older, more stubborn question: what if the client is actual desktop software again? Not a web view dressed in a native window. Not a thin wrapper around the same browser assumptions. A local application, written in Haskell, drawn with Qt5/QML, shipped through Flatpak and Windows installers, with its own database and its own relay behavior.

That changes the mood of the app. When you open a web client, you usually judge it by speed, layout and whether the timeline feels alive. With futr, you also start asking where the program stores events, how it connects to relays, how it handles private messages and whether the machine in front of you is doing real work. That is the interesting promise here. futr is not trying to be the most polished first Nostr experience in the room. It is trying to be a serious native client for people who still care what runs on their own computer.

The official site introduces Futr as a gateway to a global, decentralized and censorship-resistant network. NostrApps compresses the listing into four hard clues: native OpenGL application, no browser, private encrypted chats using NIP-17, outbox model and Linux plus Windows. Those clues matter because they separate futr from the smooth web-client crowd. If you are the kind of reader who hears "native" and immediately thinks about local storage, UI bindings, release artifacts and crash behavior, this app is worth a closer look.

There is also a small naming joke in the README: the name was chosen "out of respect for the honorable Canadians." That sentence tells you something. futr is not a corporate platform with a grand manifesto. It is a builder's project with a public repo, a release pipeline and enough personality to resist becoming another anonymous purple square.

The person and the repo

The project trail points to Sascha-Oliver Prolic, the GitHub user prolic. The `futr.cabal` file names Sascha-Oliver Prolic as author and maintainer, the repository copyright line names Sascha-Oliver Prolic, and the official website footer carries the same name. His GitHub profile also publishes a Nostr npub, which is a useful detail for this ecosystem: the maintainer is not only writing code about Nostr from the outside, he is reachable in the identity space the app is built for.

The repository itself is futrnostr/futr. It is public, GPL-3.0, and as checked on June 6, 2026 it is not archived. GitHub reports the repo was created on February 1, 2022, pushed most recently on October 27, 2025, and organized around the topics Haskell, Qt5, Qt5-QML and Nostr. The visible contributor list is almost entirely prolic, with Dependabot doing dependency housekeeping. That is a different risk profile from a foundation-backed client with a large team. It can move with taste and coherence; it can also depend heavily on one maintainer's time.

The code shape is unusually readable as a product map. `app/Main.hs` boots the program. `src/Futr.hs` is the broad application layer: search, following, loading feeds, sending messages, reposts, quotes, comments and deletion. `src/Nostr/Event.hs` defines the event kinds the app understands. `src/Nostr/InboxModel.hs` handles relay subscriptions and reconciliation. `src/Store/Lmdb.hs` is the local event store. The QML files under `resources/qml` describe the interface: sidebars, feeds, post details, profile screens, relay management dialogs and image viewing.

That structure tells you futr is not a demo glued to a single relay. It is an attempt to build a client from the protocol inward: keys, events, relays, storage, presentation. Whether you like the UI is a separate question. The important thing is that the architecture has a spine.

What the screen is for

At the user level, futr is a Nostr social client. You log in with keys, read posts, search for profiles by npub, nprofile or NIP-05 identifier, follow and unfollow people, open a profile feed, write short text notes, repost, quote repost, comment and delete your own events. The code also tracks a current post and subscribes to comments around it, so the app is not merely flattening the network into a single stream.

The QML interface suggests a desktop layout rather than a phone-first feed. There is a collapsible sidebar, a personal feed, post details, an image viewer, top bar controls, key management and relay management. That matters because Nostr can become visually exhausting when every client copies the same mobile timeline into a large screen. A desktop client has room to expose state: which account is active, which relays are connected, which profile you are inspecting, whether the sidebar should collapse, whether a post has a separate detail view.

The release history gives a sense of direction. The v0.3.0 release notes, published before the current v0.5.0 release, described Windows 10 support, media support, threaded conversations, nested comment display, repost and quote handling, profile rendering, clickable profile links, improved scrolling, chat improvements, lower memory use and better relay connection handling. You should read old release notes carefully, because they are not the same as a current guarantee. But they are useful as a builder diary: futr grew from a client shell into a program that wants to handle the messy social parts of Nostr, not only sign kind-1 notes.

The media layer is worth noticing too. The repository has a `Downloader` module and application signals for download completion, media peeking and media cache completion. The UI has an image viewer. This does not make futr a media platform in the Wavlake or zap.stream sense. It means the client is trying to make ordinary social posts feel complete on the desktop, where a note with an image or video should not require three external hops before it becomes readable.

The relay brain

Nostr clients are often judged by the pretty part, but the real personality sits in relay behavior. futr's `InboxModel` module says explicitly that it follows the NIP-65 idea of relay list metadata. That is a big deal for a desktop client, because the hard question is not just "can I connect to relays?" It is "which relays should I use for this person, this post, this reply, this private message and this recovery path?"

futr stores general relays and DM relays separately. It reads relay list metadata, preferred DM relay events and follow lists. It distinguishes inbox-capable relays from outbox-capable relays. It builds a map from pubkeys to candidate outbox relays, filters out localhost relays for other people's keys, and scores relays with stored stats such as successes, errors, events seen, bytes received, last EOSE timestamp and latest event timestamp seen. In plain English: the app tries to remember which relays have been useful instead of treating every connection as a blank slate.

That is the kind of work users rarely see until it breaks. If your client cannot find someone's posts, Nostr feels broken. If replies land on relays nobody reads, the conversation feels broken. If private messages listen on the wrong relays, the social layer feels broken. futr's code shows an adult concern for that layer: connect, subscribe, wait for completion, reconcile, remove stale subscriptions, add missing relays, keep gift-wrap subscriptions alive and use timestamps so the app does not reload the whole world every time.

The default relay list includes familiar public relays such as nos.lol, nostr.bitcoiner.social and relay.nostr.bg. The app also has a relay management UI, so the model is not "trust our relay forever." The user is expected to understand that relay choice is part of the client, not a hidden backend decision.

Private messages the hard way

The private-message story is the most important technical part of futr. NostrApps advertises NIP-17 private encrypted chats. The code backs that up with event kinds for DirectMessage kind 14, PreferredDMRelays kind 10050, Seal kind 13 and GiftWrap kind 1059. That is the modern private-message route: a message is not just thrown into an old encrypted DM event and left there forever. It is wrapped, sealed and routed through the Nostr mechanisms meant to hide more metadata and make relay delivery less naive.

In `Nostr.Event`, futr creates a rumor for the direct message, seals it with encryption, and creates gift-wrap events for recipients. In `Nostr.Encryption`, the app derives a NIP-44 v2 conversation key and uses ChaCha20 with HMAC-SHA256 protection. In `Futr.hs`, when you send a private message, the app builds gift wraps for all recipients, publishes them, and notifies the feed. In `InboxModel.hs`, the client subscribes to gift wraps on DM relays and reconciles those subscriptions over time.

That is a lot of machinery for a chat bubble. It should be. Private messaging on Nostr is not magic; it is careful event construction, key agreement, relay selection and local handling. If you are evaluating futr, this is where you should slow down. Send a test message, inspect whether it appears where expected, try another NIP-17-capable client, and pay attention to relay settings. The app's code is doing the right kind of hard work, but privacy is not a slogan you accept from a landing page. It is behavior you verify.

The local store completes the picture. `Store.Lmdb` keeps events, event-relay mappings, profiles, post timelines, chat timelines, follows, general relay lists, DM relays, comments, latest timestamps and relay stats. For a desktop client, that local memory matters. It means the app can build continuity without asking one remote service to remember everything for you.

Installs and promises

The current official site points users to a Windows installer for v0.5.0 and Linux installation through a Flatpak repository. GitHub's latest stable release is `v0.5.0`, published on October 12, 2025, with a Windows setup executable and a Flatpak asset. There is also a continuous development release tagged `continuous`; as checked here, it advertises a v0.5.0.1 Windows installer and Flatpak from October 2025.

The README is more precise than the marketing page. It says Linux can be installed through Flatpak, Windows installers come from GitHub Releases, and macOS, Android and iOS are "Coming soon." The official website uses broader language about Linux, Windows, macOS, Android and iOS, but the repo and releases only make Linux and Windows concrete today. For a reader, that distinction matters. Do not assume there is a polished mobile app just because the site speaks cross-platform. Check the release artifacts first.

For developers, the project has setup documents for Linux and Windows, a Docker-based quick start, automated builds, Flatpak build scripts, Windows resource files and a Cabal project. The Cabal file lists GHC 9.6.7, secp256k1, LMDB, websockets, wuss, haskoin-core, libsecp256k1, hsqml and a long set of Haskell dependencies. This is not the easiest stack in the Nostr ecosystem. That may be part of the point. futr is built like someone wanted a durable desktop program, not the quickest possible Vite app.

The cost of that choice is practical. Smaller native clients can be harder to package, harder to debug across platforms and slower to onboard contributors into. The benefit is equally practical: you get a program that can own its storage, its windows, its relay state and its cryptographic path without delegating everything to the browser. That tradeoff is the soul of futr.

Who should try it

Try futr if you want to understand what Nostr feels like when it leaves the browser. Try it if you use Linux or Windows, like native apps, care about private-message standards, and do not mind being closer to the engineering surface than a mainstream user would be. Try it if relay management, local storage and open-source licensing are features to you, not chores.

Do not treat futr as the obvious first client for a casual friend who just wants to see what Nostr is. For that job, a polished web or mobile client may teach faster. futr is better for the reader who wants to inspect the machine while using it. The app gives you a concrete way to ask good questions: where are my events stored, which relays are read and written, what happens when I reply, how does a gift-wrapped DM travel, and can another client understand what I just did?

That is why futr belongs on the app shelf. It is not the largest Nostr client, and it is not trying to be the social network in disguise. It is a native client with a visible maintainer, GPL code, real release artifacts and enough protocol depth to be worth studying. In an ecosystem full of beautiful web clients, futr is a useful reminder that Nostr also needs strange, local, inspectable software.

Sources worth opening

Start with the project pages, then read the code paths that explain the product's real behavior.

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.