MojoPad

Markdown Pages

MojoPad pages come in three text flavors — rich text, Markdown, and plain text — plus file pages for attachments. Set the default for new pages in the Info palette (Document section); convert any page with Convert Page To (in the menu, or the ⇧⌘P command palette), or flip an entire document at once with All Pages to Markdown… or All Pages to Plain Text…. Converting rich text to Markdown keeps your formatting — headings, bold, lists, and links — as Markdown syntax, rather than flattening it to plain text.

Plain text reaches further, because it is downhill from both shapes: it takes your rich-text pages and your Markdown ones. Each gives up something different, and the confirmation says which before it happens — a formatted page loses its formatting, and a Markdown page keeps every word but gives up the backslashes that only existed to stop Markdown reading a character as markup. Pages already in plain text are left out of the count.

Storyboards and mind maps sit out all of these, and say so. Both store a tree of cards, which is a structure neither Markdown nor plain text can hold, and converting one would quietly flatten it into a bulleted list. To get a board's words out as a document use its own Send to… button; a map has ≣ Save as an outline. Protected pages are never converted either — unlock them first.

What a Markdown page cannot keep, and now says so. A Markdown page is stored as Markdown, so a size or a typeface set on a run of words has nowhere to live in it. The two pickers on the format bar used to apply anyway — it looked right, and the next save took it away with nothing said. They now decline and say what to do instead: a heading gives you size, and a Formatted text page keeps a size or a face you set yourself. Color and highlight are kept on a Markdown page, which is why the two behave differently on the same bar.

Markdown, the way you'd hope

Resized an image? The width rides along in the text itself — ![alt|400](photo.png) — the same dialect other Markdown wikis speak, so a resize survives every reload, export, and other editor.

Markdown pages open as a formatted, fully editable view — headings render as headings, lists as lists, checkboxes as real clickable checkboxes. Type in it, bold things with ⌘B, use the format bar, or type / for a quick-insert menu (see Formatting); your edits are written back to clean Markdown source underneath.

Text color and highlight stick, too. Color a word or highlight a passage on a Markdown page and it survives a save and reload — MojoPad keeps it as a tiny inline <span> in the source (the one scrap of HTML Markdown allows), so it round-trips cleanly. Decoration Markdown genuinely can't express — a custom font or a one-off size — still gives way to the page's own styling.

The HTML a Markdown page keeps: furigana and color. Notes brought in from another Markdown app sometimes carry a little HTML, and two kinds are drawn the way they were meant. Ruby sets a reading small above the words it belongs to — furigana over a name, written <ruby>与田<rt>よだ</rt></ruby>, with or without <rb> around the base and <rp> parentheses for apps that can't draw it. Colored words are written <font color="…">, with any color by name or by number. Saving the page leaves those lines exactly as they are in your file; recolor the words and the new color is kept the way MojoPad keeps any color you choose. Every other tag still shows as the characters you typed, and so does one of these two written in a way MojoPad doesn't read: a ruby tag with anything more inside its brackets, a <font> with no color or with anything besides a color, a typeface and a size, or a tag closed on a later line — and saving the page leaves those in your file as they are, too. A <font>'s typeface and size aren't drawn, but they stay in your file. Your lines are kept the same way wherever you edit the page — a Journal day, any pane, a card on a canvas — and a task that has them keeps them when you move it to another Markdown page or rename it from Tasks.

Ruby counts as its words, once: the reading is left out of the word count but found by search, Read Aloud reads only the words beneath it (from a card on a canvas too), a Word export sets it as Word's own phonetic guide, and an HTML or Markdown export keeps it. A page of formatted text keeps ruby and a <font color> too, except a black or gray one: that is how many other pages write their ordinary text, so those words take your theme's text color and stay readable in a dark theme.

A Markdown page in its formatted view. The pill (top right) flips to source.

The little pill in the top-right corner names the view you're in — Markdown (the raw source) or Formatted (the live, editable view) — and clicking it (⌃⌘P does the same) flips to the other. New Markdown pages open in the Formatted view, ready to write — raw source is always one ⌃⌘P away. An empty page shows a faint “Press / for quick actions” hint that vanishes the moment you start typing.

A new line without a new paragraph. Writing in the Formatted view, ⇧⏎ (Shift-Return) starts a new line inside the paragraph, bullet, numbered or checklist item, quote or heading you are in — to put a sentence's translation on the line under it in the same bullet, say, or to write an address a line at a time. ⏎ still starts a new paragraph or a new bullet. The line stays where you put it: when you scroll, when you go to another page and come back, in the Markdown view and in every export. In the Markdown view, a new line in a paragraph or a quote simply starts the next line. In a bullet, a numbered or checklist item, or a heading, it shows as a short line-break tag, and the words after it stay on the same line. That keeps every bullet on a line of its own, so a copy of MojoPad that hasn't been updated yet — on your other Mac, say — shows the tag as text but never moves a bullet out of its list or changes its level. A Markdown export — File ▸ Export Page As ▸ Markdown…, File ▸ Export Document ▸ Markdown Folder… or a Markdown Compile… — writes standard Markdown line breaks instead, the kind other Markdown apps read. MojoPad reads those too, along with the other ways Markdown and notes apps write a line break, so a page you import from one shows its lines as they were there, and every bullet stays in its list. The page is kept the MojoPad way from the moment it arrives — imported, pasted, added by an AI agent or converted from plain text — so the copy on your other Mac sees the same bullets even before you edit it. Each line keeps its own formatting marks, too: a ~ or ^ on one line never pairs with one on the next, so a range such as 10~20 stays as you typed it. When you convert the page to plain text, each new line becomes a line of the text, and word counts and search read it as the space between two words.

Supported syntax

Headings, bold/italic, inline code, fenced code blocks, links, images, bulleted/numbered lists, nested lists, task lists (- [ ] / - [x] become clickable checkboxes), blockquotes, horizontal rules (three or more dashes, asterisks or underscores on a line of their own — see A line across the page below), ~~strikethrough~~, footnotes, superscript/subscript (x^2^, H~2~O — nothing loose inside the markers), and pipe tables.

Saying “I mean the character, not the markup”. Put a backslash in front of it: \*not italic\* writes the asterisks, \# writes a hash instead of making a heading. It works for every punctuation mark Markdown uses, and — the part that matters — the backslash is still there when you save the page and open it tomorrow. HTML you type in the Formatted view is kept as words the same way: type <span style="color:red"> and that is what the page shows, saved with a backslash before the tag.

And if your text IS the markup. Exporting a page normally protects those characters the other way around, so words you typed arrive as words — 2 * 3 stays arithmetic instead of turning into emphasis. That is right for most writing and exactly backwards if you write Markdown or Org by hand and expect it to arrive as markup. Check I write my own markup in the Info palette and exports hand your text over as written. It is set per document, so a wiki of ordinary notes and a wiki of source can sit side by side.

Other things that now read the way you'd expect. __bold__ works as well as **bold**. Written-out characters like &amp; and &mdash; come through as the characters themselves, and a line you haven't changed is saved with them written out as before — and so are its <br> tags, its colors and the backslashes before its punctuation, exactly as they are in your file. So are a table's column alignment (:---, :---:, ---:) and spacing, a title underlined with --- or ===, a line break in a paragraph written as a backslash or two spaces at the end of a line, a no-break space (even a line of nothing else), and a link's address as you wrote it, including one with a pair of brackets in it, such as a Wikipedia address. Code indented by four spaces or a tab shows as code and keeps its indent, except right after a list, where an indented line is more of the list's last item. In a folder you follow, a note keeps its line endings and the line break after its last line. A heading that closes with its own hashes (## Title ##) drops them. And a fenced code block indented under a list item stays inside that item instead of spilling its backticks into the text.

What is still saved MojoPad's way. Some ways of writing come back in MojoPad's own form even on a line you haven't changed. Among them: bullets made with * or + are saved with -, a list numbered 1. throughout is numbered in order, __bold__ and _italic_ are saved with asterisks, a nested list is indented by two spaces, several blank lines in a row become one, a link's title in quotes is saved as words, a line break inside a bullet is saved on the bullet's own line, and a character MojoPad could read as formatting, or a backslash that isn't one of Markdown's escapes, is saved with a backslash in front of it.

A line across the page

A line drawn across the page sets one part of it off from the next: the end of one meeting's notes and the start of the next, a change of subject in a long page, the line above your signature. When you present a page, a line starts a new slide without a new heading.

Type it. In the Formatted view of a Markdown page, and on a page of formatted text, type three dashes --- on a line of their own and press Return. The dashes become a line across the page, and you go on writing on the line under it. Three asterisks *** or three underscores ___ do the same. If your Mac's smart dashes turn the dashes into a long dash as you type them, Return still makes the line. Changed your mind? One ⌘Z gives back the characters. Nothing happens until you press Return, so dashes you type at the start of a sentence stay dashes. Dashes in a bullet, a quote, a callout, a toggle, a heading, a table or a code block are left as you typed them too, and so are dashes on a line you started with ⇧Return: that line belongs to the paragraph above it.

Or choose it. Type / and divider, then Return. The menu finds it by the other names it goes by as well: horizontal rule, horizontal line, rule, separator and ---. The + button on the format bar has Divider under Blocks, and the command palette has Insert Divider. The line goes between your paragraphs: above the line you are on if you are at its start or it is empty, below it if you are at its end, and in the middle of a line it splits the line in two. Wherever it goes, you go on writing on an empty line under it.

In the Markdown view (⌃⌘P), a line across the page is written the way every Markdown app writes one: three or more dashes, asterisks or underscores on a line of their own, with an empty line above. Spaces between them are fine (- - -, * * *). If your Mac's smart dashes turn the three dashes into a long dash as you type them, Return writes three dashes back in its place wherever three dashes make a line across the page, or start or end the properties at the very top of the page (below). Anywhere else, a long dash on a line of its own stays as you typed it, as it does under a line of words with no empty line above. A bullet's long dash is read as a bullet of dashes, and where that makes a line across the page, under a line of words too, Return writes dashes in its place. A page you import, or a note in a folder you follow, shows each of these as a line across the page, and saving the page keeps each one written with the same characters, indented as it was. Nested under another bullet, - - - or * * * is a bullet of its own, because a line across the page can't stand inside a list, and so is one with bullets nested under it. For the same reason, a line of underscores indented under a bullet's words is more of those words; --- or *** there ends the list with a line across the page.

Leave the empty line above it. In the Markdown view, directly under a line of words, with no empty line between them, three dashes mean something else: other Markdown apps read them as underlining the words above, which makes those words a heading. MojoPad shows dashes there as part of the paragraph and keeps them just as you typed them, so the page still reads that way everywhere else. Put an empty line above the dashes for a line across the page, or use asterisks or underscores, which work directly under a line of words too. In the Formatted view you don't have to think about this: three dashes and Return on a line of their own make the line, and the page saves it with the empty lines it needs. A line you started with ⇧Return isn't a line of its own: dashes there stay part of the paragraph above, as they do in the Markdown view.

At the very top of a page. In the Markdown view, or in a file from another app, three dashes on the very first line, then, straight under them, lines like title: My trip, then three more dashes, are the page's properties, written the way notes apps write properties into a file, not lines across the page with words between. The Formatted view shows them as one block at the top of the page, and File ▸ Import makes them the page's properties. A line of words reads as a property there too when its first colon ends the line or has a space after it, however many words come before the colon: Note: see below does, and so does The meeting moved to Tuesday: see below. To keep such a line as words, start the page with three asterisks instead of the first three dashes, or put something above them. When you start a page that way in the Formatted view, with lines across the page you made there, MojoPad saves it so it opens again as you wrote it.

Dashes you typed before. In earlier versions, three dashes in the Formatted view stayed dashes, and a Markdown page saved them with a backslash in front so they would stay that way. Click at the end of them and press Return, and they become a line across the page.

Some other lines saved by an earlier version now show as a line across the page, because that is how other Markdown apps read them: a bullet whose words were two or more dashes and nothing else (a bullet of one dash is still a bullet, and so is one nested under another bullet or with bullets nested under it), a line of only dashes with spaces between them, and asterisks or underscores that arrived on a line of their own under words you pasted or imported. The file keeps each one exactly as it was written. If you meant the characters, delete the line across the page and type them again. If Return turns them into a line, one ⌘Z gives them back, and the page saves them so they stay characters.

A note that is not part of the writing

%% like this %% is a comment — a note kept beside your writing that stays out of word counts, search, exports and anything the AI reads. Type it just like that — it becomes a comment as you close the second pair — or use / ▸ Comment. Written this way in a file, or in another editor, MojoPad reads it as a comment when the page opens. See Comments.

Code blocks and syntax highlighting

Give a fenced code block a language and it's color-highlighted — in the editor, in exports, and on published sites:

```js
const x = 42
```

JavaScript/TypeScript, Python, C-family, JSON, CSS, HTML/XML, shell, SQL, and YAML are recognized; an unknown or missing language renders as plain, un-highlighted code.

In the Formatted view, type / and code block to start one. It goes between your paragraphs, the way a divider does: below the line you are on if you are at its end, above it if you are at its start, and in the middle of a line it splits the line in two.

Footnotes

Reference a note with [^1] in your text and define it on its own line with [^1]: the note (the id can be a word, like [^why]). References are numbered by first appearance and collected, with back-links, at the foot of the page.

Writing isn't linear, and the numbering keeps up. Insert a citation between two earlier ones — with /footnote or the format bar's + — and every reference renumbers to reading order on the spot: the new one takes its rightful place and the later ones step up, with the notes list reordering to match. Your ids never change, so [^why] stays [^why] in the source.

Cite the same source twice. When the page already has footnotes, /footnote first asks: start a new note (just press Return — it's preselected, so the quick path is exactly two keys) or reuse any existing source, listed by number with a snippet of its text. A reused source shows the same number at both places and keeps a single definition at the foot of the page.

Callouts

Start a blockquote with [!type] to turn it into a colored callout box — the same syntax Obsidian and Joplin use:

> [!warning] Heads up
> This part is important.

Types include note, info, tip, success, question, warning, danger, quote, and example — each with its own color and icon. Add an optional title after the type, or leave it off for a default label.

Callouts only appear rendered in the Formatted view. In the raw Markdown source they stay as plain > [!note] … text — that's expected. Flip to the rendered view with the Markdown ⇄ Formatted pill in the page's top-right corner (or ⌃⌘P); the same toggle covers every Markdown page. Callouts also render in HTML / PDF / web exports and on published static sites.

Embedding pages

![[Page Name]] on its own line embeds another page inline. Because it works the same on rich text pages, the full details now live under Pages and Linking ▸ Embedding pages.

Toggles and bookmarks

A toggle is a collapsible section: type / ▸ Toggle, name it, and tuck content inside — click the ▸ to fold or unfold. In Markdown it's > [!toggle] Title (a trailing -, as in [!toggle]-, starts it collapsed).

A bookmark turns a URL into a rich card with its title, description, and thumbnail: type / ▸ Bookmark and paste a link. Click the card to open it in your browser.

A video embeds a playable player right in the page: type / ▸ YouTube video and paste a YouTube link (watch, youtu.be, Shorts, or Live), a Vimeo link, or a TED talk URL — TED plays through TED's own player. The video plays inline, on your Mac, without leaving your notes. Hover the player and use the − / + buttons beneath it to resize — the size you pick sticks. In Markdown the player is just the bare video URL on its own line, so the source stays plain text.

Pasting Markdown anywhere

Paste text that looks like Markdown into a rich text page and MojoPad renders it as formatted content automatically (toggle in Settings ▸ Editing; ⌘Z undoes to plain text). Paste an article into an empty Markdown page and it switches straight to the formatted view.

One honest limitation

Markdown can't express everything the format bar can. Font colors, sizes, faces, and underline survive on screen but degrade to plain text when a formatted-view edit is saved back to source. If a page needs full styling freedom, convert it to rich text.