SideMark: Building a Markdown Editor for Two Authors
I built a markdown editor a few weeks ago because every other one annoyed me. Too expensive, too slow, too bloated, or too buggy. I just wanted three panes, no cloud, no subscription.
Then I started using it.
Not casually — I mean, I started using it the way I work now, which is with Claude Code running in one terminal (ok, let’s be real, five terminals) and a stack of markdown files open in the editor. CLAUDE.md. ROADMAP.md. Blog drafts, LinkedIn notes, architecture diagrams, task statuses… The files that are the workflow, not just the output.
And the editor I’d built — the one that was perfectly fine for a single author — started fighting me.
The dialog that breaks everything
Here’s what happens when you’re editing a governance doc, and Claude Code writes to the same file:
Your editor pops up a dialog. “File changed on disk. Reload?”
If you say yes, you lose your cursor position and your unsaved edits. If you say no, you’re now working on a stale version, and the next save will overwrite whatever the agent wrote. If the editor doesn’t ask — some just silently reload — your changes vanish without warning.
This happens dozens of times a day in an agentic workflow. Every markdown editor on the market treats it as an exceptional error condition - if it’s caught at all. A thing that shouldn’t be happening. A conflict to resolve.
But in AI-assisted development, it’s not exceptional. It’s the primary workflow. Two authors are writing to the same files, and that’s often the whole point.
The feature I needed didn’t exist
I don’t use VS Code for markdown — never liked the experience for prose. And the editors I do use for markdown all handle external changes the same way: reload, ask, or outright ignore. None of them tries to merge. None of them treats two-author editing as a normal operating mode.
So I built it. Three-way merge against the last-saved common ancestor — the same approach git uses, applied at the file level in real time.
When you edit lines 5 through 10, and Claude edits lines 40 through 50, both changes merge automatically. No dialog, no interruption. A toast notification confirms it happened. When you both edit the same lines and the changes actually overlap, an interactive diff shows each hunk independently — accept this one, reject that one, save yours as a new file if you want an escape hatch.
This was the feature that turned “a markdown editor I built because I was annoyed” into something worth naming.
Six versions in a day
Once the merge architecture was in place, the rest came fast. Not because I planned it, but because I kept hitting friction in my own workflow and fixing it immediately.
Auto-save with a configurable delay, because switching from the editor to Claude Code and back shouldn’t require thinking about whether I remembered to save. Git gutter markers, because after an AI agent edits your file, you want to see what changed since your last commit at a glance — green for added, blue for modified, red for deleted. Copy with context (Cmd+Opt+C), because pasting a code block into an AI prompt without the file path and line numbers wastes tokens.
Focus mode, because I’m also writing a book in this thing, and sometimes I need to shut out everything except the text.
File deletion detection, because AI agents occasionally delete files, and you should know about it before you start typing.
Six versions in one night. v0.3.2 through v0.4.3. While also cutting more than 10% from an AWS account on a different project and pushing 15 deployments on a third. That’s not a humble brag — it’s proof that the cognitive offloading system works. The governance documents held the state for all three workstreams. My brain held the judgment calls. The systems didn’t compete with each other because none of them required me to remember where I left off.
The dogfooding loop
Every feature in SideMark emerged from my using SideMark to build SideMark and work on other projects.
I was editing CLAUDE.md in the editor while Claude Code read from the same file. The merge conflict that spawned a three-way merge was a real conflict, in a real session, on a real project. The auto-save feature exists because I kept forgetting to save before switching to the terminal, and Claude Code would read the stale version. The git gutter exists because after a long Claude Code session, I’d look at a file and have no idea which lines I’d written and which the agent had.
Every feature was born from friction I experienced while using the tool I was building. Not from a spec. Not from user research. Not from a competitive analysis. From the gap between “I need this to work” and “it doesn’t work yet.”
That’s dogfooding in the purest sense — and it produces a different kind of product than spec-driven development. The features are tight because they solve problems I actually have. The things that are missing are missing because I haven’t needed them yet. There’s no plugin system because I’ve never wanted one. There’s no cloud sync because my files are on my machine, and that’s where they belong.
What “simple” became
The editor started as “Simple Markdown Editor.” Three panes, no subscription, nothing else. That name made sense for what it was.
It doesn’t make sense for what it became.
SideMark is a markdown editor built for working alongside AI. The “side” is literal — it works at your side, handling the merge conflicts and file state so you don’t have to. The “mark” is markdown. Two syllables, no ambiguity about what it does.
The name changed because the product changed. And the product changed because the workflow changed. I didn’t set out to build an AI-collaborative editor. I set out to edit markdown files without being annoyed. The collaboration features emerged from the reality of how I work — writing to the same files I edit all day, every day, with an AI agent.
The cognitive offloading connection
Auto-save offloads “Did I save?” Three-way merge offloads “What did the AI change?” Git gutter offloads “What’s different since my last commit?” Copy with context offloads “What’s the file path and line number?”
Every one of those is a piece of operational cognition — state-tracking that eats working memory without producing strategic value. The editor holds the state. I hold the judgment about what to write.
That’s the same architecture as the governance documents. The same architecture as the butt book that eventually became a system. Offload state, keep judgment. The scale changes; the principle doesn’t.
Try it
SideMark is free and open source. macOS only. MIT licensed. No account, no subscription, no telemetry.
If you’re working with Claude Code, Cursor, Windsurf, or any AI agent that writes to files — and you’re tired of the “file changed on disk” dialog — this is the editor that was built inside that exact workflow.
Download the latest release or check out the product page for the full feature list.
Sources & links
- SideMark on GitHub — MIT licensed, full source
- Original blog post — “I Built a Markdown Editor Because Every Other One Annoyed Me”
- Product page — full feature list with screenshots
Get new posts in your inbox
Occasional writing on systems, ADHD, and AI. No cadence pressure.
You're in. I'll send you the next one.