unified

Content as structured data

We compile content to syntax trees and syntax trees to content.
We also provide hundreds of packages to work on the trees in between.
You can build on the unified collective to make all kinds of interesting things.

Learn

We provide the interface: for parsing, inspecting, transforming, and serializing content. You work on structured data. Learn how to plug building blocks together, write your own, and make things with unified.

  1. Intro to unified

    Guide that summarizes the what and why of unified

    1. guide
    2. introduction
    3. welcome
  2. Use unified

    Guide that delves into transforming markdown to HTML

    1. guide
    2. rehype
    3. remark
    4. transform
    5. use
  3. Tree traversal

    How to do tree traversal (also known as walking or visiting a tree)

    1. recipe
    2. traverse
    3. tree
    4. unist
    5. visit
    6. walk
  4. Find a node

    How to find a node in any unist syntax tree

    1. recipe
    2. find
    3. node
    4. traverse
    5. tree
    6. walk
  5. Support tables in remark

    How to support GitHub-style tables in remark (or react-markdown)

    1. recipe
    2. gfm
    3. github
    4. plugin
    5. remark
    6. table
  6. See 15 other articles

Sponsor

To support our efforts financially, sponsor us on GitHub, thanks.dev, or OpenCollective. This lets us spend more time maintaining our projects and developing new ones.

  1. Vercel

    Develop. Preview. Ship. – Creators of nextjs.org

  2. GatsbyJS

  3. Motif

    When content meets code, magic happens ✨

  4. HashiCorp

  5. GitBook

  6. See 99 other sponsors

Explore

The ever growing ecosystem that the unified collective provides today consists of 311 open source projects, with a combined 71k stars on GitHub. In comparison, the code that the collective maintains is about 105 Moby Dicks or 42 Linuxes. In the last 30 days, the 477 packages maintained in those projects were downloaded 11b times from npm. Much of this is maintained by our teams, yet others are provided by the community.

  1. hast-util-to-string

    hast utility to get the plain-text value of a node
    1. 74%
    2. 29m
  2. unist-util-generated

    unist utility to check if a node is generated
    1. 81%
    2. 17m
  3. remark-frontmatter

    remark plugin to support frontmatter (yaml, toml, and more)
    1. 75%
    2. 24m
  4. hastscript

    hast utility to create trees
    1. 82%
    2. 130m
  5. @mdx-js/esbuild

    esbuild plugin for MDX
    1. 78%
    2. 1.2m
  6. See 477 packages and 311 projects

Build

We provide the building blocks: from tiny, focussed, modular utilities to plugins that combine them to perform bigger tasks. And much, much more. You can build on unified, mixing and matching building blocks together, to make all kinds of interesting new things.

  1. Prettier

    Uses unified to format markdown

  2. Gatsby

    Uses unified to pull content into GraphQL

  3. Write Music

    Uses unified to visualize sentence length

  4. Node.js

    Uses unified to check and build their docs

  5. alex

    Uses unified to catch insensitive, inconsiderate writing

  6. See 21 other cases

Work

Maintaining the collective, developing new projects, keeping everything fast and secure, and helping users, is a lot of work. In total, we’ve closed 5.1k issues/PRs while 174 are currently open (3%). In the last 30 days, we’ve cut 18 new releases.

  1. mdx-js/eslint-mdx@eslint-plugin-mdx@3.9.1·

    Patch Changes

    • #629 8241610 Thanks @paoValle! - fix: mute the code block rules under their @stylistic names too

      eol-last and padded-blocks were deprecated in ESLint v8.53.0 in favour of @stylistic/eslint-plugin, which carries them with its own prefix. The code blocks config switches both off, and now also switches off @stylistic/eol-last and @stylistic/padded-blocks, so the examples stay muted for users who run the plugin.

      The deprecated entries stay: a rule set to off that the installed ESLint no longer has is bypassed rather than resolved, so they are inert on the version that removes them and still mute the rule on the versions that have it.

      Closes #601.

    • Updated dependencies []:

      • eslint-mdx@3.9.1
  2. mdx-js/eslint-mdx@eslint-mdx@3.9.1·

    No changes in this release.

  3. mdx-js/eslint-mdx@eslint-plugin-mdx@3.9.0·

    Patch Changes

    • #634 7921c79 Thanks @JounQin! - fix: only apply remark fixes to the reported message range

      A remark fix used to rewrite the whole document, so unrelated formatting changes could conflict with prettier/prettier and produce circular fixes. Apply only the differences that overlap the reported message, as localized fixes.

      Closes #491.

    • Updated dependencies [4241ceb, 5e0b172, d41d8ee, 1c675f4, 2c41867, 43af536, b476a1c, b3eb3bf, fd72b28]:

      • eslint-mdx@3.9.0
  4. Explore recent releases