Lock 1 · The Ootle (the part we can't read)
- Carries a file's key to one Tari address, sealed inside a stealth payment.
- Moves money as stealth TARI, checked against chain state.
- Keeps the receipts: public hashes of what we stored, and when it left.
It's locked before it leaves this tab. It's locked before it leaves your phone.
Free. No sign-up. We can't open it.
Built on the Tari™ Ootle testnet. Or send it to a Tari address: the key rides sealed inside a stealth payment
INT. OUR SERVER — NIGHT
A scene: a wall of locked files on our server. We can't see inside any of them. One by one they leave on their cues: opened once, viewed three times, midnight, and the rest. One is left, waiting. We never see inside. On its cue, it leaves.
We never see inside.
On its cue, it leaves.
(We delete the ciphertext within a minute of its exit, or when a download in progress ends. Every exit goes on the public record.)
INT. BACKSTAGE — CONTINUOUS
Programmable secrets: you write the rule and our server keeps the time. The Ootle carries keys we can't read and payments whose amounts only the payer and the payee see, and it keeps the receipts.
(every exit)
The rule runs on our server. That's the part you trust, so it writes its exits where you can check them.
The rule runs on our server. That's the part you trust, so we print everything it holds.
Built on Tari Ootle, the programmable privacy chain.
EXT. THE OOTLE — NIGHT
No email, no account. Paste someone's Tari address. The file's key travels to them sealed inside a stealth TARI payment, and only their locker's keys open it.
They need a Tari address. No wallet? A free locker makes one in seconds, no email.
Our hourly test delivery, exactly as the chain shows it.
Our relay posts the payment for you, so we learn the address you send to, never the key.
Once your browser's wallet holds its testnet grant (a minute or two after your locker opens), your browser builds and pays for the payment itself and we pass it to the network: we see that your locker sent a transaction, not who it was for. Before that, our relay posts it and learns the address, never the key.
The chain shows an output with a hidden amount, a hidden owner and an encrypted memo. The fee is public. Payments our relay sends all come from one wallet with the same fee, so someone watching could group them as “sent by mutis”, but not see to whom.
Sends from your browser spend a grant from our sponsor wallet, then each send's change. Anyone reading the Ootle can link your sends to each other and to our sponsor wallet, but not see to whom or how much.
Make a drop link in your locker and put it anywhere: a bio, a newsroom page, a security.txt. Anyone can leave a file there, with no account and no wallet.
A drop link is public by design, so its Tari address is too. We see which drop a file was left in and the sender's IP while they're connected, never the file.
INT. OUR DATABASE — CONTINUOUS
(Below: the sentence “Only you. Once.”, encrypted in your browser a moment ago, next to what our server would hold.)
| You | Our server | |
|---|---|---|
| Name | (a note: no name) | not known to us |
| Size | 15 bytes | 1,040 bytesRounded up so the exact size stays hidden: at least 1 KB, and at most 12% over for anything bigger. |
| Contents | Only you. Once. | Ciphertext: the encrypted bytes, drawn as pixels. |
| Key | in your link, after the # | never sent to us |
| Opens | you'll see “Opened” and the time | a count, and the time of the first open |
| You | whoever you are | an IP address while connected; not written to disk |
INT. OUR DISK — RIGHT NOW
(Our hourly test file is between takes. Check back in a few minutes.)
Every hour we lock a test file. Here it is, exactly as our disk holds it.
Here's a file we locked . It's on our disk right now.
Download the stored bytescurl -OJ https://srv2052606.hstgr.cloud/api/v1/canary/rawIts key left on the Ootle, sealed to our own test locker: tx .
It shows what our disk holds. It can't prove we can't read your files: we locked this one ourselves, and we publish its key a day later.
Once a test file is a day old, we publish its key. Your browser fetches the stored bytes and opens them here, the same way a link does.
Key:
| Every exit goes on the public record. | See an exit receipt |
|---|---|
| Every stored file has a public fingerprint. | SealLog on Esmeralda |
| Payments are checked on the chain, not a wallet's word.We credit a payment only after a Tari-run indexer confirms it exists on the chain. In September a wallet bug showed deposits that never happened. | Read the check |
| The code you run is the code we published, if you check. | How to verify this deployment |
| No analytics, no trackers, no third-party scripts or fonts. | Check it in your devtools |
EXT. EVERYWHERE ELSE — DAY
Encryption hides contents. It doesn't hide everything. Here's what still shows.
INT. ONE REAL DISK — DAY
mutis runs on one real disk, . Free space is a fair share of it, recalculated every hour.
Today: per locker · of free
We overbook like an airline: most people use a fraction of their share. If the disk ever truly fills, new uploads pause for everyone, and nothing already stored is lost.
Need more room? Rent it in tTARI, by the month.
No locker? Files up to , gone within .
EXT. YOUR OWN SERVER — ANY TIME
MIT licensed. In your browser: our own modules, its WebCrypto, and one vendored library, Tari's official ootle-wasm, pinned by hash. On the server: Python's standard library, Debian's Caddy and Node, and Tari's walletd for the chain. No npm install, anywhere.
Code Self-host: file sharing alone, or with a walletd for the Tari features Verify this deployment
$ git clone https://github.com/c7b/mutis $ cd mutis $ python3 tools/verify-deploy.py https://srv2052606.hstgr.cloud 9e7bc34c44a9f33243cd1149a3c4f4f219fe7007
“our wallets aren't a window into our souls”
Tari Genesis block, May 6, 2025 (TIP-0002)
Drop a file. Mutis.