pro Reading

Split view — read two markdown files side by side

Press Ctrl+Alt+S. Two panes scroll independently. Pin reference docs while reviewing the AI's plan. Each pane keeps its own scroll position, history, and fold state.

MD View
plan.md

#Project Plan

##Phase 1

  • Audit current state
  • Identify bottlenecks
  • Draft proposal

##Phase 2

  • Implement caching
  • Refactor data layer
  • Write integration tests

##Phase 3

  • Beta rollout to 5% of users
  • Collect telemetry
  • Iterate on findings

##Owner

R. Jain · review weekly

architecture.md

#Architecture Notes

##Components

Three-tier model:

  • gateway — Express, request validation
  • app — Node, business logic
  • db — Postgres 15

##Data flow

Client → gateway → app → db. Reads also hit the Redis cache fronting the db (TTL 60s).

##Caching

Cache keys are prefixed with the tenant id. Invalidation is event-driven via the audit stream.

##Observability

OpenTelemetry → single OTLP collector → Grafana.

##Auth

JWT issued by the gateway, signed with rotating keys.

Read it — split view, two docs at onceIndependent scroll. Pin a reference. Stay in flow.

What it does

MD View becomes a side-by-side markdown viewer when you press Ctrl+Alt+S (or pick View → Open Split View). The first toggle creates an empty secondary slot and switches the active focus to it — the layout still looks single-pane, with the primary doc still visible. The next file you open (drag-and-drop, workspace tree click, or Ctrl+O) lands in that secondary slot, and that’s when the window actually splits into two panes. From there each pane has its own scroll position, its own navigation history (back/forward), its own fold state, and its own document context. Dragging the splitter resizes the panes; the ratio is remembered between sessions.

The active pane (the one you last clicked) is the one global overlays operate on — find, verify, copy-code, table-of-contents, lightbox, fullscreen toggle. A subtle accent border shows which pane is active so you always know.

MD View in split mode showing two markdown documents side by side, each with its own scroll position
Two documents, two scroll positions, one window.

Why it exists

A lot of reading work is comparison work. You’re reviewing a spec against an implementation. You’re reading the AI’s plan while looking at the file it’s planning to change. You’re cross-referencing two pieces of documentation. Tab-switching adds latency and breaks concentration; alt-tabbing between windows adds even more. Split view collapses the two-window pattern into a single window in your taskbar.

There’s a second use pattern: pinning a reference. Open the docs in the left pane, do your real work in the right, glance left when you need a reminder.

How to use it

Ctrl+Alt+S creates the secondary slot and shifts the active focus to it. The next file-open routes there: drop any file onto the window, click a file in the workspace sidebar, or hit Ctrl+O. To close split view, click the × on the secondary pane’s tab — the window snaps back to single-pane mode showing whatever was in the primary.

Close-up of the splitter being dragged to resize the two panes
Drag the splitter to resize. The ratio is remembered.

Under the hood

Split view is implemented in src/ui/split.js. It evolves the single-document store to a { primary, secondary } pair, with most of the rest of the codebase reading from a single state.activePane indirection. The watcher pipeline became a multi-path map (one debouncer per watched file path) and dispatches per-path events. Mermaid diagrams use per-pane render IDs so SVG IDs don’t collide between panes. Print and PDF export operate on the active pane only — exporting both panes simultaneously is out of scope for v1 (the output would always need a layout decision the user hadn’t made).

The active-pane indicator is a 2 px accent border on the active pane’s outer container — quiet enough not to be visual noise, distinct enough to read at a glance.

Use cases

  • Spec vs implementation review: spec on the left, code-review markdown on the right.
  • Two PRs at once: one PR’s description on the left, the other on the right; jump between them without losing context.
  • Plan vs result: AI agent’s plan.md on the left, the actual output (or a review of it) on the right.
  • Reading reference docs while taking notes: docs left, scratch.md right.
  • Comparing two release notes: yours vs a competitor’s, two version bumps of the same project, etc.

Frequently asked questions

Can the panes sync scroll?
No, not in v1. Each pane maintains its own scroll position. Sync scroll is a frequently-requested feature on the roadmap, but a lot of comparison work actually needs *independent* scroll (e.g., looking at the top of one doc while reading line 200 of another), so the default is independent.
Does each pane have its own find / verify / line numbers?
No. Find, verify, and line numbers are global — they operate on whichever pane was last clicked (the 'active' pane). The active pane has a subtle accent border so you always know which is which. Per-pane toggles are on the roadmap if there's demand.
Can I open more than two panes?
No. Two only — primary and secondary. Three or more panes adds a lot of UI surface for limited gain. Open multiple MD View windows if you need more comparisons at once.
Does it work in fullscreen?
Yes. F11 (or Alt+Enter) puts the whole window in fullscreen with the split intact.

MD View — free, lifetime $24

14-day Pro trial. Then keep every Free feature forever.