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 Wallet
Non-custodial Bitcoin wallet on Android and iOS. Shipped in Primal 3.0, March 2026.
Tap the phone any time to pause and explore.
“the primal team spent a ton of time working on the new wallet and the migration flow. miljan refused to release until it was perfect. full nostr integration, seamless onchain and lightning, no kyc. massive win.”
“the wallet upgrade migration path is super easy. great work and kudos to the primal team.”
“Liking the new Primal app. Wallet migration went seamlessly. Great work Primal team!”
“I just updated it too, honestly feels smooth. You can tell how much work went into this… the no KYC + seamless lightning/onchain combo is a game changer. Big win for primal.”
Challenge
Primal’s social client treats Bitcoin as part of the experience: zaps, balances, and payments live inside the feed. Third-party wallets could not deliver that experience, so a wallet had to be built into the app itself. The first one was custodial. We built the app side; Strike held the funds. It shipped on Android, solved the problem, and ran in production for more than two years. The trade-off was that a custodial wallet also made Primal a custodial, KYC-bound service, which is not what Primal set out to be. The real job followed from that: find a non-custodial path, build the wallet for it, and move the entire userbase across in a single tap, without losing a sat.
What we built
The non-custodial work delivered three things: the wallet itself, the system that moved everyone onto it, and the shared library it ships as.
The non-custodial wallet. The new wallet is non-custodial. Keys live on the user’s device, not on anyone’s servers. It covers Bitcoin on-chain and Lightning in one place, with send, receive, and transaction history, and no KYC at any step. It is built on the Spark network, through the Breez SDK, and it implements Nostr Wallet Connect, so other Nostr apps can request payments against it with the user’s approval.
The one-tap migration. Moving a user off the custodial wallet is a single tap. Behind it sit new backend endpoints, a feature flag, and a dual-wallet state: through the migration window a user can hold both wallets at once. Once migrated, the old custodial wallet is locked rather than deleted, and hidden from view. After the window closed, the custodial wallet was sunset, and the app stays aware enough to show only the wallet that is live.
Cross-platform library. The wallet is not only the Android product. Its logic is shared multiplatform code, packaged as a standalone library that runs in production on Primal’s iOS app as well. It is one of the two libraries the wider Primal engagement extracted from the Android codebase, alongside the remote signer.
Technical decisions
Four decisions shaped the work more than the rest.
The research, and build versus buy. Getting off custodial started as a research problem. The search for a non-custodial design led to the Spark network, and a round of experiments and test code proved it out. That raised the next question: build directly against Spark, or adopt an existing library. We chose the Breez SDK. A wallet is one part of a much larger app, and a feature-rich, maintained SDK was the stable choice over a from-scratch integration we would carry forever. The team aligned on it together.
Built to migrate again. Because Appollo41 ran the research, we could shape the deliverable, not just build to spec. The wallet became a multi-platform library, shared across Android and iOS, and an architecture-agnostic one: it treats the wallet backend as swappable, able to host a custodial wallet, a non-custodial one, or a fully native self-custodial design. Spark is the best option on the market today, not a permanent commitment. When something better aligned with Primal’s values appears, moving to it is a change the library is already built to absorb. The migration just shipped will not be the last, and the next will be easier.
The migration, designed end to end. The migration was designed in full before any of it was built, then taken to the team. Alternatives were proposed and stress-tested together against every failure mode the group could name, and the work converged back on the original. The design runs a state machine on the device and a matching one on the backend, tracking the same stages, so both sides always agree on where a migration stands. An interrupted transfer resumes exactly where it stopped. A networking hiccup is a pause, never a lost sat.
Infrastructure reuse. A non-custodial wallet lives on the user’s device, and Nostr Wallet Connect means other apps have to reach it there. That keep-alive layer already existed, built earlier for the remote signer, which faces the same problem. One piece of infrastructure paid for a second feature. On top of NWC we added an audit log that product had not asked for, a recoverable record if anything ever needs reconstructing after the fact.
Outcome
The migration shipped in Primal 3.0. Launch was the quiet kind, which for a wallet migration is the whole point.
The numbers. Roughly 14,000 users moved onto the new wallet within the first two weeks, carrying hundreds of millions of sats between them. There were zero technical defects in production.
No longer custodial. With the migration complete and the old wallet retired, Primal no longer holds its users’ funds, and no longer needs KYC to run a wallet. That was the point of the engagement. It is the outcome that outlasts the launch-week numbers.
The wallet is one part of a three-year Primal engagement.
Comments