DownSide 1.1 · macOS 15+
Not a wish list. These are the hooks in the pinned build: comments the packer understands, tokens that resolve in chrome, CSS you can paint without breaking pagination.
1 · Get it running
Preview is free. Print, PDF, HTML export, and Export → Markdown need a key. $39, one time. No account inside the app.
DownSide.app wherever you keep Mac apps. The build is Developer ID signed (AltaForma, LLC) and notarized with a stapled ticket. Gatekeeper should let it open without a right-click workaround.XXXX-XXXX-XXXX-XXXX. Activate. The pair lives in Keychain, so replacing the .app does not ask again.appcast.xml. Automatic checks are on.Full Disk Access is only needed if macOS blocks a protected folder (some ~/Documents / external-drive cases). Preferences → Editor has a shortcut to that pane.
Open a folder (⌘⇧O) or a file (⌘O). Multi-select in the sidebar (⌘-click / ⇧-click) hides the editor and offers Export HTML / Export PDF / Print for the selection. Files are concatenated in sidebar order with a page break between each.
2 · Markdown DownSide actually compiles
The preview is Marked in WebKit. YAML at the top is stripped before parse — it is not hidden with CSS.
---
title: Launch brief
author: You
tags: print, vault
date: 2026-08-23
---
# Launch brief
Normal GFM from here.
Get Info (the info control on the preview footer) edits that --- block: title, author, tags, date, plus leftover keys. {title} in Document Setup uses YAML title, else the first heading, else the first body line, else the filename.
- [ ] / - [x] (toolbar Checklist inserts - [ ]).[^id] footnotes: live preview leaves them as written. Print / PDF default is endnotes — definitions become an Endnotes heading at the end, references become superscripts. They are not on-page footnotes. That conversion is on by default for print jobs.
WebKit is the quality bar.[^engine]
[^engine]: Preview and PDF share one pipeline.
3 · Print and PDF
File → Print… (⌘P) and Export → PDF… both open Print Preview. Print… and Save as PDF… in that window go through the same paginated exporter (paper-sized snapshots). Paper size and margins are macOS Page Setup / Preferences → Print and PDF (default 0.75 inches). Print is always a light document, even if the editor preview is dark.
Document Setup (File → Document Setup…, or Preferences → Print and PDF) has left / center / right slots. These strings are drawn on the chrome bars, not substituted in the markdown body:
| Token | Resolves to |
|---|---|
{title} | Document title (see YAML above) |
{file} | Filename |
{page} | This sheet’s number (style below) |
{pages} | Sheet count in that series |
{section} | Running head — current H1 / H2 / H3 |
{date} | Today, medium date, no time |
Defaults: header right {section}, footer left {title}, footer right {page}, header hidden on the first page. Page number styles: none / 1, 2, 3… / 1 of n / i, ii, iii…. Running head picker: Off / H1 / H2 / H3. First-page footer can be hidden or different. Header/footer band heights are in points.
If a job has a table of contents, ToC sheets are front matter. Their {page} uses the ToC style (i/ii/iii, I/II/III, or blank). Body page 1 starts after that section. {pages} on a ToC sheet is the front-matter count; on a body sheet it is the body count.
Preferences → Preview: document theme (Swiss Strict default, GitHub, Academic, Manuscript, LaTeX Article, Screenplay, Wikipedia, or Custom CSS…). Optional override file. Separate choosers for syntax (Prism), Mermaid (screen), print CSS, and Mermaid print CSS. Those files apply to preview and/or Print Preview + PDF as labeled. Custom document CSS is last in the stack so the typeface can win.
Useful selectors (real class names):
#downside-body { } /* the markdown */
#downside-body h1 { }
#downside-body pre { }
#downside-body table { }
nav.downside-toc { }
.downside-toc-title { }
.downside-toc-list { }
.downside-toc-item { }
.downside-toc-h1 { }
.downside-toc-h2 { }
.downside-toc-h3 { }
.downside-toc-link { }
.downside-toc-leaders { }
.downside-toc-page { }
#ds-print-stack { }
.ds-print-page { }
#ds-print-sheet { }
#ds-print-clip { }
.ds-print-header, #ds-print-header { }
.ds-print-footer, #ds-print-footer { }
.ds-slot.ds-left { }
.ds-slot.ds-center { }
.ds-slot.ds-right { }
.downside-print-break.downside-user-break { }
.downside-fn-ref { }
.cm-addition, .cm-deletion, .cm-highlight, .cm-comment { }
Override body text size in Document Setup if you want a point size on #downside-body that scales the print heading/table/pre sizes. Off = the CSS sizes stand.
Preferences → Print and PDF also: disable links/highlights in print (default on), optional page break before H1/H2/H3, optional --- as a page break (off by default).
4 · Table of contents + page breaks
Insert → Table of Contents (or the toolbar button) inserts <!-- TOC -->.
Case-insensitive, ignored inside fenced code. Print Preview / PDF: if any file in the job has that marker, DownSide builds one nav.downside-toc at the front of the job — not one per marker, not in the live editor preview. The preview footer Contents menu is a jump list. Different thing.
Print Preview shows ToC controls when the marker is present: title (default “Contents”), depth H1 / H1–H2 / H1–H3, page numbers on entries, dot leaders, ToC sheet numerals (i/ii/iii, I/II/III, or blank). Entry numbers follow the document page-number style (plain, or roman if you picked roman for the body).
Insert → Page Break inserts <!-- BREAK -->.
That becomes .downside-print-break.downside-user-break. The packer finishes the page; the break itself is not painted on paper. In the live preview (if “Render page break markers” is on) you see a dashed “page break” rule. The first heading at the top of a document never gets an automatic heading-break in front of it.
Multi-select export already joins files with <!-- BREAK -->. One ToC for the combined job if any selected file has the marker.
5 · Diagrams / math / code
```mermaid
flowchart LR
A[Notes] --> B[Print Preview]
B --> C[PDF]
```
Fence language mermaid becomes a div.mermaid. Screen colors follow the preview theme; print/PDF always use the light Mermaid sheet (optional custom Mermaid print CSS). Don’t put Mermaid in an indented code block.
Delimiters that actually run: $$…$$ and \[…\] (display), \(…\) and $…$ (inline). A $ pair that is only digits/commas/spaces is skipped so currency doesn’t become math.
Inline $E = mc^2$ stays in the sentence.
$$
\int_0^1 x^2 \, dx = \tfrac{1}{3}
$$
```swift
print("hello")
```
Unknown languages still render as a language-classed pre; they just won’t get a grammar.
6 · Critic markup
Processed in preview, HTML, print, and PDF (skipped inside fences). Default mode is show. There is no Preferences picker in this build; modes exist in code (show / accept / reject / ignore) and default to show.
{++add this++}
{--delete this--}
{~~old~>new~~}
{==highlight==}
{>>a comment<<}
Show mode wraps those as .cm-addition, .cm-deletion, .cm-highlight, .cm-comment (comments get brackets via CSS).
7 · Includes / wiki links
Expanded in live preview, HTML, print/PDF, and Export → Markdown. Paths are relative to the file that contains the include. The included file’s YAML is stripped. Max depth 8. Cycles and missing files become a blockquote warning, not a crash.
<<[Snippets/Colophon.md]
<!-- include Snippets/Colophon.md -->
Escape: a backslash before the angle-bracket include prints the token as literal text. Fenced code already skips includes. Backticks around the token keep it as prose.
Preferences → Preview → Resolve wiki links (on by default). Insert → Wiki Link wraps the selection. Double-bracket names become links. Click opens a workspace file whose stem or full name matches (case-insensitive, exact — not a slug). No match: DownSide creates that markdown file in the open folder and jumps there.
See [[Start Here]] and [[Literature Review]].
Example vault
These are the Screenshot Vault files featured on the homepage — not a roadmap, not a shot list. Open the unzipped folder in DownSide.
Print Pipeline.md — <!-- TOC -->, <!-- BREAK -->, task list, include, footnote.Equations.md — KaTeX inline and display.Diagrams.md — Mermaid flowchart and sequence.Revision.md — the five CriticMarkup tokens.Launch Brief.md — decisions checklist and milestone table.downside-example-vault.zip also includes Start Here.md and Snippets/Colophon.md so wiki links and includes resolve.
8 · What not to do in CSS
.ds-print-page cards. CSS break hints are read for ToC / user BREAK / keep-together; they are not a second layout pass.#downside-body, #ds-print-stack, .ds-print-page, or #ds-print-clip. That breaks packing and clipping..downside-print-break if you still want those features. Prefer the Print Preview toggles.The live editor preview does not show the printed table of contents. Trust Print Preview for page numbers, front matter i/ii/iii, and whether a BREAK actually starts a sheet.
Same Buy and Download as the homepage. Docs don’t replace the storefront.