Skip to content

writing markdown

spacecake supports GitHub-flavoured markdown with a visual editor that renders content as you type.

type / anywhere in the editor to open the command menu. start typing to filter:

commandshortcutdescription
/codeinsert a code block
/frontmatterinsert YAML frontmatter
/textconvert block to paragraph
/heading 1#insert an h1 heading
/heading 2##insert an h2 heading
/heading 3###insert an h3 heading

press Esc to dismiss the menu.

write code blocks with syntax highlighting:

def hello_world():
print("hello from spacecake!")

the language is auto-detected from the file type, or you can select it manually from the language picker in the code block header.

create execution plans with checklists:

- [ ] set up database migrations
- [ ] implement user authentication
- [ ] write integration tests

embed Mermaid diagrams for system architecture:

graph TD
A[User Input] --> B[Validate]
B --> C[Process]
C --> D[Output]

insert a YAML frontmatter block at the top of your document with the /frontmatter slash command. frontmatter has two view modes:

  • table mode — displays key-value pairs in a two-column table for quick scanning
  • code mode — full YAML editing with syntax highlighting and line numbers

click the toggle button in the frontmatter header to switch between modes. if the frontmatter already exists, the slash command scrolls to it instead of creating a duplicate.

markdown images render inline in rich mode. click an image to select it, then drag any of the resize handles to change its dimensions.

images support alt text, captions, and custom width/height attributes.

link between files in your workspace using [[wikilinks]]:

[[meeting notes]]
[[meeting notes|yesterday's meeting]]
[[design doc#architecture]]
[[spec#^block-id]]
  • [[file name]] — links to a file by name. resolution is case-insensitive and you can omit the .md extension.
  • [[file name|alias]] — displays the alias text instead of the file name.
  • [[file name#heading]] — links to a specific heading within the target file.
  • [[#heading]] — links to a heading in the current file.
  • [[file name#^block-id]] — links to a specific block by its ID.

wikilinks resolve using shortest-path matching: if multiple files share the same name, the one closest to the workspace root wins. broken links are shown with a wavy underline.

click a wikilink to navigate to the target file. use ⌘P to search for files by name if you’re not sure of the exact target.

you can also link between workspace files using standard markdown link syntax:

[meeting notes](./meeting-notes.md)
[architecture section](./design-doc.md#architecture)
[see below](#next-steps)
  • [text](path/to/file.md) — navigates to the file, resolved relative to the current file’s directory.
  • [text](file.md#heading) — navigates to a specific heading within the target file.
  • [text](#heading) — scrolls to a heading in the current file.

links with a protocol (https://, mailto:, etc.) open externally as usual. links without a protocol are treated as internal file paths.

wikilinks vs markdown links: wikilinks ([[file]]) match by filename using shortest-path resolution. markdown links ([text](path)) resolve relative to the current file. use whichever style you prefer.

highlight notes, tips, warnings, and other admonitions with callouts:

> [!tip]
> type `/callout` to insert one, or see [callouts](/callouts) for the full list of types.

13 canonical types are supported (note, tip, warning, danger, etc.) plus aliases, custom titles, foldable variants, and nested bodies. see callouts for details.

toggle between rich mode (WYSIWYG) and source mode using the view toggle button in the toolbar.

  • rich mode: renders markdown visually as you type — headings, code blocks, diagrams, and checklists are all interactive
  • source mode: shows the raw markdown with a live preview, useful for precise editing or debugging formatting issues

README files (README.md) use GitHub-style line break handling. single newlines within a paragraph are visually collapsed — consecutive lines flow together as one paragraph, matching how GitHub renders them. double newlines still create paragraph breaks as usual.

this means what you see in spacecake matches what collaborators see on GitHub, without altering the underlying file.