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.
See awesome-remark
for the most awesome projects in the
ecosystem.
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 rehype’s List of plugins 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-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)- 🟢
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) ⚠️ 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
Use GitHub search to find available and often inspirational presets.
See mdast for a list of utilities that work with the syntax tree. See unist for other utilities which work with mdast and other syntax trees too. Finally, see vfile for a list of utilities working with virtual files.
To use a plugin programmatically, call the use()
function.
To use plugin with remark-cli
, pass a --use
flag or
specify it in a configuration file.
To create a plugin, first read up on the concept of plugins. Then, read the guide on “Creating a plugin with unified”. 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!