What is Satrium, in one line?
A pocket for bitcoin that lives in your browser and comes with you into any WebXR world, so you can approve a payment inside a headset, in AR on your phone, or on a plain screen, without leaving.
Where the money is, what a mint is, and what a world can never see. Open a tile to read it.
What you add, what you receive, how you get paid, and where the origin line runs.
Nothing matches that. Try mint, PIN, allowance or headset, or write to hello@satrium.org.
What is Satrium, in one line?
A pocket for bitcoin that lives in your browser and comes with you into any WebXR world, so you can approve a payment inside a headset, in AR on your phone, or on a plain screen, without leaving.
Is it an app? Do I install anything?
No install from a store. It is a link. On a phone or laptop you can add it to your home screen and it opens like an app, with its own icon; in a headset browser, bookmark it or add it wherever that browser allows. Whatever you press, it is still wallet.satrium.org, the same pocket.
The icon is a shortcut to wallet.satrium.org. If an icon opens any other address, it is not us.
What does my pocket's link look like?
When it opens, your pocket will always be exactly wallet.satrium.org. No user ID, no account. What makes it yours is stored in your browser, locked by your PIN.
A pocket address with anything extra in it, or on another domain, is not ours.
Do I have to set anything up before entering a world?
No. Money only comes up when you decide to spend.
Can I get a pocket today?
Not yet for everyone. The pocket is in a private pilot with invited testers and opens in rounds. Ask for a place: hello@satrium.org.
How do I get the SDK?
It is in a private pilot. Send your world's link, your engine and what you'd charge for: hello@satrium.org. The SDK page has the short form.
Where is my money, actually?
Coins are on Lightning via Spark; nuts are at a mint (Minibits).Coins are on Lightning via Spark; nuts are at a mint (Minibits).
You sign every payment. Spark co-signs and can't move your coins on its own. You trust its operators to delete old keys after each transfer.
Satrium holds none of your money and none of your data; there is no account and no server of ours in the path of a payment.
Where is my money, actually?
Coins are on Lightning via Breez SDK on Spark: the user signs, Spark co-signs. Nuts are at a mint (Minibits).Coins are on Lightning via Breez SDK on Spark: the user signs, Spark co-signs. Nuts are at a mint (Minibits).
You sign every payment. Spark co-signs and can't move your coins on its own. You trust its operators to delete old keys after each transfer.
Satrium holds none of your money and none of your data; there is no account and no server of ours in the path of a payment.
Do I need to sign up?
No. There is nothing to create and nothing to remember but your PIN and your recovery phrase. The pocket opens from your PIN on this device and from your recovery phrase anywhere else. Worlds you visit never learn who you are — they see an allowance, not a person.
Do I need to sign up?
No. There is nothing to create and nothing to remember but your PIN and your recovery phrase. The pocket opens from your PIN on this device and from your recovery phrase anywhere else. Worlds you visit never learn who you are — they see an allowance, not a person.
What is a nut? What is a mint?
Think of an arcade. You pay the counter in sats and it hands you ecash. The mint keeps the bitcoin; you spend the nuts, and each spend settles when the rail answers.
The counter is called a mint. The ecash is called nuts. They are counted in sats and they spend as bitcoin. If the mint closed, the nuts would be worthless, so nuts are pocket money, not savings.
A nut is Cashu ecash: a bearer claim on the mint that issued it, backed by that mint's bitcoin.
coral dashed · a mint's
Who holds what?
Coins: you sign, Lightning via Spark. Nuts: a mint (Minibits).Coins: you sign, Lightning via Spark. Nuts: a mint (Minibits). Never Satrium.
You sign every payment. Spark co-signs and can't move your coins on its own. You trust its operators to delete old keys after each transfer.
Every balance says what kind of money it is. Rows stay separate, and a small total sits underneath.
teal solid · yours · coral dashed · a mint's · periwinkle dotted · someone else's
teal over coral dashed · your keys sign, a claim on the issuer
Who holds what?
Coins: the user signs, Spark co-signs; Lightning via Breez SDK on Spark. Nuts: a mint (Minibits).Coins: the user signs, Spark co-signs; Lightning via Breez SDK on Spark. Nuts: a mint (Minibits). Never Satrium.
You sign every payment. Spark co-signs and can't move your coins on its own. You trust its operators to delete old keys after each transfer.
Every balance says what kind of money it is. Rows stay separate, and a small total sits underneath.
teal solid · yours · coral dashed · a mint's · periwinkle dotted · someone else's
teal over coral dashed · your keys sign, a claim on the issuer
Why only Bitcoin?
Because the pocket's promises — your keys, your allowance, honest custody labels — only hold on rails we can test the same way. Stable value arrives through Bitcoin, on Liquid and RGB, never through another chain.
Stable rails: USDt on Liquid first, USDt on RGB second. Same seed, same pocket, allowances per kind of money. Spikes come before any build, and a world's call does not change beyond an amount in that kind, once a stable rail is live. Do not design for it until it ships.
Stable value is a claim on its issuer. Tether can freeze it. Your keys sign every transfer; Liquid's federation, or Bitcoin for RGB, carries them.
How do I put sats in, and take them out?
In: tap Receive, then pay the invoice from any Lightning wallet, or paste ecash from another ecash wallet.Tap Receive and pick the kind: coins (a Lightning invoice, paid from any Lightning wallet) or nuts (an invoice the mint turns into ecash, or ecash pasted in).
Out: tap Send, and either pay a Lightning invoice or take ecash out to another ecash wallet. It is your money; it leaves when you say so.Pocket money goes back to your main wallet whenever you like. Press Send and either paste a Lightning invoice or export ecash. Coins leave over Lightning; your keys sign.
Fees?
Each rail's fee shows in the pocket's history, per payment. No fee from Satrium.
Is there a Satrium coin?
No. Sats only. Never.
Why only Bitcoin?
Because the pocket's promises — your keys, your allowance, honest custody labels — only hold on rails we can test the same way. Stable value arrives through Bitcoin, on Liquid and RGB, never through another chain.
Today the pocket holds nuts and coins. Stable value is decided and being explored; it will sit as its own row, never summed with your sats.
What is an allowance?
How much a given world may spend from your pocket. You set it on the pocket's own page the first time you want to pay there. Today it lasts for the session; keeping it between visits is built and being verified.
Do I approve every payment?
Yes. You gave the world an allowance of 500 sats; it asks for 21; you press APPROVE; 479 are left. Nothing moves unless you press it.
How do I get paid?
A world can pay you inside the session: an offer appears, you accept, it lands in your pocket. Prizes, tips, refunds.
Why does the payment panel have no logo?
Everything inside a session is drawn by the world, so nothing in there should earn your trust, and we give you no logo to learn to trust.
What protects you: the panel never asks for your PIN or recovery words, and the most any world can spend is your allowance.
If you ever see a Satrium logo on a payment panel, it is fake. If anything inside a headset asks for your PIN or recovery words, it is not us.
Can a world see my balance or my PIN?
No.
It learns what it asked for, and whether you said yes. Not your balance, not your PIN, not your keys, not your recovery words, not your history.
What if a world says "paid" and I never approved?
Then it is lying and got nothing. A world can draw anything it likes inside its own scene; it cannot make a payment happen.
What if I lose my headset or clear my browser?
Recovery words restore the pocket. No words, no pocket. Write them down when you make it, not later.
Your recovery phrase restores your coins on another device today; nuts stay where they were received. One pocket across all your devices is designed, not built.
Do I need a headset?
No. You can already open XR websites on:
On a plain screen you still do not leave the game to pay: no redirect, no app switch, no checkout tab.
Does it only work in VR and AR?
No. Built for WebXR worlds; works on any web page. Same pocket, same allowance, same rules. A world can ask you to pay on its flat page — the shop, the lobby, the ticket page — the way it does inside the headset.
Which devices is it tested on?
Verified on Meta Quest's browser. It is built on web standards, so it is meant to run wherever WebXR runs.
Will the pocket hold things that aren't money?
We are exploring it. A world could hand you a 3D thing, the way it hands you a prize today, and your pocket would hold it, on Bitcoin, with its own honest label. Several ways to do that exist; none has run a spike yet. It is announced when it works, not before. Satrium would carry such things, never make them.
What is next?
Nuts and coins work today.Nuts and coins work today. Every other rail is announced the day it works, not before.
The pocket
Why a PWA and not an app?
Because a link reaches every device with a browser, there is no store review and no cut, updates ship the moment we push, and the pocket stays at one origin, which is what keeps keys, PIN and balance where they belong.
The icon is a shortcut to wallet.satrium.org. If an icon opens any other address, it is not us.
What is Satrium, for a developer?
A wallet-bridge for WebXR. Your scene asks for a payment, the user approves it in-session, and you get a settled result. No wallet code in your scene, and no Satrium server in the path.
What do I add to my world?
The SDK and a Connect button on your 2D entry screen. Then one call when you want money:
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/*.
Which engines does it work with?
three.js, A-Frame, Babylon.js, PlayCanvas, Wonderland, raw WebGL. The bridge is a frame plus postMessage, so the renderer is irrelevant.
Do I need an XR session to use it?
No. The bridge is the pocket frame plus postMessage with a 2D panel; an XR session is never required. Call it from your world's flat pages today. No separate SDK, no extra flag.
How does the allowance work in code?
You never pass an amount to it. connect() opens the pocket frame; the user sets the allowance in the pocket's own UI, against the origin that asked.
You can see what's left; you can't change it, raise it or spend past it. Today it lasts for the session; keeping it between visits is built and being verified.
Why can't I call requestPay() silently?
Because the user approves, not your code. Every call raises the panel, and the promise resolves only after a person presses a button.
What does my world receive?
A settled result, or a plain no, and how much of its allowance is left. Nothing else.
Grant the round after the result, not before.
How do I get paid?
Each payment lands in your own wallet, as a Lightning payment or cashu ecash.Each payment lands in your own wallet, as a Lightning payment or as ecash.
receive() over the same bridge: you offer, the player accepts in-scene, you get the verdict.
Satrium is not in the middle.
coral dashed · a mint's, until you sweep it
Splits and subscriptions?
Not yet.
Security model, in one paragraph?
The pocket frame (the embedded wallet frame) lives at its own origin. Your scene ships zero wallet code. The PIN never crosses the origin line: amount, origin, verdict and the allowance left do, and nothing else. Success is reachable only from a verified settlement, so a world that draws a fake panel gets nothing. The panel is unbranded because nothing drawn in-scene should earn trust, and every balance is labelled with what kind of money it is.
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.
How is a release checked?
Every release is checked on the shipped bundle, not the source — where its randomness comes from, which rails are bound, and what the message boundary accepts.
Will the pocket frame work on Quest with storage partitioning?
Yes. The pocket frame uses the Storage Access API handle, verified on a real Quest. Other browsers get a one-time popup at the wallet origin.
What about a world spamming requests?
Every request needs a press, and the allowance is a hard ceiling. A world that asks repeatedly annoys the user and spends nothing; the user can decline every time, and can reset that world's allowance in the pocket at any time.
Is it open source?
The SDK will be free and open source, in scoped packages under @satrium/*.
How do I test without money?
The SDK will ship with a fake engine and a test mint. The whole flow runs (panel, approval, verdict, typed errors) with nothing real moving, so you can build the failure paths before the happy one.
Will the pocket hold things that aren't money?
Exploring, not designed: an asset a world hands a player over the same bridge as a prize, held in the pocket with its own custody label, anchored on Bitcoin. Candidate ways include RGB and others; no spike has run and no API exists. Do not design for it. Satrium carries assets; issuing them is not the pocket's job.
What is next?
Nuts and coins work today.Nuts and coins work today. Every other rail is announced the day it works, not before.
The pocket
Still not sure?