A browser extension (Chrome, Firefox) that fixes GitHub's rendering of Markdown files written with Comark syntax — components, attributes, spans and bindings.
GitHub's Markdown renderer does not understand the Comark extensions: block components leak as plain paragraphs or broken headings, attribute groups show up as stray braces, and mdc code fences stay unhighlighted. With this extension installed, those files become readable again.
Install directly from the Chrome Web Store.
Alternatively, grab the latest pack from the releases page:
- Download
comark-for-github.zipand unzip it. - Open
chrome://extensionsand turn on Developer mode (top right). - Click Load unpacked and select the unzipped folder.
Firefox listing is pending approval on addons.mozilla.org. In the meantime, load it manually:
- Download
comark-for-github.xpi. - Open
about:debugging#/runtime/this-firefox. - Click Load Temporary Add-on and select the
.xpifile.
Firefox removes temporary add-ons on restart. A signed listing on addons.mozilla.org will remove this limitation.
Then open a Comark-flavored Markdown file on GitHub, for example docs/content/index.md from the comark repo.
On github.com, for READMEs and .md blob previews:
- Detects Comark syntax. The extension fetches the raw Markdown source (from
raw.githubusercontent.com) and scans it. Plain Markdown files are left untouched. - Re-renders the whole document with Comark. The raw source is parsed by the real Comark parser and rendered to HTML with
@comark/html, replacing GitHub's lossy rendering. - Shows Comark syntax as highlighted code:
- Block components (
::card…::) become syntax-highlighted code blocks of their original source, YAML props included, with a component-name badge. - Inline components (
:badge[New]{color="blue"}), attribute groups (**bold**{.accent}), spans ([text]{.mark}) and bindings ({{ user.name }}) become highlighted inline code.
- Block components (
- Highlights code fences with rangi using GitHub's own color palette — including
```mdc/```comarkfences, which GitHub leaves plain. On non-Comark pages,mdcfences are highlighted in place without touching anything else.
Everything follows GitHub's light, dark and auto color modes.
- The rendered HTML goes through Comark's
securityplugin:<script>/<iframe>-style tags are dropped, event-handler attributes are stripped, andjavascript:URLs are not rendered. - If rendering fails for any reason, GitHub's original rendering is kept.
- A popup toggle enables/disables the extension (toggling reloads open GitHub tabs).
- On re-rendered pages, GitHub extras are lost: octicon hover anchors on headings, the camo image proxy, and copy buttons on code fences. Relative links and images are rewritten so they keep working.
- Bare domains (
example.comwithout a protocol) are not auto-linked, since linkify would mangle{{ dotted.path }}bindings.
pnpm i
pnpm devThen load the extension/ folder in your browser (Chrome: chrome://extensions → Developer mode → Load unpacked).
For Firefox:
pnpm dev-firefox
pnpm start:firefoxGood pages to test on:
- https://github.com/comarkdown/comark/blob/main/docs/content/index.md
- https://github.com/comarkdown/comark/blob/main/docs/content/2.syntax/2.components.md
pnpm test # vitest — scanner, renderer and DOM transform (real GitHub fixtures)
pnpm typecheck
pnpm lintpnpm buildThen pack the files under extension/: pnpm pack:zip, pnpm pack:crx or pnpm pack:xpi.
src/contentScripts/comark/- the core logicgithub.ts- page detection, raw source fetching, soft-navigation handlingscanner.ts- regex scan of the raw source (Comark syntax gate + inline fragments)renderer.ts- full Comark HTML rendering with component/span handlerstransform.ts- DOM replacement, inline code wrapping, fence highlightinghighlight.ts- rangi wrappers with the Comark grammarstyle.css- injected styles, mapped to GitHub's CSS variables
src/popup/- the enable/disable popupsrc/manifest.ts- the extension manifest (generated toextension/manifest.json)src/tests/- vitest specs with real GitHub HTML fixtures
Every push to main runs the checks, builds the extension and publishes a GitHub release with comark-for-github.zip (Chrome build) and comark-for-github.xpi (Firefox build) — see .github/workflows/release.yml. The tag comes from the package.json version; pushes without a version bump get a -build.N suffix.
No .crx is published: Chrome on Windows/macOS rejects crx files that do not come from the Chrome Web Store (CRX_REQUIRED_PROOF_MISSING). Install from the Chrome Web Store or use the zip with Load unpacked.
comarkand@comark/htmlare currently installed from pkg.pr.new builds of comarkdown/comark#352. Switch to the npm releases once the PR ships.
Built on vitesse-webext by Anthony Fu — Vite-powered WebExtension starter with Vue 3, HMR and dynamic manifest.
MIT — Comark team and contributors.
