Drop a file. Choose a file.

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

Two locks. Only one of them is us.

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.

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.

(every exit)

Lock 2 · Our server (trust it, then check it)

  • Holds noise: ciphertext, never keys.
  • Keeps the clock: counts opens, watches expiry, deletes on cue.
  • Writes every exit to Lock 1, where anyone can check it.

The rule runs on our server. That's the part you trust, so it writes its exits where you can check them.

Built on Tari Ootle, the programmable privacy chain.

EXT. THE OOTLE — NIGHT

Send a file to a Tari address.

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.

  1. Your browser locks the file. We receive noise.
  2. Your browser seals the file's key to their address and sends a stealth payment that carries it.
  3. Their mutis inbox finds the payment, opens the seal, then the file.

They need a Tari address. No wallet? A free locker makes one in seconds, no email.

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.

Or let anyone leave you one.

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.

  1. Their browser locks the file before it leaves.
  2. Our relay delivers its key to your locker inside a stealth payment on the Ootle.
  3. Your inbox finds it. Only your locker's keys open it.

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

What we store.

(Below: the sentence “Only you. Once.”, encrypted in your browser a moment ago, next to what our server would hold.)

YouOur server
Name(a note: no name)not known to us
Size15 bytes1,040 bytesRounded up so the exact size stays hidden: at least 1 KB, and at most 12% over for anything bigger.
ContentsOnly you. Once.Ciphertext: the encrypted bytes, drawn as pixels.
Keyin your link, after the #never sent to us
Opensyou'll see “Opened” and the timea count, and the time of the first open
Youwhoever you arean IP address while connected; not written to disk

INT. OUR DISK — RIGHT NOW

Try to read it.

Every hour we lock a test file. Here it is, exactly as our disk holds it.

Download the stored bytes
curl -OJ https://srv2052606.hstgr.cloud/api/v1/canary/raw

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.

How to check what we claim

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. 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

What we can't hide.

Encryption hides contents. It doesn't hide everything. Here's what still shows.

  • To us: a padded size, the hour a file arrives and leaves, how often it's opened, your IP while you're connected, and that your locker sent a Tari payment, not to whom.
  • To anyone watching the Ootle: that a payment happened and its fee. Sends from your browser trace back to our sponsor wallet's grant, and to each other through their change; dead-drop deliveries come from our relay's wallet; roughly how many records (stored files plus exits) we write, in steps of 64.
  • To whoever has the full link: everything. The link is the key.
  • To your own browser: the full link, in your history and any history sync, and to any extension allowed to read your tabs. Copied links can sit in clipboard history.
  • To the person you send it to: everything, forever. They can save a copy. No software can stop that.

INT. ONE REAL DISK — DAY

Free, with a real limit.

mutis runs on one real disk. Free space is a fair share of it, recalculated every hour.

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.

EXT. YOUR OWN SERVER — ANY TIME

Open source. Take it home.

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.

$ 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)

Neither are your files.

Drop a file

Drop a file. Mutis.