nextjournal / nextjournal/markdown

Feature request: support YAML front matter

Open
#65 6 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Clojure
Stars
98
Forks
11
PR merge metrics
No merged PRs in 30d

Description

Summary

YAML front matter (delimited by ---) is widely used in static site generators (Hugo, Jekyll, etc.) and documentation tools. Currently, nextjournal/markdown parses front matter as regular markdown content, producing incorrect results.

Current behavior

(require '[nextjournal.markdown :as md])

(md/parse "---
title: My Post
date: 2024-01-01
---

## Actual Heading")

Produces:

  • A :ruler node (from the opening ---)
  • An h2 heading with text "title: My Post" (incorrectly parsed as markdown heading)
  • A paragraph with "date: 2024-01-01"
  • Another :ruler node (from the closing ---)
  • The actual h2 heading

Expected behavior

Front matter should be:

  1. Recognized and excluded from markdown parsing, OR
  2. Parsed and included as a separate :front-matter node with the YAML content

Example of option 2:

{:type :doc
 :front-matter {:title "My Post" :date "2024-01-01"}
 :content [{:type :heading :heading-level 2 :content [...]}]}

Workaround

Users currently need to strip front matter before calling parse, which is error-prone and loses the metadata.

Implementation note

The underlying commonmark-java library already has a YamlFrontMatterExtension in the commonmark-ext-yaml-front-matter artifact with YamlFrontMatterVisitor for extracting metadata. Using this extension at the commonmark-java level (rather than preprocessing the string) would have the advantage that other features like source line numbers (#64) would work correctly for free, since the parser would know where the actual content starts.

References:

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start at the nextjournal.markdown/parse entry point and inspect how it configures commonmark-java. Read the YamlFrontMatterExtension and YamlFrontMatterVisitor references, then decide whether front matter is excluded or exposed as metadata. Done means the sample no longer parses front matter as regular Markdown and the chosen behavior preserves the actual heading and metadata.

Written by the indexing model from the issue text.

Assessment

Tech stack
clojure, java
Domain
tooling
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.