Ledge.sh is a notebook for developers and DevOps that turns Markdown files into live command-line sessions. Write a note, hit ⌘↩ on a code block, and the output streams in below it. The shell runs in a persistent container attached to the note, so a cd command, an exported variable, or a virtualenv activated in one run carries into the next.
The company posts weekly growth updates using API calls and SQL queries pulled directly from the note. Last week’s update showed 38 upgrades: newsletter 17, docs 12, referrals 9.
Signups by Plan
One query counts signups by plan:
| Plan | Count |
|---|---|
| Free | 1204 |
| Pro | 187 |
Another query counts upgrades by source:
sql
select source, count(*) as upgrades from accounts where upgraded_at >= now() - interval '7 days' group by source order by upgrades desc;
Billing Commands
The company also posts the raw commands used to check billing, including a curl call to Stripe’s API and a pytest run on a refund test file:
bash
curl -fsSL https://ledge.sh/server.sh | sh
python
import json
subs = json.load(open("subs.json"))["data"]
mrr = sum(s["plan"]["amount"] for s in subs) / 100
print(f"{len(subs)} subscriptions, +${mrr:,.0f} MRR")
Syncing Without a Database
Ledge notes are plain files in ordinary folders. They sync with iCloud Drive, Dropbox, git, Syncthing, or whatever you already use. There is no database on the side.
Locking encrypts a note’s body on disk behind a passphrase. Agents never see it, sync services carry ciphertext, and reading it requires an unlock.
What Runs in the Shells
The shells support Python, Node, Ruby, and PHP out of the box. A redis block feeds redis-cli, pointed at staging or prod by the note’s REDIS_URL. TypeScript uses the Bun runtime bundled with the app, so ts blocks run with nothing installed.
Backup and Restore
Ledge puts an encrypted copy of the notes in an S3-compatible bucket every hour. A backup restore drill uses the AWS keys from the deploy profile:
bash
aws s3 ls s3://ledge-api-backups/nightly/ | tail -2
What We Make of It
The company’s habit of posting raw commands alongside the note is unusually useful. Anyone reading Ledge’s growth updates learns exactly how the numbers were calculated, not just what they are.
The tool itself solves a real problem: keeping notes that contain running code readable, shareable, and synced across machines without losing context. The shell attached to each note means a cd command today carries into tomorrow’s run, and a note that starts on a laptop can later run on a server accessed over ssh.
Ledge ships an MCP server that connects Claude Code and lets any MCP agent read, search, create, and edit your notes through it. That opens a path for automating note creation and editing beyond what a single user can type.
The combination of plain files, persistent shells, and sync without a database means Ledge works across platforms without forcing a single workflow. The iPhone and iPad app reads, edits, and runs what is on the server, and the desktop app is just a window onto that same server.
Source material: “Show HN: Ledge.sh – Runnable Markdown Notes,” ledge.sh.
Get the Notebook.
The day's best stories and every fresh verdict, in plain English, in your inbox by seven. One email a day, no more.

