Quick Look
Press space on any Markdown file in Finder and see it rendered in your reading theme, before you ever open an app.
a native macOS app · free & open source · signed & notarized
PullMark renders your local Markdown the way readers will see it — and shows
documentation-heavy GitHub pull requests as rendered diffs, with just the
changed words highlighted. Comment, suggest, and submit your review without ever squinting
at a wall of +/− prose.
$ brew tap jedijashwa/tap
$ brew trust jedijashwa/tap
$ brew install --cask pullmark
The latest DMG — open it, drag to Applications (PullMark handles the cleanup). All releases →
Either way, PullMark checks for updates and installs them with one click.
macOS 13+ · Developer ID signed, notarized by Apple · or build from source
your agent
Agents produce a lot of Markdown: implementation plans, specs, research write-ups — long documents that need your judgment before anyone acts on them. The existing ways to give it are all wrong for the job. Raw source in an editor hides what a reader would see, pasting chunks into a chat divorces the feedback from its place, and committing a working draft just to get PR comment boxes is ceremony — not every document belongs in a pull request.
Margin notes put the feedback in the document itself. Read the draft rendered, click where it's wrong, and leave a signed note anchored to that block. Notes are ordinary HTML comments that stay out of the rendered page — so "address my notes in the plan" is the whole handoff: your agent reads each note exactly where you left it. No commit, no paste, no pull request. Then watch the revision land — Compare highlights the agent's edits word by word, live as it saves.
The whole loop — including the instructions to hand your agent — is worked through on the agents page. Margin notes are in beta and on by default; the docs cover the mechanics.
why
You know the moment: a forty-line green wall in a README diff, and somewhere inside it, the one sentence that actually changed. Design docs, decision records, runbooks, agent definitions — more of what crosses your review queue every week is prose, and a source diff of prose hides exactly the thing you're there to judge.
PullMark shows you the change the way readers will meet it: rendered, with just the changed words highlighted. Tables stay tables, diagrams stay diagrams, and a one-word edit is one highlighted word. Comment on any block and it lands on the exact lines GitHub expects — approve, request changes, or leave suggestions the author can apply in one click.
“The reading room next to the workshop.”
PullMark is deliberately not a full review client. It shows only the Markdown files in a PR — for the code parts of a change, your usual review tools remain the right place.
reviewing
Switch between inline and side-by-side layouts, drop to the raw Source Diff, or preview the final Result — all from the toolbar, which also walks you file to file and back to the PR without touching the sidebar. YAML front matter renders as a quiet metadata table, not a wall of bold prose — so config-heavy docs diff cleanly too. A brand-new document reads as a document — one note says it's all new, instead of tinting every block green. Existing review threads appear under the blocks they discuss. Hover any block, click the bubble, and comment on the whole block or exactly the lines you pick. When you're done, Approve, Request Changes, or Comment right from the overview — with or without line comments — and drop file-level or plain conversation comments too. The overview shows where the PR stands: approved or changes requested, every reviewer's verdict, CI checks with a click-through to any check's logs, and the full conversation as a readable timeline. Open PRs are checked every minute; if the branch moves, one click refreshes and your drafts survive.
The default: collects drafts locally. Submit them together — Comment, Approve, or Request changes — or save a pending review to finish on github.com.
Posts a single review comment immediately, anchored to the block — or narrowed to just the lines you select in the composer.
The pencil opens a block's Markdown source in an editor — your change posts as a
```suggestion the author applies in one click.
reading
Your notes, your READMEs, your team's docs folder — open a file or a whole directory and read it the way it was meant to look. Everything re-renders the moment it changes on disk, relative images and links just resolve, and if GitHub renders it, PullMark renders it:
Bold, italic, strikethrough, inline code,
highlight, H2O, mc2,
eiπ + 1 = 0,
links with hover previews, footnotes[1],
task lists — plus tables, Mermaid diagrams,
syntax-highlighted code, > [!NOTE] alerts, offline KaTeX math,
[toc], and YAML front matter folded into a tidy metadata table.
pullmark --diff does it from a terminal — the fastest
"what did the agent just change to my doc".github.com link to a
Markdown file and PullMark renders it, with an always-visible repo @ branch
provenance bar; ⌘-click sends it to the browser instead.Those are the highlights. The docs cover the rest —
every feature, every setting, every icon, the full keyboard map, and the
pullmark command.
Press ⌘E and the page becomes the editor: the block under your cursor reveals its raw Markdown in place — same type, same position, nothing jumps — and you're typing immediately. Arrow through blocks, merge with Backspace, split with a blank line; leaving a block saves it through the same guarded, versioned path as everything else. Reading stays the default; the mode boundary is the save gesture.
Click a github.com link to a Markdown file and PullMark fetches
and renders it in-app — your first click asks which behavior you want, and
⌘-click always does the other. A provenance bar above the page says exactly
which repo and branch you're reading, pinned to the commit it resolved to; relative links
keep resolving against the repo, the whole Markdown tree is one click away in the sidebar,
and private repos use the GitHub sign-in your PRs already use — nothing fetched ever
touches disk. Branches are a chip on every repo: switch in place, open another branch as
its own sidebar entry, or hop into a local worktree. And if the repo is already cloned on
your Mac on that branch, the link opens your local file instead.
native
Press space on any Markdown file in Finder and see it rendered in your reading theme, before you ever open an app.
pullmark README.md, pullmark ~/wt docs/plan.md — files,
folders, and worktrees open in the running app, always in the frontmost window.
pullmark --help documents it; so do the docs.
One click in Settings makes double-click in Finder mean rendered, everywhere — and if an upgrade ever drops the binding, PullMark notices and offers it back.
No separate login. PullMark uses gh auth token or your git credential
helper — private and org repos just work.
Fetched PR content lives in ephemeral sessions and bounded memory caches — nothing from GitHub is written to persistent storage.
Swift, zero package dependencies, and a license that stays out of your way. Read the source.
Free, open source, signed and notarized. One download away.
$ brew tap jedijashwa/tap
$ brew trust jedijashwa/tap
$ brew install --cask pullmark
The latest DMG — open it, drag to Applications (PullMark handles the cleanup). All releases →
Either way, PullMark checks for updates and installs them with one click.