![remark][logo] # Plugins **remark** is a tool that transforms markdown with plugins. See [the monorepo readme][remark] for info on what the remark ecosystem is. This page lists existing plugins. ## Contents * [List of plugins](#list-of-plugins) * [List of presets](#list-of-presets) * [List of utilities](#list-of-utilities) * [Use plugins](#use-plugins) * [Create plugins](#create-plugins) ## List of plugins See [`awesome-remark`][awesome-remark] for the most awesome projects in the ecosystem. More plugins can be found on GitHub tagged with the [`remark-plugin` topic][topic]. > πŸ‘‰ **Note**: some plugins don’t work with recent versions of remark due to > changes in its underlying parser (micromark). > Plugins that are up to date or unaffected are marked with `🟒` while plugins > that are **currently broken** are marked with `⚠️`. > πŸ’‘ **Tip**: remark plugins work with markdown and **rehype** plugins work with > HTML. > See rehype’s [List of plugins][rehype-plugins] for more plugins. The list of plugins: * [`remark-a11y-emoji` ](https://github.com/florianeckerstorfer/remark-a11y-emoji) β€” accessible emoji * ⚠️ [`remark-abbr` ](https://github.com/zestedesavoir/zmarkdown/tree/HEAD/packages/remark-abbr#readme) β€” new syntax for abbreviations (new node type, rehype compatible) * ⚠️ [`remark-admonitions` ](https://github.com/elviswolcott/remark-admonitions) β€” new syntax for admonitions (πŸ‘‰ **note**: [`remark-directive`][d] is similar and up to date) * ⚠️ [`remark-align` ](https://github.com/zestedesavoir/zmarkdown/tree/HEAD/packages/remark-align#readme) β€” new syntax to align text or blocks (new node types, rehype compatible) * ⚠️ [`remark-attr` ](https://github.com/arobase-che/remark-attr) β€” new syntax to add attributes to markdown * 🟒 [`remark-behead` ](https://github.com/mrzmmr/remark-behead) β€” increase or decrease heading depth * 🟒 [`remark-breaks` ](https://github.com/remarkjs/remark-breaks) – hard breaks w/o needing spaces (like on issues) * 🟒 [`remark-capitalize` ](https://github.com/zeit/remark-capitalize) – transform all titles w/ [`title.sh` ](https://github.com/zeit/title) * 🟒 [`remark-capitalize-headings` ](https://github.com/Xunnamius/unified-utils/blob/main/packages/remark-capitalize-headings) – selectively capitalize headings (πŸ‘‰ **note**: alternative to [`remark-capitalize` ](https://github.com/zeit/remark-capitalize)) * 🟒 [`remark-cite` ](https://github.com/benrbray/remark-cite) – new syntax for Pandoc-style citations * 🟒 [`remark-cloudinary-docusaurus` ](https://github.com/johnnyreilly/remark-cloudinary-docusaurus) – allows Docusaurus to use Cloudinary to serve optimised images * 🟒 [`remark-code-blocks` ](https://github.com/mrzmmr/remark-code-blocks) β€” select and store code blocks * 🟒 [`remark-code-extra` ](https://github.com/samlanning/remark-code-extra) β€” add to or transform the HTML output of code blocks (rehype compatible) * 🟒 [`remark-code-frontmatter` ](https://github.com/samlanning/remark-code-frontmatter) β€” extract frontmatter from code blocks * 🟒 [`remark-code-import` ](https://github.com/kevin940726/remark-code-import) β€” populate code blocks from files * 🟒 [`remark-code-screenshot` ](https://github.com/Swizec/remark-code-screenshot) – turn code blocks into `carbon.now.sh` screenshots * 🟒 [`remark-code-title` ](https://github.com/kevinzunigacuellar/remark-code-title) β€” add titles to code blocks * 🟒 [`remark-codesandbox` ](https://github.com/kevin940726/remark-codesandbox) – create CodeSandbox from code blocks * 🟒 [`remark-collapse` ](https://github.com/Rokt33r/remark-collapse) β€” make a section collapsible * 🟒 [`remark-comment-config` ](https://github.com/remarkjs/remark-comment-config) β€” configure remark w/ comments * ⚠️ [`remark-comments` ](https://github.com/zestedesavoir/zmarkdown/tree/HEAD/packages/remark-comments#readme) β€” new syntax to ignore things * ⚠️ [`remark-container` ](https://github.com/zWingz/remark-container) β€” new syntax for containers (πŸ‘‰ **note**: [`remark-directive`][d] is similar and up to date) * ⚠️ [`remark-containers` ](https://github.com/Nevenall/remark-containers) β€” new syntax for containers (πŸ‘‰ **note**: [`remark-directive`][d] is similar and up to date) * 🟒 [`remark-contributors` ](https://github.com/remarkjs/remark-contributors) β€” add a table of contributors * 🟒 [`remark-copy-linked-files` ](https://github.com/sergioramos/remark-copy-linked-files) β€” find and copy files linked files to a destination directory * ⚠️ [`remark-custom-blocks` ](https://github.com/zestedesavoir/zmarkdown/tree/HEAD/packages/remark-custom-blocks#readme) β€” new syntax for custom blocks (new node types, rehype compatible) (πŸ‘‰ **note**: [`remark-directive`][d] is similar and up to date) * 🟒 [`remark-definition-list` ](https://github.com/wataru-chocola/remark-definition-list) β€” support definition lists * 🟒 [`remark-defsplit` ](https://github.com/remarkjs/remark-defsplit) β€” change links and images to references w/ separate definitions * ⚠️ [`remark-disable-tokenizers` ](https://github.com/zestedesavoir/zmarkdown/tree/HEAD/packages/remark-disable-tokenizers#readme) β€” turn some or all remark’s tokenizers on or off * 🟒 [`remark-directive` ](https://github.com/remarkjs/remark-directive) β€” new syntax for directives (generic extensions) * 🟒 [`remark-directive-rehype` ](https://github.com/IGassmann/remark-directive-rehype) β€” turn [directives][d] into HTML custom elements (rehype compatible) * 🟒 [`remark-docx` ](https://github.com/inokawa/remark-docx) β€” compile markdown to docx * 🟒 [`remark-dropcap` ](https://github.com/brev/remark-dropcap) β€” fancy and accessible drop caps * 🟒 [`remark-embed-images` ](https://github.com/remarkjs/remark-embed-images) β€” embed local images as base64-encoded data URIs * 🟒 [`remark-emoji` ](https://github.com/rhysd/remark-emoji) β€” transform Gemoji short-codes to emoji * 🟒 [`remark-extended-table` ](https://github.com/wataru-chocola/remark-extended-table) β€” extended table syntax allowing colspan / rowspan * 🟒 [`remark-extract-frontmatter` ](https://github.com/mrzmmr/remark-extract-frontmatter) β€” store front matter in vfiles * 🟒 [`remark-first-heading` ](https://github.com/laat/remark-first-heading) β€” change the first heading in a document * 🟒 [`remark-fix-guillemets` ](https://github.com/zestedesavoir/zmarkdown/tree/HEAD/packages/remark-fix-guillemets#readme) β€” support ASCII guillements (`<<`, `>>`) mapping them to HTML * 🟒 [`remark-flexible-code-titles` ](https://github.com/ipikuka/remark-flexible-code-titles) β€” add titles or/and containers for code blocks with customizable attributes * 🟒 [`remark-flexible-containers` ](https://github.com/ipikuka/remark-flexible-containers) β€” add custom/flexible containers with customizable properties * 🟒 [`remark-flexible-markers` ](https://github.com/ipikuka/remark-flexible-markers) β€” add custom/flexible mark element with customizable properties * 🟒 [`remark-flexible-paragraphs` ](https://github.com/ipikuka/remark-flexible-paragraphs) β€” add custom/flexible paragraphs with customizable properties * 🟒 [`remark-frontmatter` ](https://github.com/remarkjs/remark-frontmatter) – support frontmatter (yaml, toml, and more) * 🟒 [`remark-gemoji` ](https://github.com/remarkjs/remark-gemoji) β€” better support for Gemoji shortcodes * ⚠️ [`remark-generic-extensions` ](https://github.com/medfreeman/remark-generic-extensions) β€” new syntax for the CommonMark generic directive extension (πŸ‘‰ **note**: [`remark-directive`][d] is similar and up to date) * 🟒 [`remark-gfm` ](https://github.com/remarkjs/remark-gfm) β€” support GFM (autolink literals, footnotes, strikethrough, tables, tasklists) * 🟒 [`remark-git-contributors` ](https://github.com/remarkjs/remark-git-contributors) β€” add a table of contributors based on Git history, options, and more * 🟒 [`remark-github` ](https://github.com/remarkjs/remark-github) β€” autolink references to commits, issues, pull-requests, and users * 🟒 [`remark-github-admonitions-to-directives` ](https://github.com/incentro-dc/remark-github-admonitions-to-directives) β€” convert GitHub’s blockquote-based admonitions syntax to directives syntax * 🟒 [`remark-github-beta-blockquote-admonitions` ](https://github.com/myl7/remark-github-beta-blockquote-admonitions) β€” [GitHub beta blockquote-based admonitions](https://github.com/github/feedback/discussions/16925) * 🟒 [`remark-github-blockquote-alert` ](https://github.com/jaywcjlove/remark-github-blockquote-alert) β€” remark plugin to add support for [GitHub Alert](https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax#alerts) * ⚠️ [`remark-grid-tables` ](https://github.com/zestedesavoir/zmarkdown/tree/HEAD/packages/remark-grid-tables#readme) β€” new syntax to describe tables (rehype compatible) * 🟒 [`remark-heading-id` ](https://github.com/imcuttle/remark-heading-id) β€” custom heading id support `{#custom-id}` * 🟒 [`remark-heading-gap` ](https://github.com/remarkjs/remark-heading-gap) β€” serialize w/ more blank lines between headings * 🟒 [`@vcarl/remark-headings` ](https://github.com/vcarl/remark-headings) β€” extract a list of headings as data * 🟒 [`remark-hexo` ](https://github.com/bennycode/remark-hexo) β€” renders [Hexo tags](https://hexo.io/docs/tag-plugins) * 🟒 [`remark-highlight.js` ](https://github.com/remarkjs/remark-highlight.js) β€” highlight code blocks w/ [`highlight.js`](https://github.com/isagalaev/highlight.js) (rehype compatible) * 🟒 [`remark-hint` ](https://github.com/sergioramos/remark-hint) β€” add hints/tips/warnings to markdown * 🟒 [`remark-html` ](https://github.com/remarkjs/remark-html) β€” serialize markdown as HTML * ⚠️ [`remark-iframes` ](https://github.com/zestedesavoir/zmarkdown/tree/HEAD/packages/remark-iframes#readme) β€” new syntax to create iframes (new node type, rehype compatible) * 🟒 [`remark-ignore` ](https://github.com/Xunnamius/unified-utils/blob/main/packages/remark-ignore) β€” use comments to exclude nodes from transformation * 🟒 [`remark-images` ](https://github.com/remarkjs/remark-images) β€” add an improved image syntax * 🟒 [`remark-img-links` ](https://github.com/Pondorasti/remark-img-links) β€” prefix relative image paths with an absolute URL * 🟒 [`remark-inline-links` ](https://github.com/remarkjs/remark-inline-links) β€” change references and definitions to links and images * 🟒 [`remark-ins` ](https://github.com/ipikuka/remark-ins) β€” add ins element for inserted texts opposite to deleted texts * 🟒 [`remark-join-cjk-lines` ](https://github.com/purefun/remark-join-cjk-lines) β€” remove extra space between CJK Characters. * ⚠️ [`remark-kbd` ](https://github.com/zestedesavoir/zmarkdown/tree/HEAD/packages/remark-kbd#readme) β€” new syntax for keyboard keys (new node type, rehype compatible) * ⚠️ [`remark-kbd-plus` ](https://github.com/twardoch/remark-kbd-plus) β€” new syntax for keyboard keys w/ plusses (new node type, rehype compatible) * 🟒 [`remark-license` ](https://github.com/remarkjs/remark-license) β€” add a license section * 🟒 [`remark-link-rewrite` ](https://github.com/rjanjic/remark-link-rewrite) β€” customize link URLs dynamically * 🟒 [`remark-linkify-regex` ](https://gitlab.com/staltz/remark-linkify-regex) β€” change text matching a regex to links * 🟒 [`remark-lint` ](https://github.com/remarkjs/remark-lint) β€” check markdown code style * 🟒 [`remark-macro` ](https://github.com/dimerapp/remark-macro) β€” support for block macros (new node types, rehype compatible) * 🟒 [`remark-man` ](https://github.com/remarkjs/remark-man) β€” serialize markdown as man pages (roff) * 🟒 [`remark-math` ](https://github.com/remarkjs/remark-math) β€” new syntax for math (new node types, rehype compatible) * 🟒 [`remark-mdx` ](https://github.com/mdx-js/mdx/tree/main/packages/remark-mdx) β€” support MDX (JSX, expressions, ESM) * 🟒 [`remark-mentions` ](https://github.com/FinnRG/remark-mentions) β€” replace @ mentions with links * 🟒 [`remark-mermaidjs` ](https://github.com/remcohaszing/remark-mermaidjs) β€” transform mermaid code blocks into inline SVGs * 🟒 [`remark-message-control` ](https://github.com/remarkjs/remark-message-control) β€” turn some or all messages on or off * 🟒 [`remark-normalize-headings` ](https://github.com/remarkjs/remark-normalize-headings) β€” make sure at most one top-level heading exists * 🟒 [`remark-numbered-footnote-labels` ](https://github.com/jackfletch/remark-numbered-footnote-labels) β€” label footnotes w/ numbers * 🟒 [`@agentofuser/remark-oembed` ](https://github.com/agentofuser/remark-oembed) β€” transform URLs for youtube, twitter, etc. embeds * 🟒 [`remark-oembed` ](https://github.com/sergioramos/remark-oembed) β€” transform URLs surrounded by newlines into *asynchronously* loading embeds * 🟒 [`remark-package-dependencies` ](https://github.com/unlight/remark-package-dependencies) β€” inject your dependencies * ⚠️ [`remark-parse-yaml` ](https://github.com/landakram/remark-parse-yaml) β€” parse YAML nodes and expose their value as `parsedValue` * 🟒 [`remark-pdf` ](https://github.com/inokawa/remark-pdf) β€” compile markdown to pdf * ⚠️ [`remark-ping` ](https://github.com/zestedesavoir/zmarkdown/tree/HEAD/packages/remark-ping#readme) β€” new syntax for mentions w/ configurable existence check (new node type, rehype compatible) * 🟒 [`remark-prettier` ](https://github.com/remcohaszing/remark-prettier) β€” check and format markdown using Prettier * 🟒 [`remark-prism` ](https://github.com/sergioramos/remark-prism) β€” highlight code blocks w/ [Prism](https://prismjs.com/) (supporting most Prism plugins) * ⚠️ [`remark-redact` ](https://github.com/seafoam6/remark-redact) β€” new syntax to conceal text matching a regex * 🟒 [`remark-redactable` ](https://github.com/code-dot-org/remark-redactable) β€” write plugins to redact content from a markdown document, then restore it later * 🟒 [`remark-reference-links` ](https://github.com/remarkjs/remark-reference-links) β€” transform links and images into references and definitions * 🟒 [`remark-rehype` ](https://github.com/remarkjs/remark-rehype) β€” transform to [rehype](https://github.com/rehypejs/rehype) * 🟒 [`remark-relative-links` ](https://github.com/zslabs/remark-relative-links) β€” change absolute URLs to relative ones * 🟒 [`remark-remove-comments` ](https://github.com/alvinometric/remark-remove-comments) β€” remove HTML comments from the processed output * 🟒 [`remark-remove-unused-definitions` ](https://github.com/Xunnamius/unified-utils/blob/main/packages/remark-remove-unused-definitions) β€” remove unused reference-style link definitions * 🟒 [`remark-remove-url-trailing-slash` ](https://github.com/Xunnamius/unified-utils/blob/main/packages/remark-remove-url-trailing-slash) β€” remove trailing slashes from the ends of all URL paths * 🟒 [`remark-renumber-references` ](https://github.com/Xunnamius/unified-utils/blob/main/packages/remark-renumber-references) β€” renumber numeric reference-style link ids contiguously starting from 1 * 🟒 [`remark-retext` ](https://github.com/remarkjs/remark-retext) β€” transform to [retext](https://github.com/retextjs/retext) * 🟒 [`remark-ruby` ](https://github.com/laysent/remark-ruby) β€” new syntax for ruby (furigana) * 🟒 [`remark-sectionize` ](https://github.com/jake-low/remark-sectionize) β€” wrap headings and subsequent content in section tags (new node type, rehype compatible) * ⚠️ [`remark-shortcodes` ](https://github.com/djm/remark-shortcodes) β€” new syntax for Wordpress- and Hugo-like shortcodes (new node type) (πŸ‘‰ **note**: [`remark-directive`][d] is similar and up to date) * 🟒 [`remark-simple-plantuml` ](https://github.com/akebifiky/remark-simple-plantuml) β€” turn PlantUML code blocks to images * 🟒 [`remark-slate` ](https://github.com/hanford/remark-slate) β€” compile markdown to [Slate nodes](https://docs.slatejs.org/concepts/02-nodes) * 🟒 [`remark-slate-transformer` ](https://github.com/inokawa/remark-slate-transformer) β€” compile markdown to [Slate nodes](https://docs.slatejs.org/concepts/02-nodes) and Slate nodes to markdown * 🟒 [`remark-smartypants` ](https://github.com/silvenon/remark-smartypants) β€” SmartyPants * 🟒 [`remark-smcat` ](https://github.com/shedali/remark-smcat) β€” state machine cat * 🟒 [`remark-sort-definitions` ](https://github.com/Xunnamius/unified-utils/blob/main/packages/remark-sort-definitions) β€” reorder reference-style link definitions * 🟒 [`remark-sources` ](https://github.com/unlight/remark-sources) β€” insert source code * 🟒 [`remark-strip-badges` ](https://github.com/remarkjs/remark-strip-badges) β€” remove badges (such as `shields.io`) * 🟒 [`remark-strip-html` ](https://github.com/craftzdog/remark-strip-html) β€” remove HTML * 🟒 [`remark-squeeze-paragraphs` ](https://github.com/remarkjs/remark-squeeze-paragraphs) β€” remove empty paragraphs * ⚠️ [`remark-sub-super` ](https://github.com/zestedesavoir/zmarkdown/tree/HEAD/packages/remark-sub-super) β€” new syntax for super- and subscript (new node types, rehype compatible) * ⚠️ [`remark-terms` ](https://github.com/Nevenall/remark-terms) β€” new customizable syntax for special terms and phrases * 🟒 [`remark-textr` ](https://github.com/remarkjs/remark-textr) β€” transform text w/ [`Textr` ](https://github.com/shuvalov-anton/textr) * 🟒 [`remark-tight-comments` ](https://github.com/Xunnamius/unified-utils/blob/main/packages/remark-tight-comments) β€” selectively remove newlines around comments * 🟒 [`remark-title` ](https://github.com/RichardLitt/remark-title) β€” check and add the document title * 🟒 [`remark-toc` ](https://github.com/remarkjs/remark-toc) β€” add a table of contents * 🟒 [`remark-torchlight` ](https://github.com/torchlight-api/remark-torchlight) β€” syntax highlighting powered by [torchlight.dev](https://torchlight.dev) * 🟒 [`remark-tree-sitter` ](https://github.com/samlanning/remark-tree-sitter) β€” highlight code blocks in markdown files using [Tree-sitter](https://tree-sitter.github.io/tree-sitter/) (rehype compatible) * 🟒 [`remark-truncate-links` ](https://github.com/GaiAma/Coding4GaiAma/tree/HEAD/packages/remark-truncate-links) β€” truncate/shorten urls not manually named * 🟒 [`remark-twemoji` ](https://github.com/madiodio/remark-twemoji) β€” turn emoji into [Twemoji](https://github.com/twitter/twemoji) * 🟒 [`remark-typedoc-symbol-links` ](https://github.com/kamranayub/remark-typedoc-symbol-links) β€” turn Typedoc symbol link expressions into markdown links * 🟒 [`remark-typescript` ](https://github.com/trevorblades/remark-typescript) β€” turn TypeScript code to JavaScript * 🟒 [`remark-typograf` ](https://github.com/mavrin/remark-typograf) β€” transform text w/ [Typograf](https://github.com/typograf) * 🟒 [`remark-unlink` ](https://github.com/remarkjs/remark-unlink) β€” remove all links, references, and definitions * 🟒 [`remark-unwrap-images` ](https://github.com/remarkjs/remark-unwrap-images) β€” remove the wrapping paragraph for images * 🟒 [`remark-usage` ](https://github.com/remarkjs/remark-usage) β€” add a usage example * 🟒 [`remark-utf8` ](https://github.com/Swizec/remark-utf8) β€” turn bolds, italics, and code into UTF 8 special characters * 🟒 [`remark-validate-links` ](https://github.com/remarkjs/remark-validate-links) β€” check links to headings and files * ⚠️ [`remark-variables` ](https://github.com/mrzmmr/remark-variables) β€” new syntax for variables * 🟒 [`remark-vdom` ](https://github.com/remarkjs/remark-vdom) β€” compile markdown to [VDOM](https://github.com/Matt-Esch/virtual-dom/) * 🟒 [`remark-wiki-link` ](https://github.com/landakram/remark-wiki-link) β€” new syntax for wiki links (rehype compatible) * 🟒 [`remark-yaml-config` ](https://github.com/remarkjs/remark-yaml-config) β€” configure remark w/ YAML ## List of presets Use [GitHub search][github-preset-search] to find available and often inspirational presets. ## List of utilities See [mdast][mdast-util] for a list of utilities that work with the syntax tree. See [unist][unist-util] for other utilities which work with **mdast** and other syntax trees too. Finally, see [vfile][vfile-util] for a list of utilities working with virtual files. ## Use plugins To use a plugin programmatically, call the [`use()`][unified-use] function. To use plugin with `remark-cli`, pass a [`--use` flag][unified-args-use] or specify it in a [configuration file][config-file-use]. ## Create plugins To create a plugin, first read up on the [concept of plugins][unified-plugins]. Then, read the [guide on β€œCreating a plugin with unified”][guide]. Finally, take one of existing plugins, which looks similar to what you’re about to make, and work from there. If you get stuck, [discussions][] is a good place to get help. You should pick a name prefixed by `'remark-'` (such as `remark-lint`). **Do not use the `remark-` prefix** if the thing you create doesn’t work with `remark().use()`: it isn’t a β€œplugin” and will confuse users. If it works with mdast, use `'mdast-util-'`, if it works with any unist tree, use `unist-util-`, and if it works with virtual files, use `vfile-`. Use default exports to expose plugins from your packages, add `remark-plugin` keywords in `package.json`, add a `remark-plugin` topic to your repo on GitHub, and create a pull request to add the plugin here on this page! [logo]: https://raw.githubusercontent.com/remarkjs/remark/1f338e72/logo.svg?sanitize=true [d]: https://github.com/remarkjs/remark-directive [remark]: https://github.com/remarkjs/remark [awesome-remark]: https://github.com/remarkjs/awesome-remark [topic]: https://github.com/topics/remark-plugin [github-preset-search]: https://github.com/topics/remark-preset [mdast-util]: https://github.com/syntax-tree/mdast#list-of-utilities [unist-util]: https://github.com/syntax-tree/unist#unist-utilities [vfile-util]: https://github.com/vfile/vfile#utilities [unified-use]: https://github.com/unifiedjs/unified#processoruseplugin-options [unified-args-use]: https://github.com/unifiedjs/unified-args#--use-plugin [config-file-use]: https://github.com/unifiedjs/unified-engine/blob/HEAD/doc/configure.md#plugins [unified-plugins]: https://github.com/unifiedjs/unified#plugin [guide]: https://unifiedjs.com/learn/guide/create-a-plugin/ [discussions]: https://github.com/remarkjs/remark/discussions [rehype-plugins]: https://github.com/rehypejs/rehype/blob/main/doc/plugins.md#list-of-plugins