{"_id":"remark-gfm","_rev":"3964513","name":"remark-gfm","description":"remark plugin to support GFM (autolink literals, footnotes, strikethrough, tables, tasklists)","dist-tags":{"latest":"4.0.1"},"maintainers":[{"name":"johno","email":"johnotander@gmail.com"},{"name":"remcohaszing","email":""},{"name":"wooorm","email":"tituswormer@gmail.com"}],"time":{"modified":"2025-09-01T01:52:19.000Z","created":"2020-10-04T09:48:11.302Z","4.0.1":"2025-02-10T12:43:10.735Z","4.0.0":"2023-09-18T10:52:12.959Z","3.0.1":"2021-11-03T18:15:59.082Z","3.0.0":"2021-10-03T15:49:10.663Z","2.0.0":"2021-08-06T10:06:26.141Z","1.0.0":"2020-10-04T09:48:11.302Z"},"users":{},"author":{"name":"Titus Wormer","email":"tituswormer@gmail.com","url":"https://wooorm.com"},"repository":{"type":"git","url":"git+https://github.com/remarkjs/remark-gfm.git"},"versions":{"4.0.1":{"author":{"name":"Titus Wormer","email":"tituswormer@gmail.com","url":"https://wooorm.com"},"bugs":{"url":"https://github.com/remarkjs/remark-gfm/issues"},"contributors":[{"name":"Titus Wormer","email":"tituswormer@gmail.com","url":"https://wooorm.com"}],"dependencies":{"@types/mdast":"^4.0.0","mdast-util-gfm":"^3.0.0","micromark-extension-gfm":"^3.0.0","remark-parse":"^11.0.0","remark-stringify":"^11.0.0","unified":"^11.0.0"},"description":"remark plugin to support GFM (autolink literals, footnotes, strikethrough, tables, tasklists)","devDependencies":{"@types/node":"^22.0.0","c8":"^10.0.0","is-hidden":"^2.0.0","prettier":"^3.0.0","remark":"^15.0.0","remark-cli":"^12.0.0","remark-preset-wooorm":"^11.0.0","string-width":"^6.0.0","to-vfile":"^8.0.0","type-coverage":"^2.0.0","typescript":"^5.0.0","xo":"^0.60.0"},"exports":"./index.js","funding":{"type":"opencollective","url":"https://opencollective.com/unified"},"keywords":["autolink","footnote","gfm","github","markdown","mdast","plugin","remark","remark-plugin","strikethrough","table","tasklist","unified"],"license":"MIT","name":"remark-gfm","prettier":{"bracketSpacing":false,"singleQuote":true,"semi":false,"tabWidth":2,"trailingComma":"none","useTabs":false},"remarkConfig":{"plugins":["remark-preset-wooorm"]},"repository":{"type":"git","url":"git+https://github.com/remarkjs/remark-gfm.git"},"scripts":{"build":"tsc --build --clean && tsc --build && type-coverage","format":"remark . --frail --output --quiet && prettier . --log-level warn --write && xo --fix","prepack":"npm run build && npm run format","test":"npm run build && npm run format && npm run test-coverage","test-api":"node --conditions development test/index.js","test-coverage":"c8 --100 --reporter lcov npm run test-api"},"sideEffects":false,"typeCoverage":{"atLeast":100,"strict":true},"type":"module","version":"4.0.1","xo":{"overrides":[{"files":["**/*.d.ts"],"rules":{"@typescript-eslint/array-type":["error",{"default":"generic"}],"@typescript-eslint/ban-types":["error",{"extendDefaults":true}],"@typescript-eslint/consistent-type-definitions":["error","interface"]}},{"files":["test/**/*.js"],"rules":{"no-await-in-loop":"off"}}],"prettier":true,"rules":{"logical-assignment-operators":"off"}},"_id":"remark-gfm@4.0.1","gitHead":"109972e8a773bf5dac1d6d2da0776557f36971aa","types":"./index.d.ts","homepage":"https://github.com/remarkjs/remark-gfm#readme","_nodeVersion":"23.1.0","_npmVersion":"11.1.0","dist":{"shasum":"33227b2a74397670d357bf05c098eaf8513f0d6b","size":7621,"noattachment":false,"key":"/remark-gfm/-/remark-gfm-4.0.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/remark-gfm/download/remark-gfm-4.0.1.tgz"},"_npmUser":{"name":"wooorm","email":"tituswormer@gmail.com"},"directories":{},"maintainers":[{"name":"johno","email":"johnotander@gmail.com"},{"name":"remcohaszing","email":""},{"name":"wooorm","email":"tituswormer@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/remark-gfm_4.0.1_1739191390583_0.7643388834714808"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2025-02-10T12:43:10.735Z","publish_time":1739191390735,"_source_registry_name":"default","_cnpm_publish_time":1739191390735},"4.0.0":{"name":"remark-gfm","version":"4.0.0","description":"remark plugin to support GFM (autolink literals, footnotes, strikethrough, tables, tasklists)","license":"MIT","keywords":["autolink","footnote","gfm","github","markdown","mdast","plugin","remark","remark-plugin","strikethrough","table","tasklist","unified"],"repository":{"type":"git","url":"git+https://github.com/remarkjs/remark-gfm.git"},"bugs":{"url":"https://github.com/remarkjs/remark-gfm/issues"},"funding":{"type":"opencollective","url":"https://opencollective.com/unified"},"author":{"name":"Titus Wormer","email":"tituswormer@gmail.com","url":"https://wooorm.com"},"contributors":[{"name":"Titus Wormer","email":"tituswormer@gmail.com","url":"https://wooorm.com"}],"sideEffects":false,"type":"module","exports":"./index.js","dependencies":{"@types/mdast":"^4.0.0","mdast-util-gfm":"^3.0.0","micromark-extension-gfm":"^3.0.0","remark-parse":"^11.0.0","remark-stringify":"^11.0.0","unified":"^11.0.0"},"devDependencies":{"@types/node":"^20.0.0","c8":"^8.0.0","is-hidden":"^2.0.0","prettier":"^3.0.0","remark":"^15.0.0","remark-cli":"^11.0.0","remark-preset-wooorm":"^9.0.0","string-width":"^6.0.0","to-vfile":"^8.0.0","type-coverage":"^2.0.0","typescript":"^5.0.0","xo":"^0.56.0"},"scripts":{"build":"tsc --build --clean && tsc --build && type-coverage","format":"remark . --frail --output --quiet && prettier . --log-level warn --write && xo --fix","prepack":"npm run build && npm run format","test":"npm run build && npm run format && npm run test-coverage","test-api":"node --conditions development test/index.js","test-coverage":"c8 --100 --reporter lcov npm run test-api"},"prettier":{"bracketSpacing":false,"singleQuote":true,"semi":false,"tabWidth":2,"trailingComma":"none","useTabs":false},"remarkConfig":{"plugins":["remark-preset-wooorm"]},"typeCoverage":{"atLeast":100,"detail":true,"ignoreCatch":true,"strict":true},"xo":{"overrides":[{"files":["test/**/*.js"],"rules":{"no-await-in-loop":"off"}}],"prettier":true},"_id":"remark-gfm@4.0.0","gitHead":"d8e110edf0799741e0954a92dd22fc143b803bdb","types":"./index.d.ts","homepage":"https://github.com/remarkjs/remark-gfm#readme","_nodeVersion":"20.5.1","_npmVersion":"9.8.0","dist":{"shasum":"aea777f0744701aa288b67d28c43565c7e8c35de","size":7252,"noattachment":false,"key":"/remark-gfm/-/remark-gfm-4.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/remark-gfm/download/remark-gfm-4.0.0.tgz"},"_npmUser":{"name":"wooorm","email":"tituswormer@gmail.com"},"directories":{},"maintainers":[{"name":"johno","email":"johnotander@gmail.com"},{"name":"remcohaszing","email":""},{"name":"wooorm","email":"tituswormer@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/remark-gfm_4.0.0_1695034332763_0.41780411207797274"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2023-09-18T10:52:12.959Z","publish_time":1695034332959,"_source_registry_name":"default","_cnpm_publish_time":1695034332959},"3.0.1":{"name":"remark-gfm","version":"3.0.1","description":"remark plugin to support GFM (autolink literals, footnotes, strikethrough, tables, tasklists)","license":"MIT","keywords":["unified","remark","remark-plugin","plugin","mdast","markdown","table","strikethrough","tasklist","autolink","footnote","github","gfm"],"repository":{"type":"git","url":"git+https://github.com/remarkjs/remark-gfm.git"},"bugs":{"url":"https://github.com/remarkjs/remark-gfm/issues"},"funding":{"type":"opencollective","url":"https://opencollective.com/unified"},"author":{"name":"Titus Wormer","email":"tituswormer@gmail.com","url":"https://wooorm.com"},"contributors":[{"name":"Titus Wormer","email":"tituswormer@gmail.com","url":"https://wooorm.com"}],"sideEffects":false,"type":"module","main":"index.js","types":"index.d.ts","dependencies":{"@types/mdast":"^3.0.0","mdast-util-gfm":"^2.0.0","micromark-extension-gfm":"^2.0.0","unified":"^10.0.0"},"devDependencies":{"@types/tape":"^4.0.0","c8":"^7.0.0","is-hidden":"^2.0.0","prettier":"^2.0.0","remark":"^14.0.0","remark-cli":"^10.0.0","remark-preset-wooorm":"^9.0.0","rimraf":"^3.0.0","string-width":"^5.0.0","tape":"^5.0.0","to-vfile":"^7.0.0","type-coverage":"^2.0.0","typescript":"^4.0.0","xo":"^0.46.0"},"scripts":{"build":"rimraf \"test/**/*.d.ts\" \"*.d.ts\" && tsc && type-coverage","format":"remark . -qfo --ignore-pattern test/ && prettier . -w --loglevel warn && xo --fix","test-api":"node --conditions development test/index.js","test-coverage":"c8 --check-coverage --branches 100 --functions 100 --lines 100 --statements 100 --reporter lcov npm run test-api","test":"npm run build && npm run format && npm run test-coverage"},"prettier":{"tabWidth":2,"useTabs":false,"singleQuote":true,"bracketSpacing":false,"semi":false,"trailingComma":"none"},"xo":{"prettier":true},"remarkConfig":{"plugins":["preset-wooorm"]},"typeCoverage":{"atLeast":100,"detail":true,"strict":true,"ignoreCatch":true},"gitHead":"0af02a87e5d512da66fad2462401d7ab78911558","homepage":"https://github.com/remarkjs/remark-gfm#readme","_id":"remark-gfm@3.0.1","_nodeVersion":"17.0.1","_npmVersion":"8.1.0","dist":{"shasum":"0b180f095e3036545e9dddac0e8df3fa5cfee54f","size":6500,"noattachment":false,"key":"/remark-gfm/-/remark-gfm-3.0.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/remark-gfm/download/remark-gfm-3.0.1.tgz"},"_npmUser":{"name":"wooorm","email":"tituswormer@gmail.com"},"directories":{},"maintainers":[{"name":"johno","email":"johnotander@gmail.com"},{"name":"remcohaszing","email":""},{"name":"wooorm","email":"tituswormer@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/remark-gfm_3.0.1_1635963358956_0.47496531117176"},"_hasShrinkwrap":false,"publish_time":1635963359082,"_cnpm_publish_time":1635963359082},"3.0.0":{"name":"remark-gfm","version":"3.0.0","description":"remark plugin to support GFM (autolink literals, footnotes, strikethrough, tables, tasklists)","license":"MIT","keywords":["unified","remark","remark-plugin","plugin","mdast","markdown","table","strikethrough","tasklist","autolink","footnote","github","gfm"],"repository":{"type":"git","url":"git+https://github.com/remarkjs/remark-gfm.git"},"bugs":{"url":"https://github.com/remarkjs/remark-gfm/issues"},"funding":{"type":"opencollective","url":"https://opencollective.com/unified"},"author":{"name":"Titus Wormer","email":"tituswormer@gmail.com","url":"https://wooorm.com"},"contributors":[{"name":"Titus Wormer","email":"tituswormer@gmail.com","url":"https://wooorm.com"}],"sideEffects":false,"type":"module","main":"index.js","types":"index.d.ts","dependencies":{"@types/mdast":"^3.0.0","mdast-util-gfm":"^2.0.0","micromark-extension-gfm":"^2.0.0","unified":"^10.0.0"},"devDependencies":{"@types/tape":"^4.0.0","c8":"^7.0.0","is-hidden":"^2.0.0","prettier":"^2.0.0","remark":"^14.0.0","remark-cli":"^10.0.0","remark-preset-wooorm":"^9.0.0","rimraf":"^3.0.0","string-width":"^5.0.0","tape":"^5.0.0","to-vfile":"^7.0.0","type-coverage":"^2.0.0","typescript":"^4.0.0","xo":"^0.45.0"},"scripts":{"build":"rimraf \"test/**/*.d.ts\" \"*.d.ts\" && tsc && type-coverage","format":"remark . -qfo --ignore-pattern test/ && prettier . -w --loglevel warn && xo --fix","test-api":"node --conditions development test/index.js","test-coverage":"c8 --check-coverage --branches 100 --functions 100 --lines 100 --statements 100 --reporter lcov npm run test-api","test":"npm run build && npm run format && npm run test-coverage"},"prettier":{"tabWidth":2,"useTabs":false,"singleQuote":true,"bracketSpacing":false,"semi":false,"trailingComma":"none"},"xo":{"prettier":true},"remarkConfig":{"plugins":["preset-wooorm"]},"typeCoverage":{"atLeast":100,"detail":true,"strict":true,"ignoreCatch":true},"gitHead":"9558a306a88adeaa92ac10249c2c41ac8462d72c","homepage":"https://github.com/remarkjs/remark-gfm#readme","_id":"remark-gfm@3.0.0","_nodeVersion":"16.9.0","_npmVersion":"7.23.0","dist":{"shasum":"a2efb06eceb8472610f095ccbff82d17daa1f415","size":4636,"noattachment":false,"key":"/remark-gfm/-/remark-gfm-3.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/remark-gfm/download/remark-gfm-3.0.0.tgz"},"_npmUser":{"name":"wooorm","email":"tituswormer@gmail.com"},"directories":{},"maintainers":[{"name":"johno","email":"johnotander@gmail.com"},{"name":"remcohaszing","email":""},{"name":"wooorm","email":"tituswormer@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/remark-gfm_3.0.0_1633276150526_0.6345432343502113"},"_hasShrinkwrap":false,"publish_time":1633276150663,"_cnpm_publish_time":1633276150663},"2.0.0":{"name":"remark-gfm","version":"2.0.0","description":"remark plugin to support GFM (autolink literals, strikethrough, tables, tasklists)","license":"MIT","keywords":["unified","remark","remark-plugin","plugin","mdast","markdown","table","strikethrough","tasklist","autolink","github","gfm"],"repository":{"type":"git","url":"git+https://github.com/remarkjs/remark-gfm.git"},"bugs":{"url":"https://github.com/remarkjs/remark-gfm/issues"},"funding":{"type":"opencollective","url":"https://opencollective.com/unified"},"author":{"name":"Titus Wormer","email":"tituswormer@gmail.com","url":"https://wooorm.com"},"contributors":[{"name":"Titus Wormer","email":"tituswormer@gmail.com","url":"https://wooorm.com"}],"sideEffects":false,"type":"module","main":"index.js","types":"index.d.ts","dependencies":{"@types/mdast":"^3.0.0","mdast-util-gfm":"^1.0.0","micromark-extension-gfm":"^1.0.0","unified":"^10.0.0"},"devDependencies":{"@types/tape":"^4.0.0","c8":"^7.0.0","dtslint":"^4.0.0","is-hidden":"^2.0.0","prettier":"^2.0.0","remark":"^14.0.0","remark-cli":"^10.0.0","remark-preset-wooorm":"^8.0.0","rimraf":"^3.0.0","string-width":"^5.0.0","tape":"^5.0.0","to-vfile":"^7.0.0","type-coverage":"^2.0.0","typescript":"^4.0.0","xo":"^0.43.0"},"scripts":{"build":"rimraf \"test/**/*.d.ts\" \"*.d.ts\" && tsc && type-coverage","format":"remark . -qfo --ignore-pattern test/ && prettier . -w --loglevel warn && xo --fix","test-api":"node --conditions development test/index.js","test-coverage":"c8 --check-coverage --branches 100 --functions 100 --lines 100 --statements 100 --reporter lcov npm run test-api","test":"npm run build && npm run format && npm run test-coverage"},"prettier":{"tabWidth":2,"useTabs":false,"singleQuote":true,"bracketSpacing":false,"semi":false,"trailingComma":"none"},"xo":{"prettier":true},"remarkConfig":{"plugins":["preset-wooorm"]},"typeCoverage":{"atLeast":100,"detail":true,"strict":true,"ignoreCatch":true},"gitHead":"383f4184fa0a09dd18da2129a8c78d4d01e311e7","homepage":"https://github.com/remarkjs/remark-gfm#readme","_id":"remark-gfm@2.0.0","_nodeVersion":"16.6.1","_npmVersion":"7.20.3","dist":{"shasum":"4fef4d7b35afa2bd3cd0410d313d32169634051c","size":4454,"noattachment":false,"key":"/remark-gfm/-/remark-gfm-2.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/remark-gfm/download/remark-gfm-2.0.0.tgz"},"_npmUser":{"name":"wooorm","email":"tituswormer@gmail.com"},"directories":{},"maintainers":[{"name":"johno","email":"johnotander@gmail.com"},{"name":"remcohaszing","email":""},{"name":"wooorm","email":"tituswormer@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/remark-gfm_2.0.0_1628244385933_0.8557648180177209"},"_hasShrinkwrap":false,"publish_time":1628244386141,"_cnpm_publish_time":1628244386141},"1.0.0":{"name":"remark-gfm","version":"1.0.0","description":"remark plugin to support GFM (autolink literals, strikethrough, tables, tasklists)","license":"MIT","keywords":["unified","remark","remark-plugin","plugin","mdast","markdown","table","strikethrough","tasklist","autolink","github","gfm"],"repository":{"type":"git","url":"git+https://github.com/remarkjs/remark-gfm.git"},"bugs":{"url":"https://github.com/remarkjs/remark-gfm/issues"},"funding":{"type":"opencollective","url":"https://opencollective.com/unified"},"author":{"name":"Titus Wormer","email":"tituswormer@gmail.com","url":"https://wooorm.com"},"contributors":[{"name":"Titus Wormer","email":"tituswormer@gmail.com","url":"https://wooorm.com"}],"types":"types/index.d.ts","dependencies":{"mdast-util-gfm":"^0.1.0","micromark-extension-gfm":"^0.3.0"},"devDependencies":{"dtslint":"^4.0.0","is-hidden":"^1.0.0","not":"^0.1.0","nyc":"^15.0.0","prettier":"^2.0.0","remark":"^13.0.0-alpha.1","remark-cli":"^8.0.0","remark-preset-wooorm":"^7.0.0","string-width":"^4.2.0","tape":"^5.0.0","to-vfile":"^6.0.0","unified":"^9.0.0","xo":"^0.33.0"},"scripts":{"format":"remark . -qfo --ignore-pattern test/ && prettier . --write && xo --fix","test-api":"node test","test-coverage":"nyc --reporter lcov tape test/index.js","test-types":"dtslint types","test":"npm run format && npm run test-coverage && npm run test-types"},"nyc":{"check-coverage":true,"lines":100,"functions":100,"branches":100},"prettier":{"tabWidth":2,"useTabs":false,"singleQuote":true,"bracketSpacing":false,"semi":false,"trailingComma":"none"},"xo":{"prettier":true,"esnext":false,"rules":{"unicorn/no-fn-reference-in-iterator":"off","unicorn/prefer-optional-catch-binding":"off"}},"remarkConfig":{"plugins":["preset-wooorm"]},"gitHead":"6161ecc1cc9e79f247355d5ca165f555e934b272","homepage":"https://github.com/remarkjs/remark-gfm#readme","_id":"remark-gfm@1.0.0","_nodeVersion":"14.8.0","_npmVersion":"6.14.8","dist":{"shasum":"9213643001be3f277da6256464d56fd28c3b3c0d","size":4472,"noattachment":false,"key":"/remark-gfm/-/remark-gfm-1.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/remark-gfm/download/remark-gfm-1.0.0.tgz"},"maintainers":[{"name":"johno","email":"johnotander@gmail.com"},{"name":"remcohaszing","email":""},{"name":"wooorm","email":"tituswormer@gmail.com"}],"_npmUser":{"name":"wooorm","email":"tituswormer@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/remark-gfm_1.0.0_1601804891124_0.8826812556696211"},"_hasShrinkwrap":false,"publish_time":1601804891302,"_cnpm_publish_time":1601804891302}},"readme":"# remark-gfm\n\n[![Build][build-badge]][build]\n[![Coverage][coverage-badge]][coverage]\n[![Downloads][downloads-badge]][downloads]\n[![Size][size-badge]][size]\n[![Sponsors][sponsors-badge]][collective]\n[![Backers][backers-badge]][collective]\n[![Chat][chat-badge]][chat]\n\n**[remark][]** plugin to support [GFM][] (autolink literals, footnotes,\nstrikethrough, tables, tasklists).\n\n## Contents\n\n* [What is this?](#what-is-this)\n* [When should I use this?](#when-should-i-use-this)\n* [Install](#install)\n* [Use](#use)\n* [API](#api)\n  * [`unified().use(remarkGfm[, options])`](#unifieduseremarkgfm-options)\n  * [`Options`](#options)\n* [Examples](#examples)\n  * [Example: `singleTilde`](#example-singletilde)\n  * [Example: `stringLength`](#example-stringlength)\n* [Bugs](#bugs)\n* [Authoring](#authoring)\n* [HTML](#html)\n* [CSS](#css)\n* [Syntax](#syntax)\n* [Syntax tree](#syntax-tree)\n* [Types](#types)\n* [Compatibility](#compatibility)\n* [Security](#security)\n* [Related](#related)\n* [Contribute](#contribute)\n* [License](#license)\n\n## What is this?\n\nThis package is a [unified][] ([remark][]) plugin to enable the extensions to\nmarkdown that GitHub adds with GFM: autolink literals (`www.x.com`), footnotes\n(`[^1]`), strikethrough (`~~stuff~~`), tables (`| cell |…`), and tasklists\n(`* [x]`).\nYou can use this plugin to add support for parsing and serializing them.\nThese extensions by GitHub to CommonMark are called [GFM][] (GitHub Flavored\nMarkdown).\n\nThis plugin does not handle how markdown is turned to HTML.\nThat’s done by [`remark-rehype`][remark-rehype].\nIf your content is not in English and uses footnotes, you should configure that\nplugin.\nWhen generating HTML, you might also want to enable [`rehype-slug`][rehype-slug]\nto add `id`s on headings.\n\nA different plugin, [`remark-frontmatter`][remark-frontmatter], adds support for\nfrontmatter.\nGitHub supports YAML frontmatter for files in repos and Gists but they don’t\ntreat it as part of GFM.\n\nAnother plugin, [`remark-github`][remark-github], adds support for how markdown\nworks in relation to a certain GitHub repo in comments, issues, PRs, and\nreleases, by linking references to commits, issues, and users.\n\nYet another plugin, [`remark-breaks`][remark-breaks], turns soft line endings\n(enters) into hard breaks (`<br>`s).\nGitHub does this in a few places (comments, issues, PRs, and releases).\n\n## When should I use this?\n\nThis project is useful when you want to support the same features that GitHub\ndoes in files in a repo, Gists, and several other places.\nUsers frequently believe that some of these extensions, specifically autolink\nliterals and tables, are part of normal markdown, so using `remark-gfm` will\nhelp match your implementation to their understanding of markdown.\nThere are several edge cases where GitHub’s implementation works in unexpected\nways or even different than described in their spec, so *writing* in GFM is not\nalways the best choice.\n\nIf you *just* want to turn markdown into HTML (with maybe a few extensions such\nas GFM), we recommend [`micromark`][micromark] with\n[`micromark-extension-gfm`][micromark-extension-gfm] instead.\nIf you don’t use plugins and want to access the syntax tree, you can use\n[`mdast-util-from-markdown`][mdast-util-from-markdown] with\n[`mdast-util-gfm`][mdast-util-gfm].\n\n## Install\n\nThis package is [ESM only][esm].\nIn Node.js (version 16+), install with [npm][]:\n\n```sh\nnpm install remark-gfm\n```\n\nIn Deno with [`esm.sh`][esmsh]:\n\n```js\nimport remarkGfm from 'https://esm.sh/remark-gfm@4'\n```\n\nIn browsers with [`esm.sh`][esmsh]:\n\n```html\n<script type=\"module\">\n  import remarkGfm from 'https://esm.sh/remark-gfm@4?bundle'\n</script>\n```\n\n## Use\n\nSay our document `example.md` contains:\n\n```markdown\n# GFM\n\n## Autolink literals\n\nwww.example.com, https://example.com, and contact@example.com.\n\n## Footnote\n\nA note[^1]\n\n[^1]: Big note.\n\n## Strikethrough\n\n~one~ or ~~two~~ tildes.\n\n## Table\n\n| a | b  |  c |  d  |\n| - | :- | -: | :-: |\n\n## Tasklist\n\n* [ ] to do\n* [x] done\n```\n\n…and our module `example.js` contains:\n\n```js\nimport rehypeStringify from 'rehype-stringify'\nimport remarkGfm from 'remark-gfm'\nimport remarkParse from 'remark-parse'\nimport remarkRehype from 'remark-rehype'\nimport {read} from 'to-vfile'\nimport {unified} from 'unified'\n\nconst file = await unified()\n  .use(remarkParse)\n  .use(remarkGfm)\n  .use(remarkRehype)\n  .use(rehypeStringify)\n  .process(await read('example.md'))\n\nconsole.log(String(file))\n```\n\n…then running `node example.js` yields:\n\n```html\n<h1>GFM</h1>\n<h2>Autolink literals</h2>\n<p><a href=\"http://www.example.com\">www.example.com</a>, <a href=\"https://example.com\">https://example.com</a>, and <a href=\"mailto:contact@example.com\">contact@example.com</a>.</p>\n<h2>Footnote</h2>\n<p>A note<sup><a href=\"#user-content-fn-1\" id=\"user-content-fnref-1\" data-footnote-ref aria-describedby=\"footnote-label\">1</a></sup></p>\n<h2>Strikethrough</h2>\n<p><del>one</del> or <del>two</del> tildes.</p>\n<h2>Table</h2>\n<table>\n<thead>\n<tr>\n<th>a</th>\n<th align=\"left\">b</th>\n<th align=\"right\">c</th>\n<th align=\"center\">d</th>\n</tr>\n</thead>\n</table>\n<h2>Tasklist</h2>\n<ul class=\"contains-task-list\">\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> to do</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" checked disabled> done</li>\n</ul>\n<section data-footnotes class=\"footnotes\"><h2 class=\"sr-only\" id=\"footnote-label\">Footnotes</h2>\n<ol>\n<li id=\"user-content-fn-1\">\n<p>Big note. <a href=\"#user-content-fnref-1\" data-footnote-backref class=\"data-footnote-backref\" aria-label=\"Back to content\">↩</a></p>\n</li>\n</ol>\n</section>\n```\n\n## API\n\nThis package exports no identifiers.\nThe default export is [`remarkGfm`][api-remark-gfm].\n\n### `unified().use(remarkGfm[, options])`\n\nAdd support GFM (autolink literals, footnotes, strikethrough, tables,\ntasklists).\n\n###### Parameters\n\n* `options` ([`Options`][api-options], optional)\n  — configuration\n\n###### Returns\n\nNothing (`undefined`).\n\n### `Options`\n\nConfiguration (TypeScript type).\n\n###### Fields\n\n* `firstLineBlank` (`boolean`, default: `false`)\n  — serialize with a blank line for the first line of footnote definitions\n* `stringLength` (`((value: string) => number)`, default: `d => d.length`)\n  — detect the size of table cells, used when aligning cells\n* `singleTilde` (`boolean`, default: `true`)\n  — whether to support strikethrough with a single tilde;\n  single tildes work on github.com, but are technically prohibited by GFM;\n  you can always use 2 or more tildes for strikethrough\n* `tablePipeAlign` (`boolean`, default: `true`)\n  — whether to align table pipes\n* `tableCellPadding` (`boolean`, default: `true`)\n  — whether to add a space of padding between table pipes and cells\n\n## Examples\n\n### Example: `singleTilde`\n\nTo turn off support for parsing strikethrough with single tildes, pass\n`singleTilde: false`:\n\n```js\n// …\n\nconst file = await unified()\n  .use(remarkParse)\n  .use(remarkGfm, {singleTilde: false})\n  .use(remarkRehype)\n  .use(rehypeStringify)\n  .process('~one~ and ~~two~~')\n\nconsole.log(String(file))\n```\n\nYields:\n\n```html\n<p>~one~ and <del>two</del></p>\n```\n\n### Example: `stringLength`\n\nIt’s possible to align tables based on the visual width of cells.\nFirst, let’s show the problem:\n\n```js\nimport {remark} from 'remark'\nimport remarkGfm from 'remark-gfm'\n\nconst input = `| Alpha | Bravo |\n| - | - |\n| 中文 | Charlie |\n| ????‍❤️‍???? | Delta |`\n\nconst file = await remark().use(remarkGfm).process(input)\n\nconsole.log(String(file))\n```\n\nThe above code shows how remark can be used to format markdown.\nThe output is as follows:\n\n```markdown\n| Alpha    | Bravo   |\n| -------- | ------- |\n| 中文       | Charlie |\n| ????‍❤️‍???? | Delta   |\n```\n\nTo improve the alignment of these full-width characters and emoji, pass a\n`stringLength` function that calculates the visual width of cells.\nOne such algorithm is [`string-width`][string-width].\nIt can be used like so:\n\n```diff\n@@ -1,5 +1,6 @@\n import {remark} from 'remark'\n import remarkGfm from 'remark-gfm'\n+import stringWidth from 'string-width'\n\n@@ -10,7 +11,7 @@ async function main() {\n | ????‍❤️‍???? | Delta |`\n\n-const file = await remark().use(remarkGfm).process(input)\n+const file = await remark()\n+  .use(remarkGfm, {stringLength: stringWidth})\n+  .process(input)\n\n   console.log(String(file))\n```\n\nThe output of our code with these changes is as follows:\n\n```markdown\n| Alpha | Bravo   |\n| ----- | ------- |\n| 中文  | Charlie |\n| ????‍❤️‍????    | Delta   |\n```\n\n## Bugs\n\nFor bugs present in GFM but not here, or other peculiarities that are\nsupported, see each corresponding readme:\n\n* [autolink literal](https://github.com/micromark/micromark-extension-gfm-autolink-literal#bugs)\n* [footnote](https://github.com/micromark/micromark-extension-gfm-footnote#bugs)\n* strikethrough: n/a\n* [table](https://github.com/micromark/micromark-extension-gfm-table#bugs)\n* tasklists: n/a\n\n## Authoring\n\nFor recommendations on how to author GFM, see each corresponding readme:\n\n* [autolink literal](https://github.com/micromark/micromark-extension-gfm-autolink-literal#authoring)\n* [footnote](https://github.com/micromark/micromark-extension-gfm-footnote#authoring)\n* [strikethrough](https://github.com/micromark/micromark-extension-gfm-strikethrough#authoring)\n* [table](https://github.com/micromark/micromark-extension-gfm-table#authoring)\n* [tasklists](https://github.com/micromark/micromark-extension-gfm-task-list-item#authoring)\n\n## HTML\n\nThis plugin does not handle how markdown is turned to HTML.\nSee [`remark-rehype`][remark-rehype] for how that happens and how to change it.\n\n## CSS\n\nFor info on how GitHub styles these features, see each corresponding readme:\n\n* [autolink literal](https://github.com/micromark/micromark-extension-gfm-autolink-literal#css)\n* [footnote](https://github.com/micromark/micromark-extension-gfm-footnote#css)\n* [strikethrough](https://github.com/micromark/micromark-extension-gfm-strikethrough#css)\n* [table](https://github.com/micromark/micromark-extension-gfm-table#css)\n* [tasklists](https://github.com/micromark/micromark-extension-gfm-task-list-item#css)\n\n## Syntax\n\nFor info on the syntax of these features, see each corresponding readme:\n\n* [autolink literal](https://github.com/micromark/micromark-extension-gfm-autolink-literal#syntax)\n* [footnote](https://github.com/micromark/micromark-extension-gfm-footnote#syntax)\n* [strikethrough](https://github.com/micromark/micromark-extension-gfm-strikethrough#syntax)\n* [table](https://github.com/micromark/micromark-extension-gfm-table#syntax)\n* [tasklists](https://github.com/micromark/micromark-extension-gfm-task-list-item#syntax)\n\n## Syntax tree\n\nFor info on the syntax tree of these features, see each corresponding readme:\n\n* [autolink literal](https://github.com/syntax-tree/mdast-util-gfm-autolink-literal#syntax-tree)\n* [footnote](https://github.com/syntax-tree/mdast-util-gfm-footnote#syntax-tree)\n* [strikethrough](https://github.com/syntax-tree/mdast-util-gfm-strikethrough#syntax-tree)\n* [table](https://github.com/syntax-tree/mdast-util-gfm-table#syntax-tree)\n* [tasklists](https://github.com/syntax-tree/mdast-util-gfm-task-list-item#syntax-tree)\n\n## Types\n\nThis package is fully typed with [TypeScript][].\nIt exports the additional type [`Options`][api-options].\n\nThe node types are supported in `@types/mdast` by default.\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, we drop support for unmaintained versions of\nNode.\nThis means we try to keep the current release line, `remark-gfm@^4`, compatible\nwith Node.js 16.\n\nThis plugin works with `remark-parse` version 11+ (`remark` version 15+).\nThe previous version (v3) worked with `remark-parse` version 10 (`remark`\nversion 14).\nBefore that, v2 worked with `remark-parse` version 9 (`remark` version 13).\nEarlier versions of `remark-parse` and `remark` had a `gfm` option that enabled\nthis functionality, which defaulted to true.\n\n## Security\n\nUse of `remark-gfm` does not involve **[rehype][]** ([hast][]) or user\ncontent so there are no openings for [cross-site scripting (XSS)][wiki-xss]\nattacks.\n\n## Related\n\n* [`remark-github`][remark-github]\n  — link references to commits, issues, PRs, and users\n* [`remark-breaks`][remark-breaks]\n  — support breaks without needing spaces or escapes (enters to `<br>`)\n* [`remark-frontmatter`][remark-frontmatter]\n  — support frontmatter (YAML, TOML, and more)\n* [`remark-directive`](https://github.com/remarkjs/remark-directive)\n  — support directives\n* [`remark-math`](https://github.com/remarkjs/remark-math)\n  — support math\n* [`remark-mdx`](https://github.com/mdx-js/mdx/tree/main/packages/remark-mdx)\n  — support MDX (ESM, JSX, expressions)\n\n## Contribute\n\nSee [`contributing.md`][contributing] in [`remarkjs/.github`][health] for ways\nto get started.\nSee [`support.md`][support] for ways to get help.\n\nThis project has a [code of conduct][coc].\nBy interacting with this repository, organization, or community you agree to\nabide by its terms.\n\n## License\n\n[MIT][license] © [Titus Wormer][author]\n\n<!-- Definitions -->\n\n[api-options]: #options\n\n[api-remark-gfm]: #unifieduseremarkgfm-options\n\n[author]: https://wooorm.com\n\n[backers-badge]: https://opencollective.com/unified/backers/badge.svg\n\n[build]: https://github.com/remarkjs/remark-gfm/actions\n\n[build-badge]: https://github.com/remarkjs/remark-gfm/workflows/main/badge.svg\n\n[chat]: https://github.com/remarkjs/remark/discussions\n\n[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg\n\n[coc]: https://github.com/remarkjs/.github/blob/HEAD/code-of-conduct.md\n\n[collective]: https://opencollective.com/unified\n\n[contributing]: https://github.com/remarkjs/.github/blob/HEAD/contributing.md\n\n[coverage]: https://codecov.io/github/remarkjs/remark-gfm\n\n[coverage-badge]: https://img.shields.io/codecov/c/github/remarkjs/remark-gfm.svg\n\n[downloads]: https://www.npmjs.com/package/remark-gfm\n\n[downloads-badge]: https://img.shields.io/npm/dm/remark-gfm.svg\n\n[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c\n\n[esmsh]: https://esm.sh\n\n[gfm]: https://github.github.com/gfm/\n\n[hast]: https://github.com/syntax-tree/hast\n\n[health]: https://github.com/remarkjs/.github\n\n[license]: license\n\n[mdast-util-from-markdown]: https://github.com/syntax-tree/mdast-util-from-markdown\n\n[mdast-util-gfm]: https://github.com/syntax-tree/mdast-util-gfm\n\n[micromark]: https://github.com/micromark/micromark\n\n[micromark-extension-gfm]: https://github.com/micromark/micromark-extension-gfm\n\n[npm]: https://docs.npmjs.com/cli/install\n\n[rehype]: https://github.com/rehypejs/rehype\n\n[rehype-slug]: https://github.com/rehypejs/rehype-slug\n\n[remark]: https://github.com/remarkjs/remark\n\n[remark-breaks]: https://github.com/remarkjs/remark-breaks\n\n[remark-frontmatter]: https://github.com/remarkjs/remark-frontmatter\n\n[remark-github]: https://github.com/remarkjs/remark-github\n\n[remark-rehype]: https://github.com/remarkjs/remark-rehype\n\n[size]: https://bundlejs.com/?q=remark-gfm\n\n[size-badge]: https://img.shields.io/bundlejs/size/remark-gfm\n\n[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg\n\n[string-width]: https://github.com/sindresorhus/string-width\n\n[support]: https://github.com/remarkjs/.github/blob/HEAD/support.md\n\n[typescript]: https://www.typescriptlang.org\n\n[unified]: https://github.com/unifiedjs/unified\n\n[wiki-xss]: https://en.wikipedia.org/wiki/Cross-site_scripting\n","_attachments":{},"homepage":"https://github.com/remarkjs/remark-gfm#readme","bugs":{"url":"https://github.com/remarkjs/remark-gfm/issues"},"license":"MIT"}