VS Code extension · inline markdown · WYSIWYG · GFM · LaTeX · Mermaid · task lists
JavaScript
146
84 commits
updated Sep 13, 2026
Typora-like Markdown editing in VS Code. Write in a clean, WYSIWYG-style view with context-aware syntax shadowing, GFM pipe tables, inline Mermaid and LaTeX math rendering, hover previews, and clickable task lists.
Your files stay 100% standard Markdown. This extension uses editor decorations — it never rewrites your document.
| syntax for editing.```mermaid diagrams, $...$, $$...$$, and ```math blocks directly in the editor.
Tip: move the cursor onto a line to see faint “ghost” markers; click/select to reveal raw Markdown for precise edits.
.md) to activate the extension. (It also supports editors with markdown/md/mdx language IDs once active.)mdInline.toggleDecorations) or use the editor title bar eye icon.Requirement: VS Code 1.88+ (Cursor is supported too).
If decorations aren’t showing, see the FAQ.
VS Code’s Markdown preview is great for reading. Markdown Inline Editor is for writing: it keeps you in the editor, reduces syntax noise, and reveals raw Markdown only where you’re editing.
mdInline.toggleDecorations): Enable/disable inline Markdown rendering.The extension uses an intelligent 3-state syntax shadowing system that adapts syntax visibility based on your editing context:
**bold** appears as bold with no visible markers**bold** shows faint ** markers**bold** reveals the full **bold** syntaxSpecial behavior for structural markers:
# markers and remove styling when cursor is on the heading lineConfigure ghost opacity: markdownInlineEditor.decorations.ghostFaintOpacity (default: 0.3)
Configure emoji shortcodes: markdownInlineEditor.emojis.enabled (default: true)
The extension supports the following Markdown (and common GitHub-flavored) features with inline rendering and syntax hiding. Formatting appears inline while syntax markers stay hidden—click any text to reveal and edit raw Markdown.
**text**) • Details*text*) • Details***text***) • Details~~text~~) • Details`code`) • Details# H1 through ###### H6) • Details[text](url)) • Details@user, @org/team, #123, @owner/repo#456) • Details • Issue #25<https://…> / user@example.com) • Details • Issue #24) • Details> quote) • Details---, ***, ___) • Details|---| separator row, :--- / :---: / ---: column alignment) • Details```lang) • Details:smile:) • Details • Issue #30```mermaid) • Details • Issue #26$...$, $$...$$, ```math) • Details • Issue #6Everything works out of the box. If you want to tune the experience, open Settings and search for “Markdown Inline Editor” (all keys start with markdownInlineEditor.).
decorations.ghostFaintOpacity, default 0.3)
defaultBehaviors.diffView.applyDecorations, default false)
false to review raw Markdown in diffs; set true if you want the same inline rendering in diffs too.links.singleClickOpen, default false)
mentions.enabled, default true; mentions.linksEnabled, unset = infer from git remote)
@user / #123; optional clickable targets when forge context is available. See Mentions & references.emojis.enabled, default true)
:shortcode: text.colors.heading1 … colors.checkbox, 15 options including inlineCodeBackground)
#e06c75) for headings, links, list markers, inline code, inline code background, emphasis, blockquote, image, horizontal rule, checkbox. Unset or invalid values use theme-derived defaults (for headings, unset keeps the editor’s markdown heading syntax colors rather than forcing a single foreground). See Customizable Syntax Colors.settings.json{
"markdownInlineEditor.decorations.ghostFaintOpacity": 0.25,
"markdownInlineEditor.defaultBehaviors.diffView.applyDecorations": false,
"markdownInlineEditor.links.singleClickOpen": false,
"markdownInlineEditor.emojis.enabled": true
}
Want to help? Pick an item below and open a PR (or add feedback in the linked issue/spec).
git clone https://github.com/SeardnaSchmid/markdown-inline-editor-vscode.git
cd markdown-inline-editor-vscode
npm install
npm run compile
npm test
Press F5 to launch the Extension Development Host and test your changes.
Key Technologies:
Runtime Requirements:
Production Dependencies:
remark-gfm, remark-parse, unified, unist-util-visitDevelopment Dependencies:
src/
├── extension.ts # Extension entry point and activation
├── config.ts # Centralized configuration access
├── diff-context.ts # Unified diff view detection and policy
├── link-targets.ts # Unified link/image URL resolution
├── markdown-parse-cache.ts # Shared parsing and caching service
├── parser.ts # Markdown AST parsing (remark-based)
├── parser-remark.ts # Remark dependency helper
├── decorations.ts # VS Code decoration type definitions
├── decorator.ts # Decoration orchestration
├── decorator/
│ ├── decoration-type-registry.ts # Decoration type lifecycle
│ ├── visibility-model.ts # 3-state filtering logic
│ ├── checkbox-toggle.ts # Checkbox click handling
│ └── decoration-categories.ts # Decoration type categorization
├── link-provider.ts # Clickable link provider
├── link-hover-provider.ts # Hover provider for link URLs
├── image-hover-provider.ts # Hover provider for image previews
├── link-click-handler.ts # Single-click navigation handler
├── position-mapping.ts # Position mapping utilities (CRLF handling)
└── */__tests__/ # Comprehensive test suites
├── parser/__tests__/ # Parser tests
├── markdown-parse-cache/__tests__/ # Parse cache tests
├── diff-context/__tests__/ # Diff context tests
├── link-targets/__tests__/ # Link target resolution tests
├── link-provider/__tests__/ # Link provider tests
├── image-hover-provider/__tests__/ # Image hover tests
├── link-hover-provider/__tests__/ # Link hover tests
└── link-click-handler/__tests__/ # Click handler tests
How it works:
parser.ts) – Uses remark to parse Markdown into an AST and extract scopesmarkdown-parse-cache.ts) – Single parse cache instance shared across all componentsdecorator.ts) – Orchestrates decoration management with 3-state syntax shadowingThe project maintains comprehensive test coverage with 560+ passing tests across 40+ test suites:
parser/__tests__/) – Core markdown parsing logic (including GFM tables, math, Mermaid regions)markdown-parse-cache/__tests__/) – Shared caching and LRU evictiondiff-context/__tests__/) – Diff view detection and policylink-targets/__tests__/) – Link/image URL resolutionimage-hover-provider/__tests__/) – Image preview hover functionalitylink-hover-provider/__tests__/) – Link URL hover functionalitylink-click-handler/__tests__/) – Single-click navigation behaviorlink-provider/__tests__/) – Clickable link provider functionalityRun tests with npm test or npm run test:watch for development.
npm install
| Command | Description |
|---|---|
npm run compile | Compile TypeScript to JavaScript |
npm run bundle | Bundle with esbuild |
npm test | Run all tests |
npm run test:watch | Run tests in watch mode |
npm run test:coverage | Generate coverage report |
npm run lint | Run ESLint |
npm run validate | Run docs lint + tests + build |
npm run package | Create .vsix package |
npm run clean | Clean build artifacts |
npm run build | Full build (compile + bundle + package) |
npm run release | Automated release workflow |
Option 1: VS Code Launch Configuration
Create .vscode/launch.json with the extension host configuration, then press F5 to launch the Extension Development Host.
Option 2: Manual Build & Test
npm run compile
npm run package
code --install-extension dist/extension.vsix
Contributions are welcome! This project follows Conventional Commits and maintains high code quality standards.
git checkout -b feat/my-feature
# Make changes, write tests
npm test && npm run lint
git commit -m "feat(parser): add support for definition lists"
CONTRIBUTING.md for detailed workflow<type>(<scope>): <description>
feat, fix, docs, style, refactor, perf, test, choreSee CONTRIBUTING.md for full contribution guidelines and AGENTS.md for agent roles and architecture details.
If you encounter an issue not covered in the FAQ, please open an issue with:
For common issues and solutions, see the FAQ.
MIT License – See LICENSE.txt
Special thanks to these projects, which inspired or enabled this extension:
JavaScript
78.7%
TypeScript
20.1%
Shell
1.2%
VS Code extension · inline markdown · WYSIWYG · GFM · LaTeX · Mermaid · task lists
JavaScript
146
84 commits
updated Sep 13, 2026
Typora-like Markdown editing in VS Code. Write in a clean, WYSIWYG-style view with context-aware syntax shadowing, GFM pipe tables, inline Mermaid and LaTeX math rendering, hover previews, and clickable task lists.
Your files stay 100% standard Markdown. This extension uses editor decorations — it never rewrites your document.
| syntax for editing.```mermaid diagrams, $...$, $$...$$, and ```math blocks directly in the editor.
Tip: move the cursor onto a line to see faint “ghost” markers; click/select to reveal raw Markdown for precise edits.
.md) to activate the extension. (It also supports editors with markdown/md/mdx language IDs once active.)mdInline.toggleDecorations) or use the editor title bar eye icon.Requirement: VS Code 1.88+ (Cursor is supported too).
If decorations aren’t showing, see the FAQ.
VS Code’s Markdown preview is great for reading. Markdown Inline Editor is for writing: it keeps you in the editor, reduces syntax noise, and reveals raw Markdown only where you’re editing.
mdInline.toggleDecorations): Enable/disable inline Markdown rendering.The extension uses an intelligent 3-state syntax shadowing system that adapts syntax visibility based on your editing context:
**bold** appears as bold with no visible markers**bold** shows faint ** markers**bold** reveals the full **bold** syntaxSpecial behavior for structural markers:
# markers and remove styling when cursor is on the heading lineConfigure ghost opacity: markdownInlineEditor.decorations.ghostFaintOpacity (default: 0.3)
Configure emoji shortcodes: markdownInlineEditor.emojis.enabled (default: true)
The extension supports the following Markdown (and common GitHub-flavored) features with inline rendering and syntax hiding. Formatting appears inline while syntax markers stay hidden—click any text to reveal and edit raw Markdown.
**text**) • Details*text*) • Details***text***) • Details~~text~~) • Details`code`) • Details# H1 through ###### H6) • Details[text](url)) • Details@user, @org/team, #123, @owner/repo#456) • Details • Issue #25<https://…> / user@example.com) • Details • Issue #24) • Details> quote) • Details---, ***, ___) • Details|---| separator row, :--- / :---: / ---: column alignment) • Details```lang) • Details:smile:) • Details • Issue #30```mermaid) • Details • Issue #26$...$, $$...$$, ```math) • Details • Issue #6Everything works out of the box. If you want to tune the experience, open Settings and search for “Markdown Inline Editor” (all keys start with markdownInlineEditor.).
decorations.ghostFaintOpacity, default 0.3)
defaultBehaviors.diffView.applyDecorations, default false)
false to review raw Markdown in diffs; set true if you want the same inline rendering in diffs too.links.singleClickOpen, default false)
mentions.enabled, default true; mentions.linksEnabled, unset = infer from git remote)
@user / #123; optional clickable targets when forge context is available. See Mentions & references.emojis.enabled, default true)
:shortcode: text.colors.heading1 … colors.checkbox, 15 options including inlineCodeBackground)
#e06c75) for headings, links, list markers, inline code, inline code background, emphasis, blockquote, image, horizontal rule, checkbox. Unset or invalid values use theme-derived defaults (for headings, unset keeps the editor’s markdown heading syntax colors rather than forcing a single foreground). See Customizable Syntax Colors.settings.json{
"markdownInlineEditor.decorations.ghostFaintOpacity": 0.25,
"markdownInlineEditor.defaultBehaviors.diffView.applyDecorations": false,
"markdownInlineEditor.links.singleClickOpen": false,
"markdownInlineEditor.emojis.enabled": true
}
Want to help? Pick an item below and open a PR (or add feedback in the linked issue/spec).
git clone https://github.com/SeardnaSchmid/markdown-inline-editor-vscode.git
cd markdown-inline-editor-vscode
npm install
npm run compile
npm test
Press F5 to launch the Extension Development Host and test your changes.
Key Technologies:
Runtime Requirements:
Production Dependencies:
remark-gfm, remark-parse, unified, unist-util-visitDevelopment Dependencies:
src/
├── extension.ts # Extension entry point and activation
├── config.ts # Centralized configuration access
├── diff-context.ts # Unified diff view detection and policy
├── link-targets.ts # Unified link/image URL resolution
├── markdown-parse-cache.ts # Shared parsing and caching service
├── parser.ts # Markdown AST parsing (remark-based)
├── parser-remark.ts # Remark dependency helper
├── decorations.ts # VS Code decoration type definitions
├── decorator.ts # Decoration orchestration
├── decorator/
│ ├── decoration-type-registry.ts # Decoration type lifecycle
│ ├── visibility-model.ts # 3-state filtering logic
│ ├── checkbox-toggle.ts # Checkbox click handling
│ └── decoration-categories.ts # Decoration type categorization
├── link-provider.ts # Clickable link provider
├── link-hover-provider.ts # Hover provider for link URLs
├── image-hover-provider.ts # Hover provider for image previews
├── link-click-handler.ts # Single-click navigation handler
├── position-mapping.ts # Position mapping utilities (CRLF handling)
└── */__tests__/ # Comprehensive test suites
├── parser/__tests__/ # Parser tests
├── markdown-parse-cache/__tests__/ # Parse cache tests
├── diff-context/__tests__/ # Diff context tests
├── link-targets/__tests__/ # Link target resolution tests
├── link-provider/__tests__/ # Link provider tests
├── image-hover-provider/__tests__/ # Image hover tests
├── link-hover-provider/__tests__/ # Link hover tests
└── link-click-handler/__tests__/ # Click handler tests
How it works:
parser.ts) – Uses remark to parse Markdown into an AST and extract scopesmarkdown-parse-cache.ts) – Single parse cache instance shared across all componentsdecorator.ts) – Orchestrates decoration management with 3-state syntax shadowingThe project maintains comprehensive test coverage with 560+ passing tests across 40+ test suites:
parser/__tests__/) – Core markdown parsing logic (including GFM tables, math, Mermaid regions)markdown-parse-cache/__tests__/) – Shared caching and LRU evictiondiff-context/__tests__/) – Diff view detection and policylink-targets/__tests__/) – Link/image URL resolutionimage-hover-provider/__tests__/) – Image preview hover functionalitylink-hover-provider/__tests__/) – Link URL hover functionalitylink-click-handler/__tests__/) – Single-click navigation behaviorlink-provider/__tests__/) – Clickable link provider functionalityRun tests with npm test or npm run test:watch for development.
npm install
| Command | Description |
|---|---|
npm run compile | Compile TypeScript to JavaScript |
npm run bundle | Bundle with esbuild |
npm test | Run all tests |
npm run test:watch | Run tests in watch mode |
npm run test:coverage | Generate coverage report |
npm run lint | Run ESLint |
npm run validate | Run docs lint + tests + build |
npm run package | Create .vsix package |
npm run clean | Clean build artifacts |
npm run build | Full build (compile + bundle + package) |
npm run release | Automated release workflow |
Option 1: VS Code Launch Configuration
Create .vscode/launch.json with the extension host configuration, then press F5 to launch the Extension Development Host.
Option 2: Manual Build & Test
npm run compile
npm run package
code --install-extension dist/extension.vsix
Contributions are welcome! This project follows Conventional Commits and maintains high code quality standards.
git checkout -b feat/my-feature
# Make changes, write tests
npm test && npm run lint
git commit -m "feat(parser): add support for definition lists"
CONTRIBUTING.md for detailed workflow<type>(<scope>): <description>
feat, fix, docs, style, refactor, perf, test, choreSee CONTRIBUTING.md for full contribution guidelines and AGENTS.md for agent roles and architecture details.
If you encounter an issue not covered in the FAQ, please open an issue with:
For common issues and solutions, see the FAQ.
MIT License – See LICENSE.txt
Special thanks to these projects, which inspired or enabled this extension:
JavaScript
78.7%
TypeScript
20.1%
Shell
1.2%