You are inside. Your pocket came with you.
In session. The pocket is at its own origin; your scene only asks.
SATRIUM
Pay inside VR and AR without leaving the session.
On the open web: one link, any device, any reality.
Your scene asks, the user approves in-session, you get a settled result.
One link, any device, any reality. No wallet code in your scene.
outsidehost scene ◂ drag across the picture ▸ insidewallet origin
PRIVATE PILOTThe pocket and the SDK open in rounds.
PROOFThe first Bitcoin payment approved inside a WebXR session.
WebXR
WebXR is VR and AR that open from a link, like any web page. Nothing to install, nothing to sign up for: the same link runs on every device-and-reality combo below, and each one shows the world the way that device can.
This is not the peak. It is the start, and a solid one: the browsers are here, the standards are here, the crowd is not. Every medium rewards the people who show up early, and this one is open to anyone with a link.
WebXR is the W3C API for immersive sessions in the browser. One codebase, one URL, and the session adapts to the device in front of it. No store review. You ship when you push.
It is early, and early is the good part: no gatekeeper between you and the visitor, no 30 % cut, and an audience that arrives with a browser in every headset and a phone in every pocket. The ones who build now set the habits.
WebXR already opens on all of these. The pocket is verified on Meta Quest's browser and built for the rest.
The same link, the same code; the session adapts to the device in front of it.
A phone or tablet can do AR, gyro, or both.
The world moves only on done.
Your scene acts on settled, never earlier.
BEFORE
Every one of those worlds could open its door. None could take a payment without sending you out: taking the headset off, trusting the world with your money, or downloading an app. So most worlds stay free, and the people who build them stay unpaid.
Taking money in WebXR meant a bad trade: pull players out of the headset to pay, hold their money on your own server, or give up the link and ship an app.
NOW
Fill your pocket at wallet.satrium.org (private pilot for now) — coins (Lightning) or nuts (ecash). Nuts and coins work today. Walk into any world that speaks Satrium and pay right there, inside the session. The people who build those worlds get paid the same way.Fill your pocket at wallet.satrium.org (private pilot for now) — coins (Lightning) or nuts (ecash). Both work today. Walk into any world that speaks Satrium and pay right there, inside the session. Worlds can pay you back the same way.
Your world asks, the pocket answers, and each payment lands in your own wallet, as a Lightning payment or as ecash. Nobody leaves the session.Your world asks, the pocket answers, and each payment lands in your own wallet, as a Lightning payment or as ecash. Now it goes both ways: hand out a prize with receive() and the player accepts it in-scene. Nobody leaves the session.
Satrium is a pocket for bitcoin at wallet.satrium.org. The link is the same for everyone; what makes it yours is stored in your own browser, locked with your PIN.
Add it to your home screen and it opens like an app, with its own icon. It is still the same link, the same pocket.
The icon is a shortcut to wallet.satrium.org. If an icon opens any other address, it is not us.
Today it holds coins and nuts.
The most it can spend is the allowance you gave it.
The pocket is a web app at its own origin. Your scene embeds it as a hidden frame and talks to it over one small message protocol.
It is a progressive web app: installable from the browser, updated on every push, no store between you and the user. Installing changes nothing about the origin, so the pocket and its storage rules are the same.
The icon is a shortcut to wallet.satrium.org. If an icon opens any other address, it is not us.
The host bundle carries no wallet code, so there is nothing in your scene to leak.
Keys, PIN, recovery words, balance and history exist only at wallet.satrium.org, behind the browser's origin boundary.
The PIN is typed only on the pocket's own page, never in immersive mode.
The amount, the origin, the verdict, and how much of the allowance is left. Nothing else.
A settled state is reachable only from a verified result: a state machine, not a flag.
As with every web wallet, users trust the code served from wallet.satrium.org; that is why it will be open source and the address never changes.
await pocket.connect()
const r = await pocket.requestPay({ paymentRequest: invoice, amountSats: 21 })
if (r.settled) game.grantRound()
// the shape of the SDK — a preview, not yet published
It will be free and open source, in scoped packages under @satrium/*.
A world sees the amount it asked for, your answer, and how much of its allowance is left. Nothing else.
move the circle across the pocket
The scanner shows what crosses: amount, origin, verdict, allowance left. Beside it, the shape of what your code gets back.
r = { settled: true, ref: '…' }
if (r.settled) game.grantRound();
this is everything your code ever receives
move the circle across the pocket
WHAT THE WORLD SEES
21 sats
479 left
verified
{ sats: 21,
origin: "a-world.example",
verdict: "verified",
left: 479 }
NEVER CROSSESPIN · keys · balance · recovery words · history
example pocket
Lightning via Spark. Your keys sign.
Ecash from a mint. The mint holds the sats.
Built for pocket money: spend it in worlds.
Breez SDK on Spark. The user signs; Spark co-signs and can't move coins alone. Trust assumption: its operators delete old keys after each transfer.
Cashu via a mint (Minibits). The pocket holds a claim, not coins.
Built for pocket money: spend it in worlds.
Every balance says what kind of money it is.
// every rail is announced when it ships — never before
Custody
Money is meant to move both ways.Money moves both ways.
Your whole WebXR experience in one pocket.
Pay for the good stuff on the open extended reality web, no app store, no expensive device required, and as worlds grow, win rounds, earn prizes, collect things: back into the same pocket.Pay for the good stuff on the open extended reality web, no app store, no expensive device required. Win a round and the world pays you back: an offer appears where you are, you accept it, it lands in your pocket.
earning: nextEARNING: LIVEA whole economy in one pocket.
Charge for entries, rounds, doors and tools with requestPay(). Hand out prizes, tips and refunds with receive(). Same bridge, same settled result.Charge for entries, rounds, doors and tools with requestPay(). Hand out prizes, tips and refunds with receive(): the player accepts in-scene, you get the verdict. Same bridge, same settled result.
receive(): nextRECEIVE(): LIVELike two sides of one coin: those who live the experience, and those who build it.
One character, one game, one payment, step by step. Work each step yourself.
Connect, allowance, pay, the verdict, and what crosses the origin line.
Where the money is, what a mint is, what a world can never see.
What you add, what you receive, how you get paid, and the security model.
Any world can speak Satrium. Four are on their way.
Any world can speak Satrium. Four are on their way.
cashu-tslive