Which is Better Markdown Front Matter Libraries?
front-matter vs gray-matter vs remark-frontmatter vs yaml-front-matter
1 Year
front-mattergray-matterremark-frontmatteryaml-front-matter
What's Markdown Front Matter Libraries?

These libraries are designed to parse front matter from Markdown files, which is metadata typically used to define attributes like title, date, and layout for static site generators. They enable developers to extract and manipulate this metadata easily, allowing for more dynamic content generation and organization in web applications. Each library has its own unique features and use cases, making them suitable for different scenarios in web development.

NPM Package Downloads Trend
Github Stars Ranking
Stat Detail
Package
Downloads
Stars
Size
Issues
Publish
License
front-matter1,910,298673-314 years agoMIT
gray-matter1,499,5543,908-653 years agoMIT
remark-frontmatter1,081,28425821.2 kB0a year agoMIT
yaml-front-matter86,743192-204 years agoMIT
Feature Comparison: front-matter vs gray-matter vs remark-frontmatter vs yaml-front-matter

Parsing Capabilities

  • front-matter: front-matter provides a simple API to extract YAML front matter from Markdown files. It focuses solely on parsing, making it lightweight and efficient for basic use cases.
  • gray-matter: gray-matter enhances parsing capabilities by supporting both YAML and JSON formats. It allows for custom delimiters and can handle front matter errors gracefully, making it more robust than front-matter.
  • remark-frontmatter: remark-frontmatter integrates with the Remark ecosystem, enabling it to parse front matter while processing Markdown. This allows for advanced transformations and manipulations of Markdown content alongside front matter extraction.
  • yaml-front-matter: yaml-front-matter specializes in parsing and stringifying YAML front matter. It provides a straightforward API for working with YAML, making it easy to extract and manipulate metadata.

Integration

  • front-matter: front-matter is a standalone library that does not depend on other libraries, making it easy to integrate into any project without additional overhead.
  • gray-matter: gray-matter can be used independently or as part of a larger project. It is versatile enough to fit into various workflows, especially when multiple front matter formats are needed.
  • remark-frontmatter: remark-frontmatter is designed to work within the Remark ecosystem, making it ideal for projects that already utilize Remark for Markdown processing. It allows for seamless integration and enhanced functionality.
  • yaml-front-matter: yaml-front-matter is also a standalone library, but it is specifically tailored for YAML. It can be easily integrated into projects that require YAML front matter handling.

Error Handling

  • front-matter: front-matter has basic error handling capabilities, primarily focused on parsing errors related to YAML syntax. It may not provide extensive feedback for complex errors.
  • gray-matter: gray-matter offers improved error handling, providing detailed feedback on parsing issues and allowing developers to handle errors more gracefully, which is beneficial for larger projects.
  • remark-frontmatter: remark-frontmatter inherits error handling from Remark, providing robust feedback during the Markdown processing pipeline, which helps identify issues with front matter and Markdown content.
  • yaml-front-matter: yaml-front-matter provides basic error handling for YAML parsing, ensuring that developers are notified of syntax errors, but it may not cover all edge cases.

Performance

  • front-matter: front-matter is optimized for performance in simple scenarios, making it a quick choice for projects that do not require extensive processing or features.
  • gray-matter: gray-matter is slightly heavier due to its additional features but remains efficient for most use cases, especially when handling multiple front matter formats.
  • remark-frontmatter: remark-frontmatter's performance is tied to the Remark pipeline, which can be optimized for speed but may add overhead depending on the complexity of the Markdown transformations being performed.
  • yaml-front-matter: yaml-front-matter is lightweight and performs well for YAML parsing tasks, making it suitable for projects that specifically require YAML front matter handling.

Community and Support

  • front-matter: front-matter has a smaller community compared to the others, which may result in limited support and fewer resources for troubleshooting.
  • gray-matter: gray-matter has a growing community and more resources available, making it easier to find support and examples for implementation.
  • remark-frontmatter: remark-frontmatter benefits from the larger Remark community, providing extensive documentation, plugins, and support for users, making it a reliable choice for Markdown processing.
  • yaml-front-matter: yaml-front-matter has a moderate community presence, offering some resources and documentation, but may not be as widely used as gray-matter or remark-frontmatter.
How to Choose: front-matter vs gray-matter vs remark-frontmatter vs yaml-front-matter
  • front-matter: Choose front-matter if you need a lightweight and straightforward solution for parsing YAML front matter from Markdown files without any additional dependencies or features. It is ideal for simple projects where you only need to extract metadata without complex processing.
  • gray-matter: Opt for gray-matter if you require a more versatile solution that supports both YAML and JSON front matter. It offers additional features like custom delimiters and error handling, making it suitable for projects that may need more flexibility in handling different front matter formats.
  • remark-frontmatter: Select remark-frontmatter if you are already using the Remark ecosystem for Markdown processing. This plugin integrates seamlessly with Remark, allowing you to parse front matter while leveraging Remark's powerful Markdown transformation capabilities, making it ideal for complex Markdown workflows.
  • yaml-front-matter: Use yaml-front-matter if you specifically need to work with YAML front matter and prefer a library that focuses on this format. It provides a simple API for parsing and stringifying YAML front matter, making it suitable for projects that heavily rely on YAML for configuration.
README for front-matter

front-matter

build coverage npm github

Sauce Test Status

Extract meta data (front-matter) from documents.

This modules does not do any IO (file loading or reading), only extracting and parsing front matter from strings.

This concept that was originally introduced to me through the jekyll blogging system and is pretty useful where you want to be able to easily add meta-data to content without the need for a database. YAML is extracted from the the top of a file between matching separators of "---" or "= yaml =". It will also extract YAML between a separator and "...".

Install

With npm do:

npm install front-matter

Example

So you have a file example.md:

---
title: Just hack'n
description: Nothing to see here
---

This is some text about some stuff that happened sometime ago

NOTE: As of front-matter@2.0.0 valid front matter is considered to have the starting separator on the first line.

Then you can do this:

var fs = require('fs')
  , fm = require('front-matter')

fs.readFile('./example.md', 'utf8', function(err, data){
  if (err) throw err

  var content = fm(data)

  console.log(content)
})

And end up with an object like this:

{
    attributes: {
        title: 'Just hack\'n',
        description: 'Nothing to see here'
    },
    body: 'This is some text about some stuff that happened sometime ago',
    bodyBegin: 6,
    frontmatter: 'title: Just hack\'n\ndescription: Nothing to see here'
}

Methods

var fm = require('front-matter')

fm(string, { allowUnsafe: false })

Return a content object with two properties:

  • content.attributes contains the extracted yaml attributes in json form
  • content.body contains the string contents below the yaml separators
  • content.bodyBegin contains the line number the body contents begins at
  • content.frontmatter contains the original yaml string contents

NOTE: By default fm() uses ys-yaml's safeLoad unless you set allowUnsafe in the options object to true.

fm.test(string)

Check if a string contains a front matter header of "---" or "= yaml =". Primarily used internally but is useful outside of the module.

Returns true or false

    fm.test(string) #=> true || false

Contributing

front-matter is an OPEN Source Project so please help out by reporting bugs or forking and opening pull requests when possible.

standard

All code is linted/formatted using standard style, any non-conforming code can be automatically formatted using the the fmt make task: make fmt.

Maintainers

Contributors

This module is awesome because of all the folks who submitted pull requests:

CHANGELOG

3.0.0

  • CI only tests Node versions >= v6 (drops v4, and v5)

LICENSE (MIT)

Copyright (c) Jason Campbell ("Author")

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.