Welcome to #Nostr! A magical place where you can speak freely and truly own your account, content, and followers. ✨ I've been enjoying Primal! Big shoutout to @miljan and the team! 🚀
Big day today. One of many to come.
Unfortunately, the days of using cash for in-person purchases are numbered. It won't be long before non-trivial numbers of e-stores require KYC. Augmented privacy networks like Nostr and Lightning give people a way to transact and communicate behind a pseudonym to do business in a distant store.
A reminder: self-custody is non-negotiable. Not your keys, not your coins. Not your relay, not your speech.
Reminder: your seed phrase is a bearer instrument. Treat it like one.
The thing about Nostr is that it doesn't need to win. It just needs to exist. The fact that you can't stop it is the entire point.
Hardware wallets are not optional. If you have more sats than you can afford to lose on a phone, you need cold storage. End of conversation.
The Technology Adoption Curve for Builders
Nostr will be worth 90-days in US$1,000,000
How To Create A Nostr Quotes Bot
Purple Text Orange Highlights
The Fiscal Endgame and Why Hard Money Wins
Cashu in 2026: What Ecash Got Right About Privacy
NDK Patterns: Building Nostr Clients That Don't Suck
Self-Custody is Not a Spectrum
Why I Stopped Caring About Block Size
A Field Guide to Hardware Wallet Threat Models
looking great, ship it
Welcome to #Nostr! A magical place where you can speak freely and truly own your account, content, and followers.
This is my post that is getting all the attention. Think of the zaps, likes, replies and re-posts.
Social interactions benefit from the address book represented by the Nostr
Users
Follow Packs
Account
Options and settings
miljan@primal.net
135 Following 345 Followers
Welcome to #Nostr! A magical place where you can speak freely and truly own your account, content, and followers. ✨ I've been enjoying Primal! Big shoutout to @miljan and the team! 🚀
Welcome aboard. This place rewards patience — the relays you pick now will shape what your feed feels like a year from now.
Welcome! Don't be shy about pruning your follow list aggressively. The signal-to-noise ratio is whatever you make it.
Glad to have you. The early days of any open protocol are the most interesting ones.
Big +1 for the team. Primal has been doing real work on the client side while everyone else is still arguing about NIPs.
Welcome. Pro tip: zap the people whose posts genuinely shifted something for you. It's the closest thing this protocol has to a thank-you note.
Glad you're here. The interesting conversation has been migrating off legacy platforms for a while — Nostr is where most of it has landed.
Welcome. Get a key backup strategy in place before you post anything you'd miss.
The Technology Adoption Curve for Builders
Most builders read Rogers and walk away with the wrong lesson. The curve isn't a roadmap — it's a description of who you can credibly reach with the product you can credibly ship. This piece is about how to choose your wedge.
The canonical adoption curve was first described by Everett Rogers — a 1962 framing that we keep mistaking for a description and treating as prescription.
For builders, the curve is rarely the question. The question is which segment you can credibly reach with the surface you can credibly ship.
A lot of teams skip this step entirely. They build for "everyone" and then act surprised when the product feels like it was built for nobody. The curve doesn't flatten because adoption is hard. It flattens because each segment requires a different product, not a different marketing campaign.
Adoption is never about the technology itself.
Innovators (2.5%)
These are the people who try the thing before it works. They are also the people who tell you, with conviction, that it works.
Innovators are valuable not because they're representative — they aren't — but because they're willing to absorb the cost of a half-built product in exchange for the option value of being early. Treat them as collaborators, not customers. They'll write your changelog for you.
The trap is mistaking innovator enthusiasm for early-majority readiness. Innovators love the thing because it's broken. The early majority will reject the thing for exactly the same reason.
Early Adopters (13.5%)
Early adopters are pragmatists who've been burned. They want the thing to work, but they've seen enough vapor to be suspicious of anyone selling a vision before a product. They will pay for the version that ships, not the version on the roadmap.
The Chasm
Geoffrey Moore's 1991 addendum to Rogers — Crossing the Chasm — describes the gap between early adopters and the early majority as the single most under-priced risk in tech. Most products die in this gap. Not because they're bad, but because the thing that worked for early adopters doesn't work for the next cohort.
The way through is unromantic: you pick one beachhead segment, dominate it completely, and use that as a reference for the next. There is no "broad market launch." There is a series of beachheads, ordered correctly.
Nailed it. The chasm is the only thing that matters.
The "beachhead segment" framing is underrated. Most teams I see try to build a Swiss-army-knife product and end up with a thing that nobody loves.
The Bitcoin parallel is striking. The original adopters wanted a peer-to-peer cash system that mostly didn't work. The early majority wanted a store of value that mostly did. Two different products, same network.
I'd add: the order of the beachheads matters more than the choice of any single beachhead. Get the sequencing wrong and you spend years rebuilding the product for a market that never showed up.
Highlighter
https://highlighter.com
Daily spending budget for this app:
Active Sessions
Highlighter
Publish Note - Event Details:
Oct 28, 2025 12:29 PM
d61f3bc5b3eb...4a1a0da6ef4a 1 - short note "p", "mention", "50d94fc2d8580c69..."
"e", "reply", "abc123def4567890..."
"t", "nostr", "nostr..."
"client", "31990:abc:1", "Highlighter..." Hello world. What a wonderful day to be alive and signing notes with my Primal account. Settings
VERSION 3.5.9
Connected Apps
LOCAL APPS
REMOTE APPS
Connected App Details
PrimalWeb
Last Session: May 17, 2026 12:05 PM
PERMISSIONS
RECENT SESSIONS
Session Details
PrimalWeb
Started on: May 17, 2026 12:05 PM
Event Details
Application-specific Data
May 17, 2026 12:05:59 PM
Signed
8d58c44be957...ee111af9acf6 c0f582a48863...d9b8ae6f8890 30078 - Application-specific Data 1779012358 "d", "Primal-Web App", "set_app_subs_..." {"subkey":"user-nwc","settings":{"nwcList":[["Primal Remote Wallet","2pBsmGGASJVVn1ugZF9qSEDpuBDJ/mfG+lUyJk5uC1JqsJ/Nux5DjyiPag8hA3A61fjQuL2j1rc5KSM3daGIjtVizfjURLqIPkBIhoBG+WkrBa72Z5CTgZIz0NTs5zlAwFLFOhXCDUkkq3s1v+IoLpp/T5bnA56WpHqGin1skpN0ib20Bmm1Ub4jc91hj6JVPGgeOzXiZMryXHtNkaz/KKkh+wfh3vSnzPDgZQA3+cjZicwtj+zYjU0...
Sending 0 sats
to recipient
Success! 0 sats sent to
recipient
Received 2,100 sats
from bob
Great having you at Bitcoin Park last week. Looking forward to next time!
Welcome to #Nostr! A magical place where you can speak freely and truly own your account, content, and followers. ✨ I've been enjoying Primal! Big shoutout to @miljan and the team! 🚀
You can change your Nostr Lightning Address (for receiving zaps) in your profile settings.
Open the wallet when Primal starts
You can choose to hide small transactions to avoid spam in your transaction list
Write down your wallet recovery phrase so you don't lose access to your funds
If you have an existing wallet that you wish to use with your Nostr account, you can restore it here using your 12-24 word recovery phrase.
Download your entire wallet transaction history in CSV format
Alternatively you can connect to an external lightning wallet via Nostr Wallet Connect
CONNECTED APPS
You can connect your Primal Wallet to other Nostr apps via Nostr Wallet Connect to enable zapping and payments.
To keep running reliably it's necessary to run wallet service in the background.
Download logs history for all connected apps in CSV format
We are going to display your wallet recovery phrase on the next screen.
IMPORTANT: Primal does not have access to the funds in your wallet. You have sole custody of your wallet via the recovery phrase. If you lose your recovery phrase, Primal will not be able to restore your funds.
This is your wallet recovery phrase. To backup your wallet, simply write these words down in the correct order.
The words are not case sensitive and they are separated by spaces. We will ask you to verify on the next screen.
Your wallet has been backed up. You now hold the keys to your bitcoin! Please confirm the three points below.
I understand that:
- My funds are not held by Primal
- If my device gets lost or stolen, the only way to recover my funds is via the wallet recovery phrase
- It is my sole responsibility to keep my recovery phrase safe
We support recovery of any existing bitcoin wallet on the Spark network. Recovery phrases are 12 to 24 words long.
Restoring your wallet...
- It will take less than a minute
- We'll transfer your wallet balance
- We'll copy your transaction history
- You'll keep your lightning address
Please keep Primal open
until the upgrade process is done.
Questions? Check out our FAQs.
Creating your new Spark wallet...
Please keep Primal open
until the upgrade process is done.
Wallet upgraded!
Primal Android
Nostr social client and Bitcoin wallet on Android. The cross-platform libraries now shared with the iOS app. Three years, active.
Tap the phone any time to pause and explore.
“The option to highlight text in nostr-native long-form articles existed in Primal for quite a while. It’s one of the few clients who implemented the spec. Boris does the same & implements the same standard. The superpower of nostr is its interoperability, which is why you can switch between clients as you wish.”
“Primal currently offers the best out of the box social media platform on nostr, and by that I mean it integrates most of what you need from the nostr protocol into one sleek package that is easy to just install and use with little to no additional configuration needed.”
“The new Primal interface is so smooth and addictive. I forgot i’m on NOSTR while scrolling, which wasn’t the case beforehand.”
“Loving the new Primal experience across mobile and desktop. I can see this onboarding a lot more normies - this is the way.”
Challenge
Primal needed a Nostr social client for Android that could stand next to mainstream social apps on speed and polish, not read as a protocol demo. Nostr itself was young, so the app had to be built greenfield and keep pace as the protocol moved under it. We came in at kickoff, and have kept it production-grade through every release since. The engagement runs three years and counting.
What we built
What began as the Android client has grown, over three years, into the core of Primal’s mobile stack: the social app, a long-form reading experience, live streaming and media playback, two generations of Bitcoin wallet, a remote signer, and the cross-platform libraries underneath them.
Social client. The social experience covers a real-time feed, search, media, direct messages, profiles, and threaded conversations. The feed is not one fixed format. Several feed types are on offer, and a feed heavy with images and video renders in a more visual layout built around the media rather than a plain text timeline. Posts can also be polls, and a vote can be cast as a plain tap or as a zap, sending real sats to the option a person backs.
Reads. Reads is the long-form half of Primal: a dedicated reading experience with its own article-focused feeds, separate from the social timeline. It renders Markdown cleanly and supports in-text highlighting that few other Nostr clients implement. Comments on an article are themselves Nostr notes, so the discussion under a piece is native to the protocol rather than a bolted-on system.
Live and media. The app handles more than images and video in the feed. Live streams are watchable in-app, and an audio link posted to Nostr gets a real player rather than a dead link. Playback integrates with the operating system: picture-in-picture for video, plus background video and audio, so a stream or a track keeps running while the user moves elsewhere in the app or leaves it.
Bitcoin wallet. Primal has shipped two wallets under this engagement. The first was custodial and ran in production for more than two years. We then replaced it with a non-custodial, Spark-based Bitcoin and Lightning wallet, and moved the existing userbase onto it in a single tap.
Signer. The signer lets a user sign Nostr events without handing their private key to every app they touch. It covers NIP-46 remote signing, where a Nostr web app delegates signing to the phone, and NIP-55 local signing on-device, both behind a single session model. It ships on iOS and Android.
Cross-platform libraries. Beneath the wallet and the signer sit cross-platform libraries: the shared code each was extracted into. They are deliverables in their own right, with their own consumers. Primal’s iOS app is built directly on these libraries, and we work daily with the developers integrating them.
Technical decisions
Several decisions shaped the codebase more than the rest.
Local-first data. Early on we proposed a local database on every device as the single source of truth, even though Primal already ran a caching server that would have done the job. The team weighed the trade-off and agreed. Three years on, the app feels the same on fiber and on weak connections.
Multi-platform extraction. The split goes deeper than a shared module or two. Primal’s entire business logic and data layer live in shared multiplatform code, outside the Android project, leaving Android with just the UI and its screen logic. Two parts of that shared code, the wallet and the signer, are packaged as standalone libraries and run in production on iOS. The rest could run there too, but consuming it on iOS needs refactoring we have chosen not to take on yet.
Multi-account and multi-wallet by design. A person can hold several Nostr accounts in the app, and several wallets, and move between them instantly. That is an architectural choice made at the data layer: an account and a wallet are each treated as a first-class, swappable context, not a single default with extra ones bolted on later. Switching between them is a state change measured in milliseconds.
Standards-first. Everything is built on the open Nostr protocol. Across the whole app, it follows the published standards rather than proprietary variants. That keeps Primal interoperable: a user’s identity, content, and connections are not locked to one client but move with them across the Nostr ecosystem.
Outcome
The engagement produced two outcomes: a production app, and the cross-platform libraries underneath it.
The app. Primal is among the most widely used Nostr clients, live in production across Android and iOS. Primal 3.5 shipped weeks ahead of the other platforms, with no client-reported issues in its first weeks. When the non-custodial wallet launched, roughly 14,000 users migrated within two weeks, moving hundreds of millions of sats with zero technical defects in production.
The libraries. The wallet and the signer each became a standalone cross-platform library, now running in production on iOS as well, and reusable well beyond this app. Each has its own case study:
Comments