# remark-emoji

> Emoji transformer plugin for Remark

Latest version **5.0.2** (published 2025-08-31) · MIT license · 0 weekly downloads

## Install

```sh
npm install remark-emoji
pnpm add remark-emoji
yarn add remark-emoji
bun add remark-emoji
```

## Health

**Score 50/100 (C)** — status: stable.

Positive: has types; esm support; no vulnerabilities; high quality score.

Warnings: low downloads.

Negative: stale.

## Facts

| | |
|---|---|
| Version | 5.0.2 |
| Published | 2025-08-31 |
| First published | 2016-10-01 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM |
| Node | >=18 |
| Dependencies | 5 |
| Unpacked size | 17.8 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 157 |
| Author | rhysd |
| Maintainers | rhysd |
| Keywords | markdown, emoji, remark, plugin |

## Links

- npm: https://www.npmjs.com/package/remark-emoji
- Repository: https://github.com/rhysd/remark-emoji
- Homepage: https://github.com/rhysd/remark-emoji#readme
- Issues: https://github.com/rhysd/remark-emoji/issues
- npm.io page: https://npm.io/package/remark-emoji

## Dependencies (5)

- [unified](https://npm.io/package/unified.md) ^11.0.4
- [emoticon](https://npm.io/package/emoticon.md) ^4.0.1
- [node-emoji](https://npm.io/package/node-emoji.md) ^2.1.3
- [@types/mdast](https://npm.io/package/@types/mdast.md) ^4.0.4
- [mdast-util-find-and-replace](https://npm.io/package/mdast-util-find-and-replace.md) ^3.0.1

## Alternatives

- [@mdxeditor/editor](https://npm.io/package/@mdxeditor/editor.md) — 962.4K weekly downloads
- [mmdb-lib](https://npm.io/package/mmdb-lib.md) — 680.9K weekly downloads
- [playcanvas](https://npm.io/package/playcanvas.md) — 36.2K weekly downloads
- [@glw907/cairn-cms](https://npm.io/package/@glw907/cairn-cms.md) — 967 weekly downloads
- [markdown-to-confluence](https://npm.io/package/markdown-to-confluence.md) — 103 weekly downloads

## Recent versions

- 5.0.2 (latest) — 2025-08-31
- 5.0.1 — 2024-07-18
- 5.0.0 — 2024-05-26
- 4.0.1 — 2023-10-29
- 4.0.0 — 2023-08-10
- 3.1.2 — 2023-06-13
- 3.1.1 — 2023-02-21
- 3.1.0 — 2023-01-27
- 3.0.2 — 2021-11-04
- 3.0.1 — 2021-08-16
- 3.0.0 — 2021-08-11
- 2.2.0 — 2021-04-06
- 2.1.0 — 2020-03-17
- 2.0.2 — 2018-10-14
- 2.0.1 — 2018-01-18
- … 4 more at https://npm.io/package/remark-emoji/versions

## README

remark-emoji
============
[![CI][ci-badge]][ci]
[![npm][npm-badge]][npm]

[remark-emoji][npm] is a [remark](https://github.com/remarkjs/remark) plugin to replace `:emoji:` to real UTF-8
emojis in Markdown text. This plugin is built on top of [node-emoji](https://www.npmjs.com/package/node-emoji).
The accessibility support and [Emoticon](https://en.wikipedia.org/wiki/Emoticon) support are optionally available.

## Demo

You can find a demo in the following [Codesandbox](https://codesandbox.io/p/sandbox/remark-emoji-example-w6yrmm).

## Usage

```
remark().use(emoji [, options]);
```

```javascript
import { remark } from 'remark';
import emoji from 'remark-emoji';

const doc = 'Emojis in this text will be replaced: :dog::+1:';
const processor = remark().use(emoji);
const file = await processor.process(doc);

console.log(String(file));
// => Emojis in this text will be replaced: 🐶👍
```

Note:

- This package is [ESM only][esm-only] from v3.0.0 since remark packages migrated to ESM.
- This package supports Node.js v18 or later.

## Options

### `options.accessible`

Setting to `true` makes the converted emoji text accessible with `role` and `aria-label` attributes. Each emoji
text is wrapped with `<span>` element. The `role` and `aria-label` attribute are not allowed by default. Please
add them to the sanitization schema used by remark's HTML transformer. The default sanitization schema is exported
from [rehype-sanitize](https://www.npmjs.com/package/rehype-sanitize) package.

For example,

```javascript
import remarkParse from 'remark-parse';
import toRehype from 'remark-rehype';
import sanitize, { defaultSchema } from 'rehype-sanitize';
import stringify from 'rehype-stringify';
import emoji from 'remark-emoji';
import { unified } from 'unified';

// Allow using `role` and `aria-label` attributes in transformed HTML document
const schema = structuredClone(defaultSchema);
if ('span' in schema.attributes) {
    schema.attributes.span.push('role', 'ariaLabel');
} else {
    schema.attributes.span = ['role', 'ariaLabel'];
}

// Markdown text processor pipeline
const processor = unified()
    .use(remarkParse)
    .use(emoji, { accessible: true })
    .use(toRehype)
    .use(sanitize, schema)
    .use(stringify);

const file = await processor.process('Hello :dog:!');
console.log(String(file));
```

yields

```html
Hello <span role="img" aria-label="dog emoji">🐶</span>!
```

Default value is `false`.

### `options.padSpaceAfter`

Setting to `true` means that an extra whitespace is added after emoji.
This is useful when browser handle emojis with half character length and following character is hidden.
Default value is `false`.

### `options.emoticon`

Setting to `true` means that [emoticon](https://www.npmjs.com/package/emoticon) shortcodes are supported (e.g. :-)
will be replaced by 😃). Default value is `false`.

## TypeScript support

remark-emoji package contains [TypeScript](https://www.typescriptlang.org/) type definitions. The package is ready
for use with TypeScript.

Note that the legacy `node` (or `node10`) resolution at [`moduleResolution`](https://www.typescriptlang.org/tsconfig#moduleResolution)
is not available since it enforces CommonJS module resolution and this package is ESM only. Please use `node16`,
`bundler`, or `nodenext` to enable ESM module resolution.

## License

Distributed under [the MIT License](LICENSE).



[ci-badge]: https://github.com/rhysd/remark-emoji/actions/workflows/ci.yml/badge.svg
[ci]: https://github.com/rhysd/remark-emoji/actions/workflows/ci.yml
[npm-badge]: https://badge.fury.io/js/remark-emoji.svg
[npm]: https://www.npmjs.com/package/remark-emoji
[esm-only]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c

---
_Source: https://npm.io/package/remark-emoji · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
