{"id":13399436,"url":"https://github.com/remarkjs/remark","last_synced_at":"2026-01-12T02:16:58.399Z","repository":{"id":19125787,"uuid":"22355214","full_name":"remarkjs/remark","owner":"remarkjs","description":"markdown processor powered by plugins part of the @unifiedjs collective","archived":false,"fork":false,"pushed_at":"2025-04-18T15:52:24.000Z","size":14546,"stargazers_count":8132,"open_issues_count":1,"forks_count":372,"subscribers_count":58,"default_branch":"main","last_synced_at":"2025-05-05T15:52:34.640Z","etag":null,"topics":["ast","commonmark","javascript","markdown","remark","unified"],"latest_commit_sha":null,"homepage":"https://remark.js.org","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/remarkjs.png","metadata":{"files":{"readme":"readme.md","changelog":"changelog.md","contributing":null,"funding":null,"license":"license","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":"unifiedjs","open_collective":"unified"}},"created_at":"2014-07-28T19:35:14.000Z","updated_at":"2025-05-05T13:24:05.000Z","dependencies_parsed_at":"2024-05-02T08:44:08.177Z","dependency_job_id":"daf8b1d5-5516-4338-8d95-a547aa76b0c7","html_url":"https://github.com/remarkjs/remark","commit_stats":{"total_commits":1942,"total_committers":130,"mean_commits":"14.938461538461539","dds":0.339340885684861,"last_synced_commit":"1334327f4d0289dbd0452d89060081c18f6abfab"},"previous_names":["wooorm/remark"],"tags_count":180,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/remarkjs%2Fremark","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/remarkjs%2Fremark/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/remarkjs%2Fremark/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/remarkjs%2Fremark/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/remarkjs","download_url":"https://codeload.github.com/remarkjs/remark/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252804217,"owners_count":21806770,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ast","commonmark","javascript","markdown","remark","unified"],"created_at":"2024-07-30T19:00:37.827Z","updated_at":"2026-01-12T02:16:58.388Z","avatar_url":"https://github.com/remarkjs.png","language":"JavaScript","readme":"# ![remark][file-logo]\n\n[![Build][badge-build-image]][badge-build-url]\n[![Coverage][badge-coverage-image]][badge-coverage-url]\n[![Downloads][badge-downloads-image]][badge-downloads-url]\n[![Size][badge-size-image]][badge-size-url]\n\n**remark** is a tool that transforms markdown with plugins.\nThese plugins can inspect and change your markup.\nYou can use remark on the server,\nthe client,\nCLIs,\ndeno,\netc.\n\n## Feature highlights\n\n* [x] **[compliant][section-syntax]**\n  — 100% to CommonMark,\n  100% to GFM or MDX with a plugin\n* [x] **[ASTs][section-syntax-tree]**\n  — inspecting and changing content made easy\n* [x] **[popular][]**\n  — world’s most popular markdown parser\n* [x] **[plugins][section-plugins]**\n  — 150+ plugins you can pick and choose from\n\n## Intro\n\nremark is an ecosystem of plugins that work with markdown as structured data,\nspecifically ASTs (abstract syntax trees).\nASTs make it easy for programs to deal with markdown.\nWe call those programs plugins.\nPlugins inspect and change trees.\nYou can use the many existing plugins or you can make your own.\n\n* to learn markdown,\n  see this [cheatsheet and tutorial][commonmark-help]\n* for more about us,\n  see [`unifiedjs.com`][unifiedjs]\n* for questions,\n  see [support][health-support]\n* to help,\n  see [contribute][section-contribute] or [sponsor][section-sponsor] below\n\n## Contents\n\n* [What is this?](#what-is-this)\n* [When should I use this?](#when-should-i-use-this)\n* [Plugins](#plugins)\n* [Examples](#examples)\n  * [Example: turning markdown into HTML](#example-turning-markdown-into-html)\n  * [Example: support for GFM and frontmatter](#example-support-for-gfm-and-frontmatter)\n  * [Example: checking markdown](#example-checking-markdown)\n  * [Example: checking and formatting markdown on the CLI](#example-checking-and-formatting-markdown-on-the-cli)\n* [Syntax](#syntax)\n* [Syntax tree](#syntax-tree)\n* [Types](#types)\n* [Compatibility](#compatibility)\n* [Security](#security)\n* [Contribute](#contribute)\n* [Sponsor](#sponsor)\n* [License](#license)\n\n## What is this?\n\nWith this project and a plugin,\nyou can turn this markdown:\n\n```markdown\n# Hello, *Mercury*!\n```\n\n…into the following HTML:\n\n```html\n\u003ch1\u003eHello, \u003cem\u003eMercury\u003c/em\u003e!\u003c/h1\u003e\n```\n\n\u003cdetails\u003e\u003csummary\u003eShow example code\u003c/summary\u003e\n\n```js\nimport rehypeStringify from 'rehype-stringify'\nimport remarkParse from 'remark-parse'\nimport remarkRehype from 'remark-rehype'\nimport {unified} from 'unified'\n\nconst file = await unified()\n  .use(remarkParse)\n  .use(remarkRehype)\n  .use(rehypeStringify)\n  .process('# Hello, *Mercury*!')\n\nconsole.log(String(file)) // =\u003e '\u003ch1\u003eHello, \u003cem\u003eMercury\u003c/em\u003e!\u003c/h1\u003e'\n```\n\n\u003c/details\u003e\n\nWith another plugin,\nyou can turn this markdown:\n\n```markdown\n# Hi, Saturn!\n```\n\n…into the following markdown:\n\n```markdown\n## Hi, Saturn!\n```\n\n\u003cdetails\u003e\u003csummary\u003eShow example code\u003c/summary\u003e\n\n```js\n/**\n * @import {Root} from 'mdast'\n */\n\nimport remarkParse from 'remark-parse'\nimport remarkStringify from 'remark-stringify'\nimport {unified} from 'unified'\nimport {visit} from 'unist-util-visit'\n\nconst file = await unified()\n  .use(remarkParse)\n  .use(myRemarkPluginToIncreaseHeadings)\n  .use(remarkStringify)\n  .process('# Hi, Saturn!')\n\nconsole.log(String(file)) // =\u003e '## Hi, Saturn!'\n\nfunction myRemarkPluginToIncreaseHeadings() {\n  /**\n   * @param {Root} tree\n   */\n  return function (tree) {\n    visit(tree, function (node) {\n      if (node.type === 'heading') {\n        node.depth++\n      }\n    })\n  }\n}\n```\n\n\u003c/details\u003e\n\nYou can use remark for many different things.\n**[unified][github-unified]** is the core project that transforms content with\nASTs.\n**remark** adds support for markdown to unified.\n**[mdast][github-mdast]** is the markdown AST that remark uses.\n\nThis GitHub repository is a monorepo that contains the following packages:\n\n* [`remark-parse`][github-remark-parse]\n  — plugin to take markdown as input and turn it into a syntax tree (mdast)\n* [`remark-stringify`][github-remark-stringify]\n  — plugin to take a syntax tree (mdast) and turn it into markdown as output\n* [`remark`][github-remark-core]\n  — `unified`, `remark-parse`, and `remark-stringify`,\n  useful when input and output are markdown\n* [`remark-cli`][github-remark-cli]\n  — CLI around `remark` to inspect and format markdown in scripts\n\n## When should I use this?\n\nDepending on the input you have and output you want,\nyou can use different parts of remark.\nIf the input is markdown,\nyou can use `remark-parse` with `unified`.\nIf the output is markdown,\nyou can use `remark-stringify` with `unified`.\nIf both the input and output are markdown,\nyou can use `remark` on its own.\nWhen you want to inspect and format markdown files in a project,\nyou can use `remark-cli`.\n\nIf you *just* want to turn markdown into HTML (with maybe a few extensions),\nwe recommend [`micromark`][github-micromark] instead.\n\nIf you don’t use plugins and want to deal with syntax trees manually,\nyou can use [`mdast-util-from-markdown`][github-mdast-util-from-markdown] and\n[`mdast-util-to-markdown`][github-mdast-util-to-markdown].\n\n## Plugins\n\nremark plugins deal with markdown.\nSome popular examples are:\n\n* [`remark-gfm`][github-remark-gfm]\n  — add support for GFM (GitHub flavored markdown)\n* [`remark-lint`][github-remark-lint]\n  — inspect markdown and warn about inconsistencies\n* [`remark-toc`][github-remark-toc]\n  — generate a table of contents\n* [`remark-rehype`][github-remark-rehype]\n  — turn markdown into HTML\n\nThese plugins are exemplary because what they do and how they do it is quite\ndifferent,\nrespectively to extend markdown syntax,\ninspect trees,\nchange trees,\nand transform to other syntax trees.\n\nYou can choose from the 150+ plugins that already exist.\nHere are three good ways to find plugins:\n\n* [`awesome-remark`][github-awesome-remark]\n  — selection of the most awesome projects\n* [List of plugins][file-list-of-plugins]\n  — list of all plugins\n* [`remark-plugin` topic][github-topic-remark-plugin]\n  — any tagged repo on GitHub\n\nSome plugins are maintained by us here in the `@remarkjs` organization while\nothers are maintained by folks elsewhere.\nAnyone can make remark plugins,\nso as always when choosing whether to include\ndependencies in your project,\nmake sure to carefully assess the quality of remark plugins too.\n\n## Examples\n\n### Example: turning markdown into HTML\n\nremark is an ecosystem around markdown.\nA different ecosystem is for HTML:\n[rehype][github-rehype].\nThe following example turns markdown into HTML by combining both ecosystems with\n[`remark-rehype`][github-remark-rehype]:\n\n```js\nimport rehypeSanitize from 'rehype-sanitize'\nimport rehypeStringify from 'rehype-stringify'\nimport remarkParse from 'remark-parse'\nimport remarkRehype from 'remark-rehype'\nimport {unified} from 'unified'\n\nconst file = await unified()\n  .use(remarkParse)\n  .use(remarkRehype)\n  .use(rehypeSanitize)\n  .use(rehypeStringify)\n  .process('# Hello, Neptune!')\n\nconsole.log(String(file))\n```\n\nYields:\n\n```html\n\u003ch1\u003eHello, Neptune!\u003c/h1\u003e\n```\n\n### Example: support for GFM and frontmatter\n\nremark supports CommonMark by default.\nNon-standard markdown extensions can be enabled with plugins.\nThe following example adds support for GFM\n(autolink literals, footnotes, strikethrough, tables, tasklists)\nand frontmatter (YAML):\n\n```js\nimport rehypeStringify from 'rehype-stringify'\nimport remarkFrontmatter from 'remark-frontmatter'\nimport remarkGfm from 'remark-gfm'\nimport remarkParse from 'remark-parse'\nimport remarkRehype from 'remark-rehype'\nimport {unified} from 'unified'\n\nconst value = `---\nlayout: solar-system\n---\n\n# Hi ~~Mars~~Venus!\n`\n\nconst file = await unified()\n  .use(remarkParse)\n  .use(remarkFrontmatter)\n  .use(remarkGfm)\n  .use(remarkRehype)\n  .use(rehypeStringify)\n  .process(value)\n\nconsole.log(String(file))\n```\n\nYields:\n\n```html\n\u003ch1\u003eHi \u003cdel\u003eMars\u003c/del\u003eVenus!\u003c/h1\u003e\n```\n\n### Example: checking markdown\n\nThe following example checks that markdown code style is consistent and follows\nrecommended best practices:\n\n```js\nimport {remark} from 'remark'\nimport remarkPresetLintConsistent from 'remark-preset-lint-consistent'\nimport remarkPresetLintRecommended from 'remark-preset-lint-recommended'\nimport {reporter} from 'vfile-reporter'\n\nconst file = await remark()\n  .use(remarkPresetLintConsistent)\n  .use(remarkPresetLintRecommended)\n  .process('1) Hello, _Jupiter_ and *Neptune*!')\n\nconsole.error(reporter(file))\n```\n\nYields:\n\n```text\n1:2           warning Unexpected ordered list marker `)`, expected `.`                                     ordered-list-marker-style remark-lint\n1:25-1:34     warning Unexpected emphasis marker `*`, expected `_`                                         emphasis-marker           remark-lint\n  [cause]:\n    1:11-1:20 info    Emphasis marker style `'_'` first defined for `'consistent'` here                    emphasis-marker           remark-lint\n1:35          warning Unexpected missing final newline character, expected line feed (`\\n`) at end of file final-newline             remark-lint\n\n⚠ 3 warnings\n```\n\n### Example: checking and formatting markdown on the CLI\n\nThe following example checks and formats markdown with `remark-cli`,\nwhich is the CLI (command line interface) of remark that you can use in your\nterminal.\nThis example assumes you’re in a Node.js package.\n\nFirst,\ninstall the CLI and plugins:\n\n```sh\nnpm install --save-dev remark-cli remark-preset-lint-consistent remark-preset-lint-recommended remark-toc\n```\n\n…then add an npm script in your `package.json`:\n\n```js\n  /* … */\n  \"scripts\": {\n    /* … */\n    \"format\": \"remark . --output\",\n    /* … */\n  },\n  /* … */\n```\n\n\u003e 💡 **Tip**:\n\u003e add ESLint and such in the `format` script too.\n\nThe above change adds a `format` script,\nwhich can be run with `npm run format`.\nIt runs remark on all markdown files (`.`) and rewrites them (`--output`).\nRun `./node_modules/.bin/remark --help` for more info on the CLI.\n\nThen,\nadd a `remarkConfig` to your `package.json` to configure remark:\n\n```js\n  /* … */\n  \"remarkConfig\": {\n    \"settings\": {\n      \"bullet\": \"*\", // Use `*` for list item bullets (default)\n      // See \u003chttps://github.com/remarkjs/remark/tree/main/packages/remark-stringify\u003e for more options.\n    },\n    \"plugins\": [\n      \"remark-preset-lint-consistent\", // Check that markdown is consistent.\n      \"remark-preset-lint-recommended\", // Few recommended rules.\n      [\n        // Generate a table of contents in `## Contents`\n        \"remark-toc\",\n        {\n          \"heading\": \"contents\"\n        }\n      ]\n    ]\n  },\n  /* … */\n```\n\n\u003e 👉 **Note**:\n\u003e you must remove the comments in the above examples when copy/pasting them as\n\u003e comments are not supported in `package.json` files.\n\nFinally,\nyou can run the npm script to check and format markdown files in your project:\n\n```sh\nnpm run format\n```\n\n## Syntax\n\nMarkdown is parsed and serialized according to CommonMark.\nOther plugins can add support for syntax extensions.\n\nWe use [`micromark`][github-micromark] for our parsing.\nSee its documentation for more information on markdown,\nCommonMark,\nand extensions.\n\n## Syntax tree\n\nThe syntax tree used in remark is [mdast][github-mdast].\nIt represents markdown constructs as JSON objects.\n\nThis markdown:\n\n```markdown\n## Hello *Pluto*!\n```\n\n…yields the following tree (positional info remove for brevity):\n\n```js\n{\n  type: 'heading',\n  depth: 2,\n  children: [\n    {type: 'text', value: 'Hello '},\n    {type: 'emphasis', children: [{type: 'text', value: 'Pluto'}]}\n    {type: 'text', value: '!'}\n  ]\n}\n```\n\n## Types\n\nThe remark organization and the unified collective as a whole is fully typed\nwith [TypeScript][].\nTypes for mdast are available in [`@types/mdast`][github-types-mdast].\n\nFor TypeScript to work,\nit is important to type your plugins.\nFor example:\n\n```js\n/**\n * @import {Root} from 'mdast'\n * @import {VFile} from 'vfile'\n */\n\n/**\n * @typedef Options\n *   Configuration.\n * @property {boolean | null | undefined} [someField]\n *   Some option (optional).\n */\n\n/**\n * My plugin.\n *\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns\n *   Transform.\n */\nexport function myRemarkPluginAcceptingOptions(options) {\n  /**\n   * Transform.\n   *\n   * @param {Root} tree\n   *   Tree.\n   * @param {VFile} file\n   *   File\n   * @returns {undefined}\n   *   Nothing.\n   */\n  return function (tree, file) {\n    // Do things.\n  }\n}\n```\n\n## Compatibility\n\nProjects maintained by the unified collective are compatible with maintained\nversions of Node.js.\n\nWhen we cut a new major release,\nwe drop support for unmaintained versions of Node.\nThis means we try to keep the current release line compatible with Node.js 16.\n\n## Security\n\nAs markdown can be turned into HTML and improper use of HTML can open you up to\n[cross-site scripting (XSS)][wikipedia-xss] attacks,\nuse of remark can be unsafe.\nWhen going to HTML,\nyou will combine remark with **[rehype][github-rehype]**,\nin which case you should use [`rehype-sanitize`][github-rehype-sanitize].\n\nAnother security aspect is DDoS attacks.\nAn attacker could cause a crash or slow down with big files.\nCrashes can also originate from smaller payloads,\noften when thousands of things (such as lists or links) are opened.\nIt is wise to cap the accepted size of input\n(500kb can hold a big book)\nand to process content in a different thread or worker so that it can be\nstopped when needed.\n\nUse of remark plugins could also open you up to other attacks.\nCarefully assess each plugin and the risks involved in using them.\n\nFor info on how to submit a report,\nsee our [security policy][health-security].\n\n## Contribute\n\nSee [`contributing.md`][health-contributing] in [`remarkjs/.github`][health]\nfor ways to get started.\nSee [`support.md`][health-support] for ways to get help.\n\nThis project has a [code of conduct][health-coc].\nBy interacting with this repository,\norganization,\nor community you agree to abide by its terms.\n\n## Sponsor\n\nSupport this effort and give back by sponsoring on [OpenCollective][]!\n\n\u003ctable\u003e\n\u003ctr valign=\"middle\"\u003e\n\u003ctd width=\"20%\" align=\"center\" rowspan=\"2\" colspan=\"2\"\u003e\n  \u003ca href=\"https://vercel.com\"\u003eVercel\u003c/a\u003e\u003cbr\u003e\u003cbr\u003e\n  \u003ca href=\"https://vercel.com\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/14985020?s=256\u0026v=4\" width=\"128\"\u003e\u003c/a\u003e\n\u003c/td\u003e\n\u003ctd width=\"20%\" align=\"center\" rowspan=\"2\" colspan=\"2\"\u003e\n  \u003ca href=\"https://motif.land\"\u003eMotif\u003c/a\u003e\u003cbr\u003e\u003cbr\u003e\n  \u003ca href=\"https://motif.land\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/74457950?s=256\u0026v=4\" width=\"128\"\u003e\u003c/a\u003e\n\u003c/td\u003e\n\u003ctd width=\"20%\" align=\"center\" rowspan=\"2\" colspan=\"2\"\u003e\n  \u003ca href=\"https://www.hashicorp.com\"\u003eHashiCorp\u003c/a\u003e\u003cbr\u003e\u003cbr\u003e\n  \u003ca href=\"https://www.hashicorp.com\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/761456?s=256\u0026v=4\" width=\"128\"\u003e\u003c/a\u003e\n\u003c/td\u003e\n\u003ctd width=\"20%\" align=\"center\" rowspan=\"2\" colspan=\"2\"\u003e\n  \u003ca href=\"https://www.gitbook.com\"\u003eGitBook\u003c/a\u003e\u003cbr\u003e\u003cbr\u003e\n  \u003ca href=\"https://www.gitbook.com\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/7111340?s=256\u0026v=4\" width=\"128\"\u003e\u003c/a\u003e\n\u003c/td\u003e\n\u003ctd width=\"20%\" align=\"center\" rowspan=\"2\" colspan=\"2\"\u003e\n  \u003ca href=\"https://www.gatsbyjs.org\"\u003eGatsby\u003c/a\u003e\u003cbr\u003e\u003cbr\u003e\n  \u003ca href=\"https://www.gatsbyjs.org\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/12551863?s=256\u0026v=4\" width=\"128\"\u003e\u003c/a\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr valign=\"middle\"\u003e\n\u003c/tr\u003e\n\u003ctr valign=\"middle\"\u003e\n\u003ctd width=\"20%\" align=\"center\" rowspan=\"2\" colspan=\"2\"\u003e\n  \u003ca href=\"https://www.netlify.com\"\u003eNetlify\u003c/a\u003e\u003cbr\u003e\u003cbr\u003e\n  \u003c!--OC has a sharper image--\u003e\n  \u003ca href=\"https://www.netlify.com\"\u003e\u003cimg src=\"https://images.opencollective.com/netlify/4087de2/logo/256.png\" width=\"128\"\u003e\u003c/a\u003e\n\u003c/td\u003e\n\u003ctd width=\"10%\" align=\"center\"\u003e\n  \u003ca href=\"https://www.coinbase.com\"\u003eCoinbase\u003c/a\u003e\u003cbr\u003e\u003cbr\u003e\n  \u003ca href=\"https://www.coinbase.com\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/1885080?s=256\u0026v=4\" width=\"64\"\u003e\u003c/a\u003e\n\u003c/td\u003e\n\u003ctd width=\"10%\" align=\"center\"\u003e\n  \u003ca href=\"https://themeisle.com\"\u003eThemeIsle\u003c/a\u003e\u003cbr\u003e\u003cbr\u003e\n  \u003ca href=\"https://themeisle.com\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/58979018?s=128\u0026v=4\" width=\"64\"\u003e\u003c/a\u003e\n\u003c/td\u003e\n\u003ctd width=\"10%\" align=\"center\"\u003e\n  \u003ca href=\"https://expo.io\"\u003eExpo\u003c/a\u003e\u003cbr\u003e\u003cbr\u003e\n  \u003ca href=\"https://expo.io\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/12504344?s=128\u0026v=4\" width=\"64\"\u003e\u003c/a\u003e\n\u003c/td\u003e\n\u003ctd width=\"10%\" align=\"center\"\u003e\n  \u003ca href=\"https://boostnote.io\"\u003eBoost Note\u003c/a\u003e\u003cbr\u003e\u003cbr\u003e\n  \u003ca href=\"https://boostnote.io\"\u003e\u003cimg src=\"https://images.opencollective.com/boosthub/6318083/logo/128.png\" width=\"64\"\u003e\u003c/a\u003e\n\u003c/td\u003e\n\u003ctd width=\"10%\" align=\"center\"\u003e\n  \u003ca href=\"https://markdown.space\"\u003eMarkdown Space\u003c/a\u003e\u003cbr\u003e\u003cbr\u003e\n  \u003ca href=\"https://markdown.space\"\u003e\u003cimg src=\"https://images.opencollective.com/markdown-space/e1038ed/logo/128.png\" width=\"64\"\u003e\u003c/a\u003e\n\u003c/td\u003e\n\u003ctd width=\"10%\" align=\"center\"\u003e\n  \u003ca href=\"https://www.holloway.com\"\u003eHolloway\u003c/a\u003e\u003cbr\u003e\u003cbr\u003e\n  \u003ca href=\"https://www.holloway.com\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/35904294?s=128\u0026v=4\" width=\"64\"\u003e\u003c/a\u003e\n\u003c/td\u003e\n\u003ctd width=\"10%\"\u003e\u003c/td\u003e\n\u003ctd width=\"10%\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr valign=\"middle\"\u003e\n\u003ctd width=\"100%\" align=\"center\" colspan=\"8\"\u003e\n  \u003cbr\u003e\n  \u003ca href=\"https://opencollective.com/unified\"\u003e\u003cstrong\u003eYou?\u003c/strong\u003e\u003c/a\u003e\n  \u003cbr\u003e\u003cbr\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n## License\n\n[MIT](license) © [Titus Wormer](https://wooorm.com)\n\n\u003c!-- Definitions --\u003e\n\n[badge-build-image]: https://github.com/remarkjs/remark/workflows/main/badge.svg\n\n[badge-build-url]: https://github.com/remarkjs/remark/actions\n\n[badge-coverage-image]: https://img.shields.io/codecov/c/github/remarkjs/remark.svg\n\n[badge-coverage-url]: https://codecov.io/github/remarkjs/remark\n\n[badge-downloads-image]: https://img.shields.io/npm/dm/remark.svg\n\n[badge-downloads-url]: https://www.npmjs.com/package/remark\n\n[badge-size-image]: https://img.shields.io/bundlejs/size/remark\n\n[badge-size-url]: https://bundlejs.com/?q=remark\n\n[commonmark-help]: https://commonmark.org/help/\n\n[file-list-of-plugins]: doc/plugins.md#list-of-plugins\n\n[file-logo]: https://raw.githubusercontent.com/remarkjs/remark/1f338e72/logo.svg?sanitize=true\n\n[github-awesome-remark]: https://github.com/remarkjs/awesome-remark\n\n[github-mdast]: https://github.com/syntax-tree/mdast\n\n[github-mdast-util-from-markdown]: https://github.com/syntax-tree/mdast-util-from-markdown\n\n[github-mdast-util-to-markdown]: https://github.com/syntax-tree/mdast-util-to-markdown\n\n[github-micromark]: https://github.com/micromark/micromark\n\n[github-rehype]: https://github.com/rehypejs/rehype\n\n[github-rehype-sanitize]: https://github.com/rehypejs/rehype-sanitize\n\n[github-remark-cli]: https://github.com/remarkjs/remark/tree/main/packages/remark-cli\n\n[github-remark-core]: https://github.com/remarkjs/remark/tree/main/packages/remark\n\n[github-remark-gfm]: https://github.com/remarkjs/remark-gfm\n\n[github-remark-lint]: https://github.com/remarkjs/remark-lint\n\n[github-remark-parse]: https://github.com/remarkjs/remark/tree/main/packages/remark-parse\n\n[github-remark-rehype]: https://github.com/remarkjs/remark-rehype\n\n[github-remark-stringify]: packages/remark-stringify/\n\n[github-remark-toc]: https://github.com/remarkjs/remark-toc\n\n[github-topic-remark-plugin]: https://github.com/topics/remark-plugin\n\n[github-types-mdast]: https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/mdast\n\n[github-unified]: https://github.com/unifiedjs/unified\n\n[health]: https://github.com/remarkjs/.github\n\n[health-coc]: https://github.com/remarkjs/.github/blob/main/code-of-conduct.md\n\n[health-contributing]: https://github.com/remarkjs/.github/blob/main/contributing.md\n\n[health-security]: https://github.com/remarkjs/.github/blob/main/security.md\n\n[health-support]: https://github.com/remarkjs/.github/blob/main/support.md\n\n[opencollective]: https://opencollective.com/unified\n\n[popular]: https://www.npmtrends.com/remark-parse-vs-marked-vs-micromark-vs-markdown-it\n\n[section-contribute]: #contribute\n\n[section-plugins]: #plugins\n\n[section-sponsor]: #sponsor\n\n[section-syntax]: #syntax\n\n[section-syntax-tree]: #syntax-tree\n\n[typescript]: https://www.typescriptlang.org\n\n[unifiedjs]: https://unifiedjs.com\n\n[wikipedia-xss]: https://en.wikipedia.org/wiki/Cross-site_scripting\n","funding_links":["https://github.com/sponsors/unifiedjs","https://opencollective.com/unified"],"categories":["Packages","JavaScript","Uncategorized","Markdown parser","Syntaxes","Markdown","Miscellaneous","Backend frameworks \u0026 libraries","markdown","Official","包"],"sub_categories":["Parsing","Uncategorized","redux 扩展","macros","Markdown (:heart:)","解析"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fremarkjs%2Fremark","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fremarkjs%2Fremark","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fremarkjs%2Fremark/lists"}