MoonMark

macOS 26 or later
.md · .markdown · .mdown
English · 简体中文

A native Markdown reader for macOS, built for reviewing the docs your AI agents write.

Plans, designs and analyses from an agent open as finished documents. The outline sits on the left, the text keeps a comfortable line length, and tables, code and diagrams each get the room they need. Switch to the source when you want to edit. When the agent rewrites the file, the window keeps up.

Read a sample document
migration-plan.mdwritten by an agent

Session store migration: Redis → Postgres

Generated by Claude Code · 2026-09-28 · Awaiting review

Background

Session data lives in a single Redis instance with persistence turned off. Two restarts last week each dropped about 40,000 logins. This plan moves sessions to the existing Postgres cluster and keeps Redis as a read cache.

Options

OptionDurabilityRead P95Effort
A: Enable Redis AOFPer second0.8 msSmall
B: Move to PostgresPer transaction2.4 msMedium
C: B + Redis read cachePer transaction0.9 msMedium

Recommend C: the same durability as B, with read latency close to today.

Steps

  • Create the sessions table with an index on user_id
  • Dual-write: new sessions go to both Redis and Postgres
  • Backfill existing sessions (about 1.2 million rows)
  • Switch reads to Postgres; Redis becomes a cache
  • Watch for 7 days, then drop the dependency on Redis persistence

Data flow

read miss write Client API Redis cache Postgres

Backfill script

-- Backfill unexpired sessions only
INSERT INTO sessions (id, user_id, data, expires_at)
SELECT id, user_id, data, expires_at
FROM staging_sessions
WHERE expires_at > now()
ON CONFLICT (id) DO NOTHING;

Risks

Warning

If dual writes conflict during the backfill, Postgres wins. Freeze changes to the session schema before the backfill starts.

Rollback

Reads are controlled by the SESSION_READ_FROM_PG flag. Turn it off to fall back to Redis. No redeploy needed.

LIGHT
DARK

Try another theme. Click a heading in the outline to jump to it. Click </> or press ⌘⇧E to see this document's Markdown source.

##Reads well

Every file opens as a finished document.

An outline on the left
Headings become an outline. The section you are reading is highlighted, and one click takes you to any other.
⌃⌘S
A comfortable column, with room for wide content
Text stays 46rem wide, even on a large display. Wide tables and diagrams use the margins when they need them. Code blocks line up with the text, and long lines scroll inside the block.
46rem
Six themes
Porcelain, Linen and Mist for light mode. Graphite, Midnight and Forest for dark mode. The outline, text, code, tables and diagrams change together, and MoonMark follows your system appearance.
3 + 3
Your fonts, set with care
Sans-serif by default. Choose any font installed on your Mac for text and code, and adjust the size and weight. Mixed English and Chinese text is spaced properly.
⌘+⌘−
Diagrams, math and code
Mermaid diagrams are drawn by default. Switch back to the source, zoom in or copy them. KaTeX math and syntax highlighting run on your Mac.
Mermaid · KaTeX

##Holds up

Your text stays safe, and so does your place in it.

The agent edits the file. The window keeps up.
If you haven't changed the document, MoonMark reloads it when the file changes on disk and keeps your reading position. If you have, nothing is overwritten behind your back. A bar appears at the top of the window and you decide what happens.

The notice bar, word for word from the app

Reading and source, one shortcut apart
Spot something to fix, switch to the source and change it. Switch back and you are on the same paragraph.
⌘⇧E
Tabs in one window
Open several documents as tabs in one window. Relative links to other .md files open in a new tab.
⌘O
Careful saves
Saving writes a temporary file first, then replaces the original. Unsaved changes are kept in a local recovery draft, so they survive a force quit.
Odd files still open
A file that is very large or unusually complex is shown as plain text. Nothing is lost, and the app keeps responding.
Offline and sandboxed
Everything renders on your Mac. No account and no network connection needed. Scripts inside a document never run.

##Not included

Other tools do these well.

  • File tree
  • Cloud sync
  • AI chat
  • Knowledge base
  • Plugin store
  • WYSIWYG

MoonMark sticks to reading, editing and saving Markdown, and doing it well.

##Specs

Beta. Details may change before release.

System
macOS 26 or later
Interface
Native AppKit window, text laid out by WebKit
Files
.md .markdown .mdown
Syntax
CommonMark, GFM tables and task lists, footnotes, front matter, callouts, Mermaid, KaTeX
Languages
English, 简体中文
Accessibility
VoiceOver, Reduce Motion, Increase Contrast
Account and network
Neither required