Summary
Add the ability to view two pages (or two versions of the same page) side by side. This is essential for comparing related content, reviewing changes, and referencing one page while editing another. Standard in VS Code, Notion, and Obsidian (via community plugin).
Proposed behavior
- Open in split view — right-click a wiki-link or tree item → "Open in Split View". Or use keyboard shortcut
Cmd+\ / Ctrl+\.
- The screen splits into two panes, each independently scrollable and navigable.
- Each pane has its own breadcrumb, ToC toggle, and edit button.
- Panes can be resized by dragging the divider.
- Close split view via an
× on the secondary pane or Cmd+\ again.
- Version compare mode — from the history view, "Compare with current" opens the old version in a split pane alongside the current version.
Implementation notes
- Prioritize shadcn components. Use shadcn
ResizablePanelGroup / ResizablePanel / ResizableHandle — install via npx shadcn@latest add resizable. This wraps react-resizable-panels and provides accessible, draggable split panes out of the box.
- State: store split-view state in a React context (
SplitViewProvider) with {leftPath, rightPath, sizes}.
- The existing
KiwiPage component should work unmodified in each pane — it already accepts a path prop.
- Persist the split state in
sessionStorage so it survives page refreshes.
- Mobile: disable split view on small screens (< 768px). Show a "Not available on mobile" message if triggered.
- Consider starting with a simple left/right split. Top/bottom and multi-pane can come later.
Acceptance criteria
Summary
Add the ability to view two pages (or two versions of the same page) side by side. This is essential for comparing related content, reviewing changes, and referencing one page while editing another. Standard in VS Code, Notion, and Obsidian (via community plugin).
Proposed behavior
Cmd+\/Ctrl+\.×on the secondary pane orCmd+\again.Implementation notes
ResizablePanelGroup/ResizablePanel/ResizableHandle— install vianpx shadcn@latest add resizable. This wrapsreact-resizable-panelsand provides accessible, draggable split panes out of the box.SplitViewProvider) with{leftPath, rightPath, sizes}.KiwiPagecomponent should work unmodified in each pane — it already accepts apathprop.sessionStorageso it survives page refreshes.Acceptance criteria