a native macOS app · free & open source · signed & notarized

Docs are meant to be diffed read.

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.

Homebrew
$ brew tap jedijashwa/tap
$ brew trust jedijashwa/tap
$ brew install --cask pullmark
Direct download
Download 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

PullMark rendering a project's documentation as a formatted page, with the blame gutter on: author avatars sit in the left margin, one per run of blocks last touched by the same commit
A project doc, formatted — with history in the margin: one avatar per run of blocks, each one a doorway to its commit.

your agent

Your agent writes plans.
Review them like a coworker's.

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.

PullMark rendering an agent-written design spec titled Wind Gust Alerts with three margin notes shown as signed cards from the reviewer — a file-level note asking for a clean second revision, one challenging the spec's sampling-rate assumption, and one calling YAGNI on a feature — while the sidebar shows the spec in a docs/superpowers/specs folder of a git repository on branch main
An agent's spec, reviewed in place: three signed notes anchored to the blocks they challenge, stored in the file itself as ordinary HTML comments — the agent addresses each one and deletes it.

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

Prose isn't code.
Stop reviewing it like code.

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.”
Note

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

The whole docs review, from the rendered page.

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.

PullMark reviewing a documentation pull request: a rendered diff where a changed paragraph carries word-level highlights, an added Mermaid flowchart renders on a green added-block tint, the sidebar shows a comment count on the file, and the toolbar's review control reads Finish your review with three pending comments
A documentation PR as a rendered diff: the one changed sentence carries word-level highlights, and the new flowchart arrives as a diagram on an added-block tint — not eighty green lines of Mermaid source.
Start a review

The default: collects drafts locally. Submit them together — Comment, Approve, or Request changes — or save a pending review to finish on github.com.

Add single comment

Posts a single review comment immediately, anchored to the block — or narrowed to just the lines you select in the composer.

Add a suggestion

The pencil opens a block's Markdown source in an editor — your change posts as a ```suggestion the author applies in one click.

PullMark's pull-request overview: the PR title with an Open chip, a Changes requested capsule, a Checks passed capsule, reviewer avatars wearing verdict badges, a docs-guild team chip, the PR description rendered, and the conversation timeline whose first review comment shows a rendered table
The conversation as a document: review comments render their tables as tables, and each reviewer's avatar wears their verdict.

reading

A proper reader for the Markdown already on your disk.

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, e + 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 rendering a local Markdown file from a docs repo: the sidebar's Open Files section lists three kept documents and one italicized preview entry; the Locations section shows the folder as a tree of subfolders and Markdown files, wearing a git branch chip and a GitHub repo mark; an open pull request's changed files form a tree with status icons and a comment-count badge; the rendered document shows headings, lists, a link, and a Tip alert; the titlebar shows the file's folder and git branch, with a word-count pill in the corner
Folders come in as living trees, every location wears its git branch, and browsing shows files as previews — the italic entry in Open Files that the next click replaces. Pull requests sit beside your local files, and the titlebar knows where you are.
  • History in the margin — a quiet blame gutter: one avatar per run of blocks; hover for author, date, and commit; click for the full line history.
  • Always current — save from any editor and the page has already re-rendered.
  • Diff against history — one click compares the working file with any recent commit or branch, rendered like a PR diff, live as the file keeps changing; pullmark --diff does it from a terminal — the fastest "what did the agent just change to my doc".
  • Browse without burying yourself — single-click through a folder or a repo and each file shows as a preview: one italicized entry in Open Files that the next click replaces. Double-click (or just start editing) to keep it.
  • Outline sidebar — a navigator-style map of your headings, one toggle away.
  • Find anything⌘F steps through matches on the page; ⇧⌘F searches every file in the sidebar at once.
  • Zoom that reflows⌘+ and ⌘− (or a pinch) scale text, images, and the reading column together, remembered across launches; the navigation grows with it.
  • Click to inspect — images, Mermaid diagrams, and block formulas open in a focused pan-and-zoom overlay, so complex diagrams aren't stuck at column width — and save or share exactly what you're inspecting (diagrams as real SVGs).
  • Take it anywhere — export as PDF or a single self-contained HTML file; ⌘C pastes rich into Docs and Slack, ⌥⌘C gives the Markdown back.
  • Three reading themes — Editorial, GitHub, and Terminal, with live previews in Settings — or drop in your own CSS. Light & dark restyle everything, Mermaid included, and the line length is yours: Standard, Wide, or Full Width.
  • GitHub links open in-app — click a 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.
  • Open Quickly⌘K jumps to any heading, file, or PR, fuzzy-matched — or paste a PR URL, a repo URL, or a file path and it opens that directly.
  • Moved means moved — a paragraph relocated verbatim renders once with a quiet violet chip, not red-plus-green noise.
  • Picks up where you left off — your files, PRs, and reading position restore at launch.

Those are the highlights. The docs cover the rest — every feature, every setting, every icon, the full keyboard map, and the pullmark command.

Read by default. Edit in place.

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.

A rendered document in edit mode: one paragraph revealed as raw Markdown source in place, surrounded by rendered content
Edit mode: the active block shows its source; everything else stays rendered.

GitHub is a place your docs live. Read it like one.

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.

PullMark rendering a Markdown file fetched from a GitHub repository: a provenance bar above the content reads the repository name, a branch chip, the file path, and the pinned commit, with an Open on GitHub link; the sidebar's Locations section shows the repository with a book icon and its Markdown file tree
A doc read straight from GitHub: the provenance bar always says where you are — repo, branch, pinned commit — and the branch chip switches or opens branches without leaving the page.
PullMark's Settings window on the Appearance tab: three live theme preview cards — GitHub, Editorial, and Terminal — each rendering the same sample document through the real pipeline, with Editorial selected, above buttons for opening the custom Themes folder
Settings → Appearance: three live theme previews, rendered by the real pipeline — click a card to switch.

native

A Mac app that acts like one.

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 real CLI

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.

Default app for .md

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.

Your existing credentials

No separate login. PullMark uses gh auth token or your git credential helper — private and org repos just work.

Nothing left on disk

Fetched PR content lives in ephemeral sessions and bounded memory caches — nothing from GitHub is written to persistent storage.

Open source, MIT

Swift, zero package dependencies, and a license that stays out of your way. Read the source.

Give your docs a reading room.

Free, open source, signed and notarized. One download away.

Homebrew
$ brew tap jedijashwa/tap
$ brew trust jedijashwa/tap
$ brew install --cask pullmark
Direct download
Download 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.

or build from source