Markdown Editor
Markdown files (.md, .markdown, .mdx) open in a live rendered editor. You edit the formatted output directly: headings, bold text, lists, tables, math, and code blocks render as you type.
Formatting toolbar
The toolbar provides one-click formatting:
- Bold, italic
- Headings (H1, H2)
- Bulleted and numbered lists
- Blockquote
- Code block
- Horizontal rule
- Link, image, and table insertion
Guided insertion
Links
- Select the text you want to linkify.
- Click the Link button in the toolbar.
- Enter a Destination in the Insert Link dialog.
- Click Apply.
The destination can be any of these:
| Destination | Example |
|---|---|
| Section in the same document | #installation |
| Relative file, optionally with a section | ../guide.md#setup |
| File URL | file:///Users/you/notes/todo.md |
| Web address | https://example.com |
mailto:team@example.com |
If no text is selected, CrispyVibe shows Select text first to add a link. and inserts nothing. The dialog rejects other schemes with Only section, file, HTTP(S), and email links are supported.
To change an existing link, right-click it and choose Edit. The Edit Link dialog opens with the current destination prefilled; click Update to save it.
Images
- Click the Image button in the toolbar.
- Search for an image in the picker (case-insensitive filtering).
- Select an image. The path resolves automatically.
- Edit the alt text.
Tables
- Click the Table button in the toolbar.
- Specify the number of rows and columns (default 3 × 3).
- A markdown table with header and separator rows is inserted.
Tables stay GFM pipe tables after rich-mode edits, including column alignment and escaped pipe characters.
Following links in rich mode
Section links navigate within the current file. Links to other Markdown files open in the same view, while web and email links follow the choices below:
| Link type | Click | Right-click |
|---|---|---|
#section | Scrolls to the matching heading and briefly highlights it | Go to Section, Edit, Copy, Remove |
Relative or file: link | Opens the file in the same CrispyVibe view. A #section in the link scrolls to that heading after the file renders. | Open in Crispy, Default App, Edit, Copy, Remove |
| HTTP(S) link | Follows your Markdown Web Links setting (see below) | Open in Crispy, Default Browser, Edit, Copy, Remove |
mailto: link | Shows the link actions | Open in Default App, Edit, Copy, Remove |
Section jumps and linked Markdown files share one navigation history. Press Cmd+[ to go back and Cmd+] to go forward. Compact Spotlight and Terminal Board views also show Back and Forward buttons.
When you open another Markdown file through a link, the view’s title, folder, comments, and file actions follow the file currently shown. Pinning the view or moving it between the board, Spotlight, and Detailed view keeps the current file and its navigation history.
- Remove unwraps the link and keeps its visible text.
- Copy copies the link destination.
- Option-click a link to place the caret inside it and edit its text without following it.
- Focus a link with the keyboard and press
Returnto activate it. PressEscapeto dismiss the link actions.
Section links match headings by a generated slug: lowercase text, punctuation removed, spaces turned into hyphens. Duplicate headings get -2, -3, and so on. The second ## Setup is #setup-2.
Markdown Web Links
Choose where web links open in App Settings > Appearance > Markdown Web Links > Open web links in:
| Option | Behavior on click |
|---|---|
| Ask Each Time (default) | Shows a small popover with Open in Crispy, Default Browser, Edit, Copy, and Remove |
| Crispy Browser | Opens the page in CrispyVibe’s built-in browser |
| Default Browser | Opens the page in your macOS default browser |
Right-clicking a web link always shows every action, whatever you choose here. Section links and linked project files always stay inside CrispyVibe.
Blocked links
CrispyVibe refuses to follow these and shows a short explanation instead:
javascript:,data:, and other unsupported schemes- Protocol-relative links (
//example.com) - Web addresses with embedded credentials (
https://user:pass@example.com) - Malformed or empty destinations
- Local files that do not exist, or that point to a folder
In Source mode, links are plain Markdown text and are never activated.
Math
Inline and display math render with KaTeX in rich mode:
$E = mc^2$— inline math$$ … $$— display math\\(2 + 3 = 5\\)— inline math that starts with a number
Currency stays as editable text. $8M, $2M, $16,655.00, and amounts with K, M, B, or T suffixes are never treated as math, so a sentence with two prices does not turn into an equation. CrispyVibe saves math in the delimiter form you wrote, so a \\(…\\) equation is still math when you reopen the file.
Rich/Source toggle
Switch between the rendered view and raw markdown source at any time. Content state is preserved across toggles, so edits in one view appear in the other.
Line numbers
In Source mode, line numbers appear in the gutter with the default Source Editors setting.
To see line numbers in rich mode too, set App Settings > Appearance > Line Numbers > Show line numbers to All Text Views. Each paragraph, heading, list, table, and block then shows the source line it starts on. Wrapped lines do not get extra numbers. The labels follow your theme and text size, sit beside the comment indicators, and are never saved into the file.
Text size
Use Cmd++ or Cmd+= to enlarge, Cmd+- to shrink, and Cmd+0 to reset to 13 pt. The same commands are in the View menu. Rendered text, tables, code, diagrams, math, and dialogs resize in place. The document does not reload, and your caret, scroll position, and unsaved edits stay put.
Find and replace
Press Cmd+F to open find and replace. Features:
- Case-insensitive matching
- Match highlighting
- Navigate between matches
- Replace next or replace all
Code blocks
Fenced code blocks render with language-aware syntax highlighting based on the language identifier.
Autosave
Changes save automatically after approximately 450ms of inactivity. An unsaved indicator appears in the tab while changes are pending. Typing, table edits, and comment updates keep your caret where it is while CrispyVibe syncs the document in the background.
Troubleshooting
| Problem | Solution |
|---|---|
| Link does nothing | Select text first. CrispyVibe needs a selection to create a link. |
| Section not found appears | Check that the fragment matches the heading slug: lowercase, punctuation removed, spaces as hyphens, with -2, -3 for duplicates. |
| A web link is blocked | Use a complete http:// or https:// address without a username or password in it. |
| A relative file link does not open | Check that the target exists relative to the current Markdown file and is a file, not a folder. |
| Clicking a link follows it when you want to edit it | Option-click the link, or right-click it and choose Edit. |
| An equation that starts with a number shows as plain text | Write it as \\(…\\) in Source mode instead of $…$. |
| A table was saved as HTML | Update CrispyVibe and reopen the file. Rich-mode table edits are saved as GFM tables. |
| The editor shows blank content | The editor recovers automatically. If it stays blank, close and reopen the file. |