Edit Markdown in VS Code with an Obsidian-style WYSIWYG editor, right inside your editor tabs.
- Your Markdown stays yours. The raw text is the only source of truth — every construct round-trips byte-for-byte, with no hidden transforms and no lock-in. What you edit is exactly what lands on disk.
- Private by design. No telemetry, no background network requests. A default-deny content security policy keeps the editor fully local (local images only).
- A good neighbour. Quoll registers as an opt-in editor, so it never hijacks
.mdfrom your other extensions. Open it per file, or make it your default when you're ready.
Move the caret into any construct to reveal its source; move away and it re-renders. Type plain Markdown — **bold**, *italic*, `code` — and watch it render as you go. Edits sync to the document as you type; VS Code owns the file and saves as usual.
Toggle - [ ] / - [x] checkboxes directly in the rendered view — by click, or with Ctrl/Cmd+L when the caret is on the task's line. Every click is a real edit to the source.
Tables render from plain GFM pipes. Click a cell to drop into the source, edit it, and click away to re-render.
A toggle-able overlay lists the document's headings — click one to jump straight to it, or collapse a chevron to fold its sub-headings. Open it with the top-left button or Ctrl/Cmd+Alt+O.
- Familiar formatting shortcuts —
⌘Bbold,⌘Iitalic,⌘Ecode,⌘Klink,⌘⇧Xstrikethrough (Ctrl on Windows/Linux), plus a whole-document formatter. - Rich blocks, rendered in place — headings, lists, blockquotes, callouts (
[!TIP],[!NOTE], …), images, and fenced code. - Frontmatter panel — YAML frontmatter renders as a metadata block.
- Fenced-code tools — one-click copy; long blocks collapse behind a "Show more" bar.
- Image paste & drop — pasted or dropped images save under
./assets/and insert a relative link. - Switch between rich and text — flip between Quoll and the built-in text editor with
⌘⌥E(Ctrl+Alt+E), carrying your caret across. - Markdown lint & spellcheck — advisory findings as inline underlines, with an optional gutter dot, an optional Problems-panel mirror, opt-in prose-style hints, and native spellcheck.
- Tune the reading surface — font family, size, line height, and column width, from the outline sidebar's Settings popover or
settings.json. - Theme-aware — follows your light/dark/high-contrast theme.
- VS Code
1.94.0or newer. - A trusted, local workspace. Quoll writes files via
WorkspaceEditand does not support untrusted or virtual workspaces.
Install from the VS Code Marketplace or Open VSX:
- Extensions view: open the Extensions view (
Ctrl/Cmd+Shift+X), search for Quoll, and click Install. - Quick Open: press
Ctrl/Cmd+Pand runext install mtskf.quoll. - Command line:
code --install-extension mtskf.quoll.
Prefer to build from source? Clone the repo and package the .vsix yourself:
git clone https://github.com/mtskf/quoll.git
cd quoll
pnpm install
pnpm package # builds, then produces quoll-<version>.vsix
code --install-extension quoll-*.vsixReload the VS Code window after installing.
.md files keep opening in your usual editor by default. Open one in Quoll explicitly:
- Per file: right-click a Markdown file → Open With… → Markdown (Quoll).
- As the default: right-click → Open With… → Configure default editor… → pick Markdown (Quoll).
- From the palette: run Edit with Quoll (
Ctrl/Cmd+Shift+P) to open the active file in Quoll.
| Command | Title | Keybinding | Notes |
|---|---|---|---|
quoll.editWith |
Edit with Quoll | — | Opens the active file in Quoll; also the cat-icon title-bar button on a Markdown text editor. |
quoll.toggleEditor |
Quoll: Toggle Between Rich and Text Editor | ⌘⌥E / Ctrl+Alt+E |
Swaps between Quoll and the text editor, carrying your caret position across. |
quoll.reopenInTextEditor |
Quoll: Reopen in Text Editor | — | Reopens the current document in the built-in text editor; also the file-code-icon title-bar button on Quoll. |
quoll.format |
Quoll: Format Selection (bold / italic / code / strike / link) | ⌘B / ⌘I / ⌘E / ⌘⇧X / ⌘K (Ctrl on Windows/Linux) |
Wraps the selection with the chosen inline format inside Quoll. |
quoll.formatDocument |
Quoll: Format Document | — | Normalizes Markdown formatting across the whole document. |
Two more overlay buttons sit in the editor's top-right corner: toggle the document outline (Ctrl/Cmd+Alt+O) and switch to the text editor (⌘⌥E). The outline toggle and the caret live-reveal are editor-internal behaviour rather than VS Code commands, so they do not appear in the keybindings UI.
Settings UI → search "Quoll", or settings.json. The editor-surface settings are also reachable from the outline sidebar's Settings popover.
Lint & spellcheck:
quoll.lint.problems.enabled(defaulttrue) — mirror advisory lint findings into VS Code's Problems panel; the in-editor underlines stay on either way.quoll.lint.gutter.enabled(defaultfalse) — severity-coloured dot in a thin left gutter on lines with a lint finding.quoll.lint.prose.enabled(defaultfalse) — opt-in writing-style hints (passive voice, filler words, over-long sentences) as info-level squiggles.quoll.editor.spellcheck(defaulttrue) — native spellchecker on the editing surface.
Reading surface:
quoll.editor.fontFamily(defaultdefault) — inherit your VS Code font, or a curated serif / sans reading font.quoll.editor.fontSize,quoll.editor.lineHeight,quoll.editor.contentWidth— size, spacing, and reading-column width.
Quoll is early software. Be aware of the following before relying on it:
- Raw HTML is shown as inert source — displayed as-is, never rendered as live HTML, and preserved byte-for-byte on save.
- Images have partial support. Relative image paths (
./img.png) render for file-scheme documents only. Paste/drop saves a content-hashed PNG/JPEG/GIF/WebP under./assets/(10 MB cap, type sniffed host-side). Images outside the document folder (../sibling/img.png) are not loaded — the resolved path must stay inside the document's own folder (localResourceRoots) — and remote (https://…) images are blocked by the content security policy; a remote-image opt-in is tracked for a follow-up. - Markdown storage and execution security follow the policy in Security Scope.
- Edits made just before closing: if a later edit is waiting behind an in-flight save and either the save fails or cannot be confirmed, or the later edit is refused (the file is not writable) after the editor closes, Quoll opens that unsaved draft in a new untitled document. If the later edit is accepted but its write then fails or cannot be verified, Quoll shows an error instead (reopen the file to check its contents).
- Line endings: a file that mixes CRLF/LF is shown with one normalized separator (VS Code normalizes on load); opening and saving it without edits leaves the on-disk bytes unchanged.
- MDX (
.mdx) is not supported — only.mdfiles open with the rich editor. - Not implemented: slash/block-insert menu, column resizing for tables, diff/git views, and collaborative editing. Single file, single editor only.
- Visual rendering is verified by manual smoke. Automated tests cover the editing logic (round-trips, edit synchronization, message protocol, render/open security boundaries, host E2E flows); in-webview visual rendering is not asserted by CI.
Contributions are welcome. The project is a single-root pnpm package (extension host + webview bundled together via esbuild).
pnpm install # install all deps
pnpm build # full build (tsc + esbuild → dist/)
pnpm package # build + produce a .vsix via vsce
pnpm test # run the vitest unit suitePress F5 in VS Code to launch an Extension Development Host with Quoll loaded. See CONTRIBUTING.md for the full contributor guide.
Found a bug or have a feature request? Open an issue.
MIT — © 2026 Mitsuki Fukunaga and Quoll contributors.





