Olai.md
Olai.md is a Markdown-first WYSIWYG editor for VS Code, built for people who write a lot of .md files and want them to feel good to edit.
The inspiration was a simple workflow: using Markdown documents as the working surface for LLMs. Prompts, research notes, model outputs, plans, diagrams, tables, math, screenshots, and comments all fit naturally in Markdown, but plain text editing can make files hard to scan. Olai.md keeps Markdown as the saved format while giving those files a richer editing and visualization layer.
Use it when you want:
- Markdown files that remain portable and readable outside Olai.md.
- A comfortable editor for long notes, prompts, specs, and LLM working documents.
- Rich previews for Mermaid diagrams, KaTeX math, tables, tasks, images, comments, and outlines.
- A quick escape hatch back to raw Markdown source whenever exact syntax matters.
Install
Install Olai.md from the VS Code Marketplace, then open any Markdown file.
Olai.md is offered as a trial extension while Manu's Forge prepares the paid licensing flow.
For local development from this repository:
npm install
npm run build:vscode
npm run install:vscode
Reload VS Code with Developer: Reload Window, then open a .md file.
Start Writing
Olai.md registers itself as the default custom editor for Markdown files. After installation:
- Open a
.md, .markdown, or .mdown file from Explorer.
- Use
Olai.md: Open Active File in Olai.md from the Command Palette when a Markdown file is already open in another editor.
- Use
Open With... when you want VS Code's built-in Text Editor for a specific file.
- Change the default editor association from VS Code's
Open With... picker if you do not want Olai.md to open Markdown files by default.
Olai.md has two modes:
- WYSIWYG mode for day-to-day editing, scanning, and visual structure.
- Raw source mode for exact Markdown syntax edits.
Use /source, Cmd/Ctrl+Shift+M, or the right-click menu to switch modes.
What Feels Different
Olai.md treats Markdown as a working document format, not just a preview target. The editor is designed for repeated writing loops: capture context, structure it, ask an LLM to work with it, revise the result, and keep the file readable afterward.
| Feature |
How to use it |
| WYSIWYG editing |
Type directly in the document. Markdown is serialized on save. |
| Source mode |
Use /source, Cmd/Ctrl+Shift+M, or the right-click menu. |
| Links |
Select text and press Cmd/Ctrl+K, type /link, or paste a Markdown link. |
| Tables and tasks |
Type /table or /todo; table controls stay close to the content. |
| Diagrams |
Type /mermaid or paste Mermaid DSL to create visual diagrams. |
| Math |
Type $...$ for inline math or /math for a fenced math block. |
| Comments |
Use /comment or right-click Comment on selected text. |
| Images |
Paste, drop, or use /image to create file-backed image links. |
| Annotation |
Mark up images or open a whiteboard through the bundled annotator. |
| Outline |
Jump through long files from the top-right heading outline. |
Example Markdown
# LLM Working Note
Goal: turn messy research into a release plan.
- [x] Gather context
- [ ] Ask model for risks
- [ ] Review and revise
| Topic | Notes |
| --- | --- |
| Constraints | Keep Markdown portable |
| Evidence | Link source notes and screenshots |
| Output | Produce a checklist |
Inline math: $E = mc^2$
```mermaid
graph TD
Context --> Prompt --> ModelOutput --> HumanReview
```
Find And Replace
Cmd/Ctrl+F opens Find.
Cmd/Ctrl+H opens Find and Replace.
- Search is case-sensitive by default.
- The
Aa button toggles case-insensitive search.
- The
.* button toggles regular expression search.
- WYSIWYG search matches visible document text only.
- Raw source mode search matches and navigates the Markdown source textarea.
The custom context menu includes:
Copy
Cut
Paste
Annotate Image... when right-clicking an image
Insert Image...
Whiteboard...
Find
Find and Replace
Comment when selected text can be commented
Switch to Raw Source Mode or Switch to WYSIWYG Mode
Reload Document
Export PDF...
Export PDF... opens VS Code's Markdown preview/print flow. It does not directly generate a PDF file inside Olai.md.
Keyboard Shortcuts
| Shortcut |
Behavior |
Cmd/Ctrl+F |
Open Find. |
Cmd/Ctrl+H |
Open Find and Replace. |
Cmd/Ctrl+K |
Insert, update, or remove a link. |
Cmd/Ctrl+S |
Save the document. |
Cmd/Ctrl+Shift+M |
Toggle WYSIWYG/source mode. |
Esc |
Close the current floating UI. |
Arrow Up/Down in slash picker |
Move selection. |
Enter in slash picker |
Apply command. |
Slash Commands
Type / and select a command.
| Command |
Action |
/bold |
Toggle bold. |
/italic |
Toggle italic. |
/link |
Open link popover. |
/h2, /h3, /h4, /h5 |
Convert block to heading. |
/normal |
Convert block to paragraph. |
/table |
Insert a table. |
/source |
Toggle source/WYSIWYG mode. |
/comment |
Create an anchored comment. |
/divider |
Insert horizontal rule. |
/todo |
Toggle task list. |
/quote |
Toggle blockquote. |
/code |
Toggle code block. |
/$ |
Insert inline math starter. |
/math |
Insert math block starter. |
/mermaid |
Insert Mermaid block starter. |
/date, /time, /datetime |
Insert current date/time values. |
/image |
Pick an image file and insert it through the same file-backed path as paste. |
/whiteboard |
Open a blank whiteboard. |
Settings
| Setting |
Default |
Description |
olai.editor.themePreset |
vscode |
Theme preset: vscode, desk-light, or desk-dark. |
olai.editor.defaultMode |
wysiwyg |
Startup mode: wysiwyg, source, or remember-last. |
olai.editor.fontTheme |
default |
Font preset: default, editorial, modern, humanist, or typewriter. |
olai.editor.enableMermaid |
true |
Enable Mermaid command, paste conversion, and rendering. |
olai.editor.enableInlineMath |
true |
Enable inline $...$ KaTeX preview. |
olai.editor.enableOutline |
true |
Enable heading outline UI. |
olai.editor.enableContextMenu |
true |
Enable the Olai.md right-click menu. |
olai.editor.imageStorageFolder |
. |
Folder for inserted image files, relative to the Markdown file. |
olai.editor.imageFileNameMode |
content-hash |
Use content-hash or original-name filenames for saved images. |
olai.editor.promptImageAltText |
false |
Prompt for alt text when inserting images. |
olai.editor.colorMode |
plain |
Legacy alias. Use olai.editor.themePreset. |
Configure settings through VS Code Settings or settings.json:
{
"olai.editor.defaultMode": "remember-last",
"olai.editor.imageStorageFolder": "assets",
"olai.editor.imageFileNameMode": "original-name",
"olai.editor.promptImageAltText": true
}
Most settings apply when the webview reloads. Configuration changes trigger an Olai.md webview refresh for open documents.
Data Safety
- Olai.md saves Markdown.
- YAML frontmatter and Liquid tags are preserved in the VS Code host.
- Pasted, dropped, and uploaded images are saved as relative Markdown paths, not webview URIs.
- Untitled documents must be saved before Olai.md can write inserted images beside the Markdown file.
- Image storage folders must be relative to the Markdown file and cannot use absolute paths or
...
- Document edits are applied through minimal text replacements where possible.
- Olai.md does not send telemetry or make network requests from the extension.
Limitations
- The extension targets
.md, .markdown, and .mdown files.
- Programmatic Paste in the custom context menu depends on browser clipboard permission inside the VS Code webview. Keyboard paste still uses VS Code/browser defaults.
- Mermaid and KaTeX rendering depend on bundled webview assets. Disabling Mermaid also disables rendered fenced math block previews in the VS Code host; inline math has its own setting.
- File-backed image insertion requires a writable document location. It can fail in read-only or non-writable virtual workspaces.
Support
Use the Q & A section on the Olai.md Visual Studio Marketplace listing.
Include the Olai.md version, VS Code version, operating system, reproduction steps, expected behavior, actual behavior, and a small Markdown sample when possible.
License
MIT. See the LICENSE file included with the extension. Third-party components remain under their own licenses; see the included THIRD_PARTY_NOTICES.md.
Changelog
See the included CHANGELOG.md.