Show HN: Ledge.sh – Runnable Markdown Notes
73 points by dancablam 23 hours ago | 39 comments
Hi HN,

Ledge is a Markdown notebook that runs shell commands, code, SQL, etc from inside your own notes.

I built Ledge because I spend much of my day copy/pasting commands from my notes into the terminal. I was inspired by how much cmux helped me organize my terminals - but there was still a split brain between my notes and frequently run commands. I've been daily-driving it for the past few weeks and use it for deploys, API calls, smoke tests, etc.

Ledge runs your real shell just like a terminal app and can be hosted locally or remotely over SSH using ledge-server. I've been building it since July and have recently added support for all the major platforms: Mac (Silicon), Windows (WSL required), Linux, iOS, Android. Mobile devices require SSH access to a ledge-server and Android is still in beta and looking for beta testers (see link on website)!

It's built on Bun and Electrobun and is free and open-source. Feel free to review the code and contribute at https://github.com/ledgesh/ledge

Feedback is very much welcome. Any must-have features that are missing?


TheGoodBarn 5 hours ago
This is awesome I will definitely play around with it. Fits the niche gap as a standalone app vs something like [Observable Framework](https://observablehq.github.io/framework/) for data analytical type things.

I wish Notion could just integrate these things together and make it work, or someone build an Obsidian plugin. More often than not it would be so convenient to do something like this.

reply
dancablam 5 hours ago
Awesome! Let me know how it goes.
reply
olexsmir 3 hours ago
Really love the project, it reminds me of a now dead xiki[1]

[1]: https://www.youtube.com/watch?v=YufgfbUgEgI and xiki.org

reply
drayfield 4 hours ago
I went to look at Atuin Desktop to see what the crossover was with this product, and it's fascinating to see that the repo was archived the day this was posted here!

https://github.com/atuinsh/desktop

reply
dancablam 4 hours ago
Woah. I have no affiliation with Atuin so a coincidence I'm sure but really weird.
reply
RationPhantoms 3 hours ago
Kind of not surprised with the domination of Claude Code/Codex out there.
reply
edude03 4 hours ago
I feel like there has been a few takes on this (atuin desktop comes to mind[0] but apparently it's not a going concern anymore?) why hasn't it caught on?

0: https://github.com/atuinsh/desktop

reply
junehwi 2 hours ago
I'm curious about this too. Org-babel, Jupyter, Atuin Desktop, etc. have explored similar ideas, but none became a mainstream way of working.

For people who used these tools long-term: what held them back? UX/accessibility, or do people simply prefer keeping documents separate from the actual work?

reply
ellieh 2 hours ago
(hi! I worked a lot on atuin desktop)

we saw a bunch of issues with desktop, in no particular order

1. authoring runbooks is difficult, most people barely document their work let alone make it executable

2. keeping runbooks up to date is difficult, they are error-prone across systems

3. agents are now pretty good at a number of the tasks these ideas solve for, and are good at working around issues caused by docs becoming out of date/etc

all these tools are great for your own notes, but are very difficult to scale

reply
dancablam 55 minutes ago
Hey really appreciate that context! My thoughts:

1. Ledge's bet is it shouldn't feel like authoring at all. I've always had markdown docs chock full of commands and docs so making them runnable was the next logical step for me.

2. True. Keeping any kind of documentation up to date is difficult

3. Also true. I'm hoping Ledge's built-in agent support will bridge that gap and allow agents to help keep the docs up-to-date

And yes, a "Team" notebook is a challenge. Technically anyone with SSH access can all share a Ledge notebook. But that probably doesn't get us all the way there.

Thanks again for providing your thoughts. This by no means is a solved problem but I'm interested to see where it goes!

reply
junehwi 2 hours ago
Thanks for answering. That's really interesting. Maybe agents flip this around. Instead of humans maintaining executable docs, the actual work generates the document. It could become something like a PR-style review layer for agent work. You don't necessarily need to understand the underlying code or tooling, but you can inspect what changed, why it changed, and approve or reject it. Do you think that would address any of the scaling problems you saw?
reply
baranguneysel 14 hours ago
Very cool! I launched something similar as well. My idea was to create a working document in which people could develop their own tools and agents. Conversations with coding agents are treated as editable, executable documents. Both the person and the agent can write on the same page. Rather than correcting a mistake in a follow-up, you can rewrite it, delete a detour, or edit and re-run an earlier prompt. The file is always readable Markdown. Check out: https://piary.dev/

Feel free to get in touch if you are open to an exchange, you can find my contact details in the write-up.

reply
dancablam 12 hours ago
Nice! I'll take a look.
reply
theCodeStig 5 hours ago
As an Emacs user for over a decade I think this is brilliant, it solves my biggest gripes with org-babel which prevent me from using it in a team setting. Ledge is a lot like org-babel from Emacs, but for muggles: a familiar UI, and common format go a long way.
reply
imglorp 4 hours ago
I wonder what would org-babel for team settings look like? Disk/interchange format seems less interesting than what gets shipped around and what the UX feels like.
reply
dancablam 5 hours ago
Hey thanks! This gives me the motivation to keep on evolving this project :)
reply
dannyw 4 hours ago
Love this concept, simple but brilliant idea with lots of utility. I think this can fit in a decent niche. I’ll give it a try!
reply
tetraodonpuffer 5 hours ago
cool idea, do you have any plans to integrate command generation with the shell completion / aliases / functions? Say I have tons of muscle memory on using ctrl-r fzf to get things from history, or on pressing tab to autocomplete pod names etc. so I would never write out a full kubectl command to execute by hand
reply
dancablam 5 hours ago
Ctrl-R, fzf and tab completion work in the terminal drawer. But completion in the editor doesn't exist currently. Really good idea, however so let me look into it!
reply
coursenumpls 21 minutes ago
add org-babel interop
reply
classictraffic 5 hours ago
This is really cool, and I love the mobile support too! I’ll definitely be giving this a spin
reply
melito 5 hours ago
Looks cool. I vibe coded this a while back to share some org docs on the web https://orgmode.dev/ - its currently a mess, but it does mostly work.
reply
rvdca 9 hours ago
How does this compete to something like Org-mode?
reply
dancablam 7 hours ago
Good question. Main differences of Ledge: You don't need Emacs for those of us that don't use it already. Markdown instead of Org syntax. Shells are interactive by default. Mobile apps can run the shell/code.
reply
KetoManx64 4 hours ago
Woooow! I love the idea of having documentation that I can just run directly as I'm reading through it, that also has a nice GUI to it. There's a similar product called Atuin Desktop (https://github.com/atuinsh/desktop) that uses Tauri for the GUI and the performance is just abysmal (makes my pc fans spin up like crazy when I launch it and navigate around), and have been on a lookout for something that handles the GUI aspect better. Definitely going to try this out.
reply
dancablam 4 hours ago
Great to hear! Hope it works well for you. Let me know if you hit any snags!
reply
fanthus 16 hours ago
[flagged]
reply
tux404 7 hours ago
[dead]
reply
xinyao27 20 hours ago
[dead]
reply
michaelastreiko 5 hours ago
[flagged]
reply
dancing 4 hours ago
Thank you Mr. Obvious AI
reply
imglorp 4 hours ago
Good eye. Its comment history really makes the point. Is it karma farming maybe?
reply
replwoacause 4 hours ago
@dang does hn have any defenses against accounts like this one?
reply
orthecreedence 3 hours ago
Great point — this comment adds — a — lot — to the discussion —.
reply
wakaru44 15 hours ago
Years ago I just used Jupyter notebooks with a bash (or many others) backend to have a similar thing.
reply
dancablam 12 hours ago
Jupyter is great. From what I recall it's bash kernel isn't a real terminal session so sudo prompts, top, etc can tend to get a bit wonky. I also have a preference towards Markdown over .ipynb.
reply
bpshaver 5 hours ago
This is all valid, but I'd suggest rethinking the slogan "The notebook that runs code" at the top of the README. I much prefer .md too and haven't used notebooks regularly in years, but nevertheless I scoffed when I read that (I thought: hasn't this guy heard of Jupyter?). I believe you'd be better off not calling this a "notebook" at all since that terms tends to describe something slightly different than what you have here.
reply
dancablam 5 hours ago
Good feedback. Perhaps "Runnable markdown notes" instead of "The notebook that runs code".
reply
bpshaver 5 hours ago
In truth I think it was just the use of the definite article that got me. This is a notebook that runs code, not the notebook that runs code. I just think this is cool and it could be better differentiated.
reply
rpdillon 2 hours ago
Yes, strong Hammacher Schlemmer vibes. I noticed years ago that they try to make every product sound like the pinnacle by prefacing it with "The". Somewhat effective, until you catch on.

https://hammacher.com/

reply
dancablam 46 minutes ago
ha. Fair point. I'll work to soften it a bit. Not meaning to imply "first and only"
reply
skrtskrt 5 hours ago
Scoffing and thinking "hasn't this guy heard of Jupyter" says more about your attitude than it does the tool or its README copy.

Hasn't this guy heard of [old product that is a huge pain and no one likes]? Why would he ever make something that suits his own interests and preferences?

reply
bpshaver 5 hours ago
Yes, exactly. I'm sharing with this creator what my initial knee-jerk reaction was, admittedly exaggerating a bit. In case he'd like to avoid other people having a similar reaction. (And indeed, he thanked me for my feedback.)

It seems like you think that pointing out that I'm sharing my attitude is some sort of gotcha, but I'm confused. Sharing one's attitude is the whole point of posting an internet comment, isn't it?

reply