// about mdpush

A tiny tool with
a thousand features one job.

Take a markdown file. Turn it into a shareable link that nobody — not even us — can read without your permission. That's it. That's the whole product.

// the problem

Sharing markdown today is broken.

Every existing tool fails at something. Pick your poison.

×Slack

Strips your formatting. Mangles code blocks. Buries it in scrollback within an hour.

×Gist

Public by default. Stripped down. No expiration, no access control, no analytics.

×Wiki / Notion

Heavy. Requires accounts. Permissions are a project. Overkill for a one-shot share.

×Email

Renders inconsistently. No expiration. Sits in inboxes forever. It's email.

// mdpush

As fast as scp, as nice as a docs site, and we can't read a word of it.

// what you get

One command in. One link out.

you, in your terminal
$ mdpush share spec.md
 
✓ encrypted client-side
✓ uploaded
🔗 https://mdpush.io/d/k7f2x9
🔒 password: arctic-fox
them, in any browser
Auth implementation — round 2
by gabriel · 2m ago · expires in 7d

Here's the revised auth flow after yesterday's review. The big change: we're moving session-token hashing into the database trigger…

const session = await db.sessions.create({...})

// we, the operators, see ciphertext

// zero-knowledge, in plain english

How “we can't read it” actually works.

Four steps, no hand-waving.

01

Encryption happens on your device

Before your markdown leaves your machine, we encrypt it with AES-256-GCM using a fresh key generated just for that document.

02

The key never touches our servers

It rides along in the URL fragment — the part after the #. Browsers are required to keep that client-side. We literally never see it.

03

We only store ciphertext

Title, content, category, project — all encrypted before upload. Our database holds an opaque blob and a few operational fields (expiration, view count, lock type).

04

The reader decrypts in their browser

When they open the link, their browser pulls the ciphertext, lifts the key from the URL fragment, and renders the markdown locally. We never see plaintext — on either end.

If our database ever leaked, attackers would walk away with encrypted blobs and hashes. No documents, no passwords, no keys. See exactly what we store →

// who it's for

Built for three kinds of people.

🧑‍💻

The terminal-native engineer

You live in tmux. You hate context-switching to a browser to share a file. You want one command, one link, and zero ceremony.

🤖

The AI agent

Your agent generates specs, debug reports, and ramblings all day. With mdpush ai-skills it can publish them as easily as it writes them.

👀

The curious reader

You got a link. You shouldn't need an account, an app, or a password manager to read a markdown file. Just open it and go.

// principles

The lines we won't cross.

01

Ciphertext or nothing.

We will never roll out a feature that requires us to read your content. Server-side search, AI summaries, content-based recommendations — none of it.

02

No public links, ever.

Every doc has a lock. Even the lightest one. We won't give bots and scrapers free rein over your shares.

03

Free means free.

50 docs/month, all features, no credit card. Paid tiers will come for teams who want shared workspaces — never to gate the core experience.

04

The CLI stays open source.

The CLI is the part that touches your plaintext. It belongs in the open, where you can audit it, fork it, and verify the encryption is real.

Try it. Drop a file.

No account. No credit card. No catch.

← back to home