remark is a tool that transforms markdown with plugins. See the monorepo readme for info on what the remark ecosystem is. This page lists existing plugins.
For the most awesome projects in the ecosystem,
see remarkjs/awesome-remark
.
More plugins can be found on GitHub tagged with the
remark-plugin
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 § List of plugins in
rehypejs/rehype
for more plugins.
The list of plugins:
remark-a11y-emoji
— accessible emoji⚠️ remark-abbr
— new syntax for abbreviations (new node type, rehype compatible)⚠️ remark-admonitions
— new syntax for admonitions (👉 note:remark-directive
is similar and up to date)⚠️ remark-align
— new syntax to align text or blocks (new node types, rehype compatible)- 🟢
remark-api
— generate an API section ⚠️ remark-attr
— new syntax to add attributes to markdown- 🟢
remark-behead
— increase or decrease heading depth - 🟢
remark-breaks
– hard breaks w/o needing spaces (like on issues) - 🟢
remark-capitalize
– transform all titles w/title.sh
- 🟢
remark-capitalize-headings
– selectively capitalize headings (👉 note: alternative toremark-capitalize
) - 🟢
remark-cite
– new syntax for Pandoc-style citations - 🟢
remark-cloudinary-docusaurus
– allows Docusaurus to use Cloudinary to serve optimised images - 🟢
remark-code-blocks
— select and store code blocks - 🟢
remark-code-extra
— add to or transform the HTML output of code blocks (rehype compatible) - 🟢
remark-code-frontmatter
— extract frontmatter from code blocks - 🟢
remark-code-import
— populate code blocks from files - 🟢
remark-code-screenshot
– turn code blocks intocarbon.now.sh
screenshots - 🟢
remark-code-title
— add titles to code blocks - 🟢
remark-codesandbox
– create CodeSandbox from code blocks - 🟢
remark-collapse
— make a section collapsible - 🟢
remark-comment-config
— configure remark w/ comments ⚠️ remark-comments
— new syntax to ignore things⚠️ remark-container
— new syntax for containers (👉 note:remark-directive
is similar and up to date)⚠️ remark-containers
— new syntax for containers (👉 note:remark-directive
is similar and up to date)- 🟢
remark-contributors
— add a table of contributors - 🟢
remark-copy-linked-files
— find and copy files linked files to a destination directory - 🟢
remark-corebc
— transforms Core Blockchain notations into markdown links - 🟢
remark-corepass
— transform CorePass notations into markdown links ⚠️ remark-custom-blocks
— new syntax for custom blocks (new node types, rehype compatible) (👉 note:remark-directive
is similar and up to date)- 🟢
remark-custom-header-id
— add custom ID attribute to headers ({#some-id}
) - 🟢
remark-definition-list
— support definition lists - 🟢
remark-defsplit
— change links and images to references w/ separate definitions ⚠️ remark-disable-tokenizers
— turn some or all remark’s tokenizers on or off- 🟢
remark-directive
— new syntax for directives (generic extensions) - 🟢
remark-directive-rehype
— turn directives into HTML custom elements (rehype compatible) - 🟢
remark-directive-sugar
— predefined directives for customizable badges, links, video embeds, and more - 🟢
remark-docx
— compile markdown to docx - 🟢
remark-dropcap
— fancy and accessible drop caps - 🟢
remark-embed-images
— embed local images as base64-encoded data URIs - 🟢
remark-emoji
— transform Gemoji short-codes to emoji - 🟢
remark-extended-table
— extended table syntax allowing colspan / rowspan - 🟢
remark-extract-frontmatter
— store front matter in vfiles - 🟢
remark-fediverse-user
— transform Fediverse user notations into markdown links - 🟢
remark-first-heading
— change the first heading in a document - 🟢
remark-fix-guillemets
— support ASCII guillements (<<
,>>
) mapping them to HTML - 🟢
remark-flexible-code-titles
— add titles or/and containers for code blocks with customizable attributes - 🟢
remark-flexible-containers
— add custom/flexible containers with customizable properties - 🟢
remark-flexible-markers
— add custom/flexible mark element with customizable properties - 🟢
remark-flexible-paragraphs
— add custom/flexible paragraphs with customizable properties - 🟢
remark-flexible-toc
— expose the table of contents (toc) via Vfile.data or an option reference - 🟢
remark-footnotes-extra
— add footnotes via short syntax - 🟢
remark-frontmatter
– support frontmatter (yaml, toml, and more) - 🟢
remark-gemoji
— better support for Gemoji shortcodes ⚠️ remark-generic-extensions
— new syntax for the CommonMark generic directive extension (👉 note:remark-directive
is similar and up to date)- 🟢
remark-gfm
— support GFM (autolink literals, footnotes, strikethrough, tables, tasklists) - 🟢
remark-git-contributors
— add a table of contributors based on Git history, options, and more - 🟢
remark-github
— autolink references to commits, issues, pull-requests, and users - 🟢
remark-github-admonitions-to-directives
— convert GitHub’s blockquote-based admonitions syntax to directives syntax - 🟢
remark-github-beta-blockquote-admonitions
— GitHub beta blockquote-based admonitions - 🟢
remark-github-blockquote-alert
— remark plugin to add support for GitHub Alert ⚠️ remark-grid-tables
— new syntax to describe tables (rehype compatible)- 🟢
@adobe/remark-grid-tables
— pandoc compatible grid-table syntax - 🟢
remark-heading-id
— custom heading id support{#custom-id}
- 🟢
remark-heading-gap
— serialize w/ more blank lines between headings - 🟢
@vcarl/remark-headings
— extract a list of headings as data - 🟢
remark-hexo
— renders Hexo tags - 🟢
remark-highlight.js
— highlight code blocks w/highlight.js
(rehype compatible) - 🟢
remark-hint
— add hints/tips/warnings to markdown - 🟢
remark-html
— serialize markdown as HTML ⚠️ remark-iframes
— new syntax to create iframes (new node type, rehype compatible)- 🟢
remark-ignore
— use comments to exclude nodes from transformation - 🟢
remark-images
— add an improved image syntax - 🟢
remark-img-links
— prefix relative image paths with an absolute URL - 🟢
remark-inline-links
— change references and definitions to links and images - 🟢
remark-ins
— add ins element for inserted texts opposite to deleted texts - 🟢
remark-join-cjk-lines
— remove extra space between CJK Characters. ⚠️ remark-kbd
— new syntax for keyboard keys (new node type, rehype compatible)⚠️ remark-kbd-plus
— new syntax for keyboard keys w/ plusses (new node type, rehype compatible)- 🟢
remark-license
— add a license section - 🟢
remark-link-rewrite
— customize link URLs dynamically - 🟢
remark-linkify-regex
— change text matching a regex to links - 🟢
remark-lint
— check markdown code style - 🟢
remark-man
— serialize markdown as man pages (roff) - 🟢
remark-math
— new syntax for math (new node types, rehype compatible) - 🟢
remark-mdx
— support MDX (JSX, expressions, ESM) - 🟢
remark-mentions
— replace @ mentions with links - 🟢
remark-mermaidjs
— transform mermaid code blocks into inline SVGs - 🟢
remark-message-control
— turn some or all messages on or off - 🟢
remark-normalize-headings
— make sure at most one top-level heading exists - 🟢
remark-numbered-footnote-labels
— label footnotes w/ numbers - 🟢
@agentofuser/remark-oembed
— transform URLs for youtube, twitter, etc. embeds - 🟢
remark-oembed
— transform URLs surrounded by newlines into asynchronously loading embeds - 🟢
remark-package-dependencies
— inject your dependencies ⚠️ remark-parse-yaml
— parse YAML nodes and expose their value asparsedValue
- 🟢
remark-pdf
— compile markdown to pdf ⚠️ remark-ping
— new syntax for mentions w/ configurable existence check (new node type, rehype compatible)- 🟢
remark-prepend-url
— prepend an absolute url to relative links - 🟢
remark-prettier
— check and format markdown using Prettier - 🟢
remark-prism
— highlight code blocks w/ Prism (supporting most Prism plugins) - 🟢
@handlewithcare/remark-prosemirror
— compile markdown to ProseMirror documents ⚠️ remark-redact
— new syntax to conceal text matching a regex- 🟢
remark-redactable
— write plugins to redact content from a markdown document, then restore it later - 🟢
remark-reference-links
— transform links and images into references and definitions - 🟢
remark-rehype
— transform to rehype - 🟢
remark-relative-links
— change absolute URLs to relative ones - 🟢
remark-remove-comments
— remove HTML comments from the processed output - 🟢
remark-remove-unused-definitions
— remove unused reference-style link definitions - 🟢
remark-remove-url-trailing-slash
— remove trailing slashes from the ends of all URL paths - 🟢
remark-renumber-references
— renumber numeric reference-style link ids contiguously starting from 1 - 🟢
remark-retext
— transform to retext - 🟢
remark-ruby
— new syntax for ruby (furigana) - 🟢
remark-sectionize
— wrap headings and subsequent content in section tags (new node type, rehype compatible) ⚠️ remark-shortcodes
— new syntax for Wordpress- and Hugo-like shortcodes (new node type) (👉 note:remark-directive
is similar and up to date)- 🟢
remark-simple-plantuml
— turn PlantUML code blocks to images - 🟢
remark-slate
— compile markdown to Slate nodes - 🟢
remark-slate-transformer
— compile markdown to Slate nodes and Slate nodes to markdown - 🟢
remark-smartypants
— SmartyPants - 🟢
remark-smcat
— state machine cat - 🟢
remark-sort-definitions
— reorder reference-style link definitions - 🟢
remark-sources
— insert source code - 🟢
remark-strip-badges
— remove badges (such asshields.io
) - 🟢
remark-strip-html
— remove HTML - 🟢
remark-squeeze-paragraphs
— remove empty paragraphs ⚠️ remark-sub-super
— new syntax for super- and subscript (new node types, rehype compatible)⚠️ remark-terms
— new customizable syntax for special terms and phrases- 🟢
remark-textr
— transform text w/Textr
- 🟢
remark-tight-comments
— selectively remove newlines around comments - 🟢
remark-title
— check and add the document title - 🟢
remark-toc
— add a table of contents - 🟢
remark-torchlight
— syntax highlighting powered by torchlight.dev - 🟢
remark-tree-sitter
— highlight code blocks in markdown files using Tree-sitter (rehype compatible) - 🟢
remark-truncate-links
— truncate/shorten urls not manually named - 🟢
remark-twemoji
— turn emoji into Twemoji - 🟢
remark-typedoc-symbol-links
— turn Typedoc symbol link expressions into markdown links - 🟢
remark-typescript
— turn TypeScript code to JavaScript - 🟢
remark-typograf
— transform text w/ Typograf - 🟢
remark-unlink
— remove all links, references, and definitions - 🟢
remark-unwrap-images
— remove the wrapping paragraph for images - 🟢
remark-usage
— add a usage example - 🟢
remark-utf8
— turn bolds, italics, and code into UTF 8 special characters - 🟢
remark-validate-links
— check links to headings and files ⚠️ remark-variables
— new syntax for variables- 🟢
remark-vdom
— compile markdown to VDOM - 🟢
remark-wiki-link
— new syntax for wiki links (rehype compatible) - 🟢
remark-yaml-config
— configure remark w/ YAML
For things that work with the syntax tree used in remark for markdown,
see § List of utilities in syntax-tree/mdast
.
For tools that work with mdast and other syntax trees,
see § List of utilities in syntax-tree/unist
.
For tools that work with the virtual file format used in remark,
see § List of utilities in vfile/vfile
.
To use a plugin programmatically (from JavaScript),
call the use()
method.
To use plugin with remark-cli
(from the terminal),
pass a --use
flag or
specify it in a
configuration file.
To create a plugin,
first read up on what they are in
§ Plugin in unifiedjs/unified
.
After that read
§ Create a remark plugin on unifiedjs.com
for a practical introduction.
Finally take one of the 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-
.
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.
Create a pull request to add the plugin here on this page!