DownSide 1.1 · macOS 15+

The print/markdown notes that match the app.

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.

Download, Gatekeeper, license.

Preview is free. Print, PDF, HTML export, and Export → Markdown need a key. $39, one time. No account inside the app.

  1. Grab DownSide.zip (or buy first — the receipt mail includes the same link).
  2. Unzip and move 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.
  3. macOS 15 or later. Apple silicon (arm64).
  4. DownSide menu → License…. Email + key shaped XXXX-XXXX-XXXX-XXXX. Activate. The pair lives in Keychain, so replacing the .app does not ask again.
  5. DownSide menu → Check for Updates… (Sparkle). Feed is the site 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.

GFM-shaped prose, then a few extras.

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.

[^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.

Print Preview is the paginator. WebKit @page is not.

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.

Tokens — header/footer chrome only

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:

TokenResolves 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.

CSS you can actually target

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).

One print ToC. Forced breaks. Not in the editor preview.

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.

Figure · Print Pipeline.md — the vault note used for ToC, BREAK, and the export checklist.
<!-- TOC --> Print pipeline 09 Open Print Preview. The marker becomes a table of contents on paper. <!-- BREAK --> Checklist before you export 34 [x] Swiss Strict (or your CSS) on screen 35 [x] Same stylesheet in print 36 [ ] Page numbers via {page} / {pages} 37 [ ] Endnotes on, if you used footnotes[^engine] <!-- include Snippets/Colophon.md -->

Multi-select export already joins files with <!-- BREAK -->. One ToC for the combined job if any selected file has the marker.

Mermaid, KaTeX, Prism. Same render as preview.

Mermaid

```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.

KaTeX

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}
$$

Prism

```swift
print("hello")
```

Unknown languages still render as a language-classed pre; they just won’t get a grammar.

The five CriticMarkup tokens are real.

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<<}
Figure · Revision.md — leave markup dirty; Preferences show-mode is the red-pen shot.
09 We imported the vault into a hosted app 10 left the files where they were. 11 The working title was {~~BitWriter~>The Folder is the Book~~}. 13 Print and preview must share an engine. 13 {>>Named in Launch Brief. Do not walk this back.<<}

Show mode wraps those as .cm-addition, .cm-deletion, .cm-highlight, .cm-comment (comments get brackets via CSS).

Both still work.

Includes

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.

Wiki links

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]].

Download the same notes.

These are the Screenshot Vault files featured on the homepage — not a roadmap, not a shot list. Open the unzipped folder in DownSide.

downside-example-vault.zip also includes Start Here.md and Snippets/Colophon.md so wiki links and includes resolve.

You cannot invent a second paginator.

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.

$39. One time.

Same Buy and Download as the homepage. Docs don’t replace the storefront.