Olive - Markdown Editor
Edit Markdown as it looks when rendered — you work with the formatted document, and Olive writes the syntax for you. Headings, code, tables and LaTeX math all stay editable in place. The file on disk stays plain Markdown.

Why Olive
- You never see the markup —
##, ** and $ stay hidden even on the line you are typing, so lines keep their height and nothing below them shifts while you write.
- Formatting keeps up with your typing — Markdown you type turns into formatting as you finish it, the shortcuts you already know still work, and selecting text brings up buttons for bold, italic, code, links and inline math.
- Edit documents visually — tables, callouts, toggles, images and Mermaid diagrams are shown the way they will look, and you edit them from there.
- Work with blocks — every block has a handle on its left: drag it to move the block, select several blocks to move them together, or right-click the handle to turn the block into something else, duplicate it, copy it, or edit its Markdown source.
- Your Markdown comes back unchanged — Olive keeps your original text for everything you did not touch, so opening a file and saving it without editing gives back a byte-for-byte identical file, and the parts you never visited are never re-wrapped or tidied up. You can switch the whole file back to VS Code's text editor at any time.
- Math keeps looking like math while you edit it — click a formula, or move the cursor into it and press Enter, and you edit its LaTeX while the formula on the page updates as you type. The document itself never falls back to
$…$. Other WYSIWYG Markdown editors show the raw Markdown of whichever block you are on — Microsoft's Markdown Editor (Experimental) among them — and cannot do this.
- Formatting works in Japanese and other CJK text — patterns such as
**bold** and $math$ turn into formatting right after a Japanese, Chinese or Korean character with no space in between, and nothing converts while your IME is still composing.
- Keep the VS Code workflow — Olive changes how the file looks while you edit it and nothing else: saving, history, Undo/Redo, Git and conflict resolution are all still VS Code's. When something outside Olive changes the file — a coding agent, a Git checkout, another editor — the open document follows along right away. No network requests, no telemetry.
Open a file in Olive
Olive does not take over .md files. VS Code's text editor stays the default, and you opt in per file. This remains true on versions that also include Microsoft's Markdown Editor (Experimental):
- Click the Olive icon on the editor title bar while a Markdown file is open, or
- Right-click a
.md file in the Explorer and choose Open in Olive, or
- Reopen Editor With… → Olive, or
- run Open in Olive from the Command Palette while a Markdown file is active.

To make Olive the default for every .md file, add this to your settings:
"workbench.editorAssociations": {
"*.md": "olive.markdown"
}
To go back to the raw text for one file, run Olive: Open as Markdown Source from the Command Palette or use the code icon on the editor title bar. Switching either way keeps unsaved changes. If the file has unsaved changes and no other tab is holding them, the editor you came from stays open beside the new one and a notification offers to close it; otherwise it closes on its own.
Insert blocks
Type / for headings, lists, task lists, quotes, code blocks, math blocks, callouts, toggles, tables and Mermaid diagrams. Search is case-insensitive and matches block names and the keywords below, with closer matches listed first; typing characters outside letters, digits, spaces and hyphens dismisses the menu.
| Block |
Primary search term |
| Text (paragraph) |
/text (also /paragraph, /plain) |
| Heading 1–5 |
/h1–/h5 (also /title, /section, /subsection, /subsubsection for H1–H4) |
| Bulleted list |
/bullet |
| Numbered list |
/numbered |
| Task list |
/todo |
| Quote |
/quote |
| Code block |
/code |
| Math block |
/math, /equation, /tex, or /latex |
| Callout |
/callout |
| Toggle |
/toggle |
| Table |
/table |
| Mermaid diagram |
/mermaid or /diagram |
Editing
Format text — select text to show controls for bold, italic, strikethrough, inline code, links and inline math.
Images — paste or drop an image into the document and Olive stores it in an assets/ folder beside the note, linking it with a relative  path. PNG, JPEG, GIF, WebP, SVG, AVIF and BMP are accepted, and images referenced by an https:// URL are shown as well. Move or rename a note and the images in its own assets/ folder move with it; links to images you keep elsewhere in the workspace are rewritten instead, so they keep pointing at the same file.
Block handles — drag to reorder a block or selected range. Right-click a handle to transform, duplicate, copy, delete or edit the block's Markdown source.

Links — links to other .md files in the workspace open in Olive, #heading fragments jump within the document, and everything else opens in your browser.
Outline — while an Olive editor is active, the Olive Outline view in the Explorer lists the document's headings; click one to jump to it.
Math — type $x$ to turn it into inline math as you write, select text and press $ to wrap it, or use ⇧⌘E. $$ on an empty line starts a block, and /math inserts one too. Everything renders with KaTeX. Click a formula — or arrow into it and press Enter — to edit its LaTeX; inline formulas re-render in place in the document as you type.

Mermaid — insert a diagram from the slash menu. Click the rendered diagram to edit its source with a live preview.

Keyboard shortcuts
Olive's named editing commands appear under Olive in VS Code's Keyboard Shortcuts editor (⌘K ⌘S on macOS, Ctrl+K Ctrl+S on Windows and Linux). You can search for, change or remove their bindings there.
| Action |
macOS |
Windows / Linux |
| Undo |
⌘Z |
Ctrl+Z |
| Redo |
⇧⌘Z or ⌘Y |
Ctrl+Shift+Z or Ctrl+Y |
| Bold |
⌘B |
Ctrl+B |
| Italic |
⌘I |
Ctrl+I |
| Strikethrough |
⇧⌘S |
Ctrl+Shift+S |
| Inline code |
⌘E |
Ctrl+E |
| Edit link |
⌘K |
Ctrl+K |
| Inline math |
⇧⌘E |
Ctrl+Shift+E |
| Paste as plain text |
⇧⌘V |
Ctrl+Shift+V |
| Find |
⌘F |
Ctrl+F |
| Find next |
⌘G |
F3 |
| Find previous |
⇧⌘G |
Shift+F3 |
| Replace |
⌥⌘F |
Ctrl+H |
| Action |
macOS |
Windows / Linux |
| Paragraph |
⌘⌥0 |
Ctrl+Alt+0 |
| Heading 1–6 |
⌘⌥1–⌘⌥6 |
Ctrl+Alt+1–Ctrl+Alt+6 |
| Numbered list |
⇧⌘7 |
Ctrl+Shift+7 |
| Bulleted list |
⇧⌘8 |
Ctrl+Shift+8 |
| Quote |
⇧⌘B |
Ctrl+Shift+B |
| Code block |
⌘⌥C |
Ctrl+Alt+C |
Some keys are part of the editing surface rather than global commands: Shift+Enter inserts a hard line break, ⌘⇧↑ / Ctrl+Shift+↑ and ⌘⇧↓ / Ctrl+Shift+↓ move the current block or the selected blocks, Option/Alt+↑ and Option/Alt+↓ move table rows, and Option/Alt+← and Option/Alt+→ move table columns.

macOS Control-key navigation
On macOS, Olive preserves the familiar Emacs-style text navigation shortcuts, including across custom editing surfaces such as math popups, tables, toggles and command menus.
| Keys |
Movement |
Ctrl+B / Ctrl+F |
One character left / right |
Ctrl+P / Ctrl+N |
One line or menu item up / down |
Ctrl+A / Ctrl+E |
Beginning / end of the line or menu |
Ctrl+G |
Cancel an open menu, popup or drag |
These Control-key bindings are macOS-only. On Windows and Linux, Olive leaves the same key combinations available to VS Code and the operating system.
Olive converts Markdown syntax into formatting as you type. Inline patterns convert as soon as you finish them; block patterns convert at the start of a line, when you type the space that follows them.

| Inline |
Result |
**bold** or __bold__ |
bold |
*italic* or _italic_ |
italic |
~~strikethrough~~ |
strikethrough |
`code` |
inline code |
$x$ |
inline math |
$$ in the middle of a line |
an empty inline formula, ready to edit |
*, ~~ and ` convert anywhere in a line, including directly after a Japanese character or any other letter. _ and __ follow CommonMark and convert only at the start of a line or after a space, so snake_case_name is left alone.
| At the start of a line |
Result |
# to ###### |
Heading 1–6 |
- , * , + |
Bulleted list |
1. |
Numbered list |
[ ] or [x] inside a list item |
Task list item |
> |
Quote |
> [!note] at the start of a quote |
Callout (GitHub-style alert) |
```lang or ~~~lang |
Code block |
---, *** , ___ |
Horizontal rule |
$$ in an empty paragraph |
Math block |
--- converts on its own; *** and ___ need the trailing space.
To keep what you typed instead, press Backspace immediately after a conversion — it puts the literal characters back.
Markdown that Olive does not understand
Olive never silently drops or rewrites content. Anything it cannot model as rich text is kept exactly as written, so the file round-trips unchanged and a file you open and save without editing is byte-identical.
Footnotes ([^1]), raw HTML blocks, paragraphs containing inline HTML and callouts nested inside other callouts are shown as an explicit source block, so you can see what Olive is not editing for you and edit it as Markdown in place. A few constructs Olive has no model for, such as :::note container directives and definition lists, are shown as ordinary paragraphs instead: they are preserved exactly as written, but Olive does not mark them as unsupported.
Not supported yet
- Untrusted workspaces and virtual workspaces — Olive is disabled in both.
- Remote / SSH / WSL / Dev Containers — untested in this release. It may work, but nothing has been verified.
Data handling
Olive makes no network requests and collects no telemetry. It reads and writes only the Markdown files and images in your workspace, through VS Code's own document APIs.
Requirements
VS Code 1.95 or later.
Feedback
Olive is an early release. Bugs, feature requests and questions go to github.com/mohashii/olive-feedback — a public issue tracker with no extension source in it. An FAQ and troubleshooting notes live there too.
Bug reports are especially useful when they include the Markdown that broke — anything that renders or saves incorrectly, or conflicts with other extensions. Please keep confidential documents out of public issues, and report security problems through private reporting rather than an issue.
License
Proprietary; see LICENSE.md. Olive is currently provided free of charge, and versions distributed free of charge remain usable free of charge. Bundled open-source components and their licenses are listed in THIRD-PARTY-NOTICES.md.