Skip to content
| Marketplace
Sign in
Visual Studio Code>Other>Olive — Visual Markdown EditorNew to Visual Studio Code? Get it now.
Olive — Visual Markdown Editor

Olive — Visual Markdown Editor

Mohashi

|
50 installs
| (0) | Free
Write Markdown without seeing the syntax. Formatting stays visible even under the cursor, while files remain plain Markdown.
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

Olive — Visual Markdown Editor

Write Markdown without seeing the syntax.

Formatting stays visible even under the cursor, while files remain plain Markdown.

A learning log opened as Markdown source in VS Code, switched to Olive, and edited visually: bold text, inline code and inline math form from typed Markdown; the formula updates while its LaTeX is edited in a popup; a Mermaid diagram renders; a table column moves from its right-click menu; and the file returns to plain Markdown source

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.

    Markdown source with heading and bold markers, opened in Olive where both are edited without revealing those markers, then returned to the updated plain Markdown source

  • 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
  • on recent VS Code versions, click the editor type dropdown at the right end of the breadcrumb bar and pick Olive, or
  • run Open in Olive from the Command Palette while a Markdown file is active.

On recent VS Code versions this works for a new unsaved buffer set to Markdown as well, not only for files already on disk.

The same file opened in VS Code's text editor, switched to Olive with the title bar icon, edited, then switched back to the text editor with the edit present as plain Markdown

To make Olive the default for every .md file, add this to your settings:

"workbench.editorAssociations": {
  "*.md": "olive.markdown"
}

On recent VS Code versions the editor type dropdown offers Set Default for '*.md', which writes the same setting for you.

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.

To keep the two views of a file side by side, open it in Olive and in the text editor in split editors and click the sync icon on the editor title bar (or run Olive: Toggle Scroll Sync with Text Editor). Scrolling either one then scrolls the other to the same place. The setting olive.syncScrollWithTextEditor remembers the choice.

The slash menu

Type / to change the current block or to insert a new one. The menu has two sections (three inside a callout), and each command always does the same thing:

  • Turn into — headings, lists, task lists, quotes, code blocks, math blocks, callouts, toggles and Mermaid diagrams convert the block you are typing in, keeping its text. On an empty line this simply creates the block; inside a list it converts just the item you are on.
  • Insert — tables, images and dividers are always added as new blocks. An empty line is used as the spot to insert; from a line with content, the new block lands right below it.
  • Callout — inside a callout, Edit callout… (/edit, /title, /fold) opens the callout's title, type and fold settings with the title field ready for typing, so you can name a callout without reaching for the mouse.

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
Mermaid diagram /mermaid or /diagram
Table /table
Image /image (also /picture, /photo, /figure)
Divider /divider (also /hr, /rule, /separator)

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, or type /image and pick a file, and Olive stores it in an assets/ folder beside the note, linking it with a relative ![](https://github.com/mohashii/olive-feedback/raw/HEAD/assets/…) 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. Click or right-click a handle to transform, cut, copy, duplicate, delete or edit the block's Markdown source. To open the same actions without a mouse, press Ctrl+Enter (⌃↩ on macOS); Shift+F10 and the Context Menu key work as aliases.

    Selecting a list and a callout with a drag from the left gutter, then dragging both blocks to a new position as one range

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

  • Page links — type [[ to search the Markdown files in your workspace and link one. Olive writes an ordinary Markdown link, [name](https://github.com/mohashii/olive-feedback/blob/HEAD/relative/path.md), so the file stays portable and readable in any other editor. Obsidian-style [[name]], [[name|label]] and [[name#heading]] already in a file are recognised and can be clicked to navigate. Olive never creates new ones — anything you insert is an ordinary Markdown link — and editing a document leaves the wikilinks in it exactly as they were written. Renaming a note is the one thing that changes them, described next.

  • Links follow renames — rename or move a .md file in the Explorer and Olive rewrites the links that pointed at it, along with the links inside it that pointed elsewhere, in both ordinary Markdown links and Obsidian-style wikilinks. Inside a [[…]] only the note name is rewritten, so an alias you wrote after | and a #heading fragment are left alone. A Markdown link whose text is just the old file name is relabelled with the new one. When notes other than the one you renamed had to be changed, Olive tells you how many.

  • Footnotes — [^label] references stay compact in the sentence, and [^label]: … definitions appear as quieter, fully editable note blocks. Type [^label]: at the start of a line to create a definition; typing the next character after a reference turns the reference into its formatted form, and if that label has no definition yet Olive adds an empty one at the end of the document for you. Labels cannot contain spaces or tabs — that is a GitHub Markdown rule, not an Olive one, so [^my note] stays plain text.

  • 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. Right-click a heading to promote or demote its section, move the section above or below its neighbour, or select the whole section.

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

    Click an inline formula, edit its LaTeX, and watch the typeset result follow along while the document never shows dollar-sign source

  • Mermaid — create a diagram with /mermaid. Click the rendered diagram to edit its source with a live preview.

    Clicking a Mermaid diagram to edit its source, with the rendered diagram updating as a new node is typed

Exporting

Olive exports the page you are looking at, from the command palette: Olive: Export as HTML and Olive: Export as PDF. Both write what is currently on screen, and neither touches the .md file.

  • HTML is a single self-contained file. Images are embedded, KaTeX fonts and CSS travel with it, and Mermaid diagrams are baked in as static SVG. There are no CDN links, so it opens with no network and the math still renders. Images referenced by an https:// URL are the one exception: Olive will not fetch them, and marks them in the output instead. A Save Markdown button at the end of the page lets the reader download the note's Markdown source, embedded in the file itself so it works offline; set olive.export.includeSource to archive to hand out a .zip with the images as well, or to none to leave the button out. Front matter is never included.

  • PDF is rendered by a Chromium-based browser. Olive looks for one you already have — Chrome, Chromium, Edge, Brave, Arc, Vivaldi or Opera, including their Beta, Dev and Canary channels — and uses it without asking. If it cannot find one, it offers to download a print-only engine (about 100 MB) once; you can decline and use Export as HTML plus your browser's own print-to-PDF instead. To point Olive at a browser it did not find, set olive.pdf.executablePath to the executable — on macOS that is the file inside the app bundle, such as /Applications/Arc.app/Contents/MacOS/Arc, not the .app. Olive: Update PDF engine re-downloads the pinned engine version and removes the old one.

Theming

Olive follows your VS Code color theme, light or dark, with no setup.

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
Open block actions ⌃↩ Ctrl+Enter
Find ⌘F Ctrl+F
Find next ⌘G F3
Find previous ⇧⌘G Shift+F3
Replace ⌥⌘F Ctrl+H

Block formatting

Action macOS Windows / Linux
Paragraph ⌘⌥0 Ctrl+Alt+0
Heading 1–5 ⌘⌥1–⌘⌥5 Ctrl+Alt+1–Ctrl+Alt+5
Numbered list ⇧⌘7 Ctrl+Shift+7
Bulleted list ⇧⌘8 Ctrl+Shift+8
Quote ⇧⌘B Ctrl+Shift+B
Code block ⌘⌥C Ctrl+Alt+C
Move block up ⌥↑ Alt+↑
Move block down ⌥↓ Alt+↓

When a block selection is active, the block-movement commands move all selected blocks. Shift+Enter inserts a hard line break. Table rows and columns are moved from the table's right-click menu (Move row up, Move column left, and so on) or the slash menu — they have no keyboard shortcut.

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.

Markdown autoformat

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.

Bold, inline code and LaTeX math forming the moment each Markdown pattern is completed, then a selected word turned into inline math from the selection toolbar

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
[^label] followed by the next character footnote reference

*, ~~ 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. Footnote labels may not contain spaces or tabs, and [^label] inside inline code 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] , > [!warning] , … at the start of a quote Callout (GitHub-style alert / Obsidian callout)
```lang or ~~~lang Code block
---, *** , ___ Horizontal rule
$$ in an empty paragraph Math block
[^label]: Footnote definition

--- converts on its own; *** and ___ need the trailing space.

A callout accepts any type name, in the case you type it ([!WARNING] stays [!WARNING] in the file), and an unknown type gets a plain callout. Add + or - after ] for a foldable callout; > [!tip]- starts collapsed and opens its title field right away, since the title is all a collapsed callout shows. Text typed after the space goes into the callout's body — use Edit callout… from the slash menu to give it a title.

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.

Raw HTML blocks, and anything else Olive has no rich-text model for, are shown as a preserved block: a sanitized rendering of what the Markdown means, with the source underneath. Click it to edit that source in place. You can see both what the block will look like and exactly what Olive is not editing for you.

Inline HTML inside a paragraph is edited as ordinary rich text rather than as a source block. Open/close pairs such as <b>x</b> are shown formatted, <a href> is a working link, and tags with no content such as <br> and <img> are shown as single objects you can select and delete. Whatever Olive cannot present is left as literal text. Either way the original spelling is written back unchanged.

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 collects no telemetry. It reads and writes only the Markdown files and images in your workspace, through VS Code's own document APIs.

Olive makes one network request, and only if you ask for it: downloading the PDF print engine, which happens after you accept the prompt described under Exporting. Nothing else in Olive goes online — exports embed everything locally rather than linking to a CDN.

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.

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
  • Your Privacy Choices
  • Consumer Health Privacy
© 2026 Microsoft