unified processor with support for parsing from markdown and serializing to markdown.
- What is this?
- When should I use this?
- Install
- Use
- API
- Examples
- Syntax
- Syntax tree
- Types
- Compatibility
- Security
- Contribute
- Sponsor
- License
This package is a unified processor with support for parsing
markdown as input and serializing markdown as output by using unified with
remark-parse and
remark-stringify.
See the monorepo readme for info on what the remark ecosystem is.
You can use this package when you want to use unified,
have markdown as input,
and want markdown as output.
This package is a shortcut for
unified().use(remarkParse).use(remarkStringify).
When the input isn’t markdown (meaning you don’t need remark-parse) or the
output is not markdown (you don’t need remark-stringify),
it’s recommended to use unified directly.
When you want to inspect and format markdown files in a project on the command
line,
you can use remark-cli.
This package is ESM only. In Node.js (version 16+), install with npm:
npm install remarkIn Deno with esm.sh:
import {remark} from 'https://esm.sh/remark@15'In browsers with esm.sh:
<script type="module">
import {remark} from 'https://esm.sh/remark@15?bundle'
</script>Say we have the following module example.js:
import {remark} from 'remark'
import remarkToc from 'remark-toc'
const value = `
# Pluto
Pluto is a dwarf planet in the Kuiper belt.
## Contents
## History
### Discovery
In the 1840s, Urbain Le Verrier used Newtonian mechanics to predict the position of…
### Name and symbol
The name Pluto is for the Roman god of the underworld, from a Greek epithet for Hades…
### Planet X disproved
Once Pluto was found, its faintness and lack of a viewable disc cast doubt…
## Orbit
Pluto's orbital period is about 248 years…
`
const file = await remark().use(remarkToc).process(value)
console.error(String(file))…running that with node example.js yields:
# Pluto
Pluto is a dwarf planet in the Kuiper belt.
## Contents
* [History](#history)
* [Discovery](#discovery)
* [Name and symbol](#name-and-symbol)
* [Planet X disproved](#planet-x-disproved)
* [Orbit](#orbit)
## History
### Discovery
In the 1840s, Urbain Le Verrier used Newtonian mechanics to predict the position of…
### Name and symbol
The name Pluto is for the Roman god of the underworld, from a Greek epithet for Hades…
### Planet X disproved
Once Pluto was found, its faintness and lack of a viewable disc cast doubt…
## Orbit
Pluto's orbital period is about 248 years…This package exports the identifier remark.
There is no default export.
Create a new unified processor that already uses
remark-parse and
remark-stringify.
You can add more plugins with use.
See unified for more information.
The following example checks that markdown code style is consistent and follows some best practices:
import {remark} from 'remark'
import remarkPresetLintConsistent from 'remark-preset-lint-consistent'
import remarkPresetLintRecommended from 'remark-preset-lint-recommended'
import {reporter} from 'vfile-reporter'
const file = await remark()
.use(remarkPresetLintConsistent)
.use(remarkPresetLintRecommended)
.process('1) Hello, _Jupiter_ and *Neptune*!')
console.error(reporter(file))Yields:
1:2 warning Unexpected ordered list marker `)`, expected `.` ordered-list-marker-style remark-lint
1:25-1:34 warning Unexpected emphasis marker `*`, expected `_` emphasis-marker remark-lint
[cause]:
1:11-1:20 info Emphasis marker style `'_'` first defined for `'consistent'` here emphasis-marker remark-lint
1:35 warning Unexpected missing final newline character, expected line feed (`\n`) at end of file final-newline remark-lint
⚠ 3 warnings
When you use remark-stringify manually you can pass options to use.
Because remark-stringify is already used in remark that’s not possible.
To define options for remark-stringify,
you can instead pass options to data:
import {remark} from 'remark'
const value = `
# Moons of Neptune
1. Naiad
2. Thalassa
3. Despine
4. …
`
const file = await remark()
.data('settings', {
bulletOrdered: ')',
incrementListMarker: false,
setext: true
})
.process(value)
console.log(String(file))Yields:
Moons of Neptune
================
1) Naiad
1) Thalassa
1) Despine
1) …Markdown is parsed and serialized according to CommonMark. Other plugins can add support for syntax extensions.
The syntax tree used in remark is mdast.
This package is fully typed with TypeScript. There are no extra exported types.
It also registers Settings with unified.
If you’re passing options with .data('settings', …),
make sure to import this package somewhere in your types,
as that registers the fields.
/**
* @import {} from 'remark'
*/
import {unified} from 'unified'
// @ts-expect-error: `thisDoesNotExist` is not a valid option.
unified().data('settings', {thisDoesNotExist: false})Projects maintained by the unified collective are compatible with maintained versions of Node.js.
When we cut a new major release,
we drop support for unmaintained versions of Node.
This means we try to keep the current release line,
remark@15,
compatible with Node.js 16.
See § Security in remarkjs/remark.
See contributing.md in remarkjs/.github
for ways to get started.
See support.md for ways to get help.
This project has a code of conduct. By interacting with this repository, organization, or community you agree to abide by its terms.
Support this effort and give back by sponsoring on OpenCollective!
|
Vercel |
Motif |
HashiCorp |
GitBook |
Gatsby |
|||||
Netlify
|
Coinbase |
ThemeIsle |
Expo |
Boost Note
|
Markdown Space
|
Holloway |
|||
|
You? |
|||||||||


