Skip to content

refactor: replace Earmark with MDEx for markdown rendering#107

Draft
rellen wants to merge 1 commit intomainfrom
spike/replace-earmark-with-mdex
Draft

refactor: replace Earmark with MDEx for markdown rendering#107
rellen wants to merge 1 commit intomainfrom
spike/replace-earmark-with-mdex

Conversation

@rellen
Copy link
Copy Markdown
Contributor

@rellen rellen commented Mar 15, 2026

Summary

Swap the markdown parser from Earmark (pure Elixir) to MDEx (Rust/comrak NIF) for better CommonMark compliance, multi-language syntax highlighting, and typed AST structs.

  • Replace Earmark parse/transform/render pipeline with MDEx AST-level pipeline: vertex link rewrite via MDEx.Raw node splicing → HTML render
  • Add mdex dependency, remove makeup_elixir direct dependency
  • Use Lumis html_linked formatter for class-based syntax highlighting with light/dark mode CSS support
  • Replace Makeup CSS classes with Lumis semantic CSS classes
  • Enable GFM extensions (tables, autolinks, strikethrough)
  • Delete CodeHighlighter module (MDEx/Lumis handles all languages natively)
  • Update existing test assertions for Lumis output format
  • Add tests for special chars, nested links, mixed content, empty input

Test plan

  • All 14 markdown component tests pass
  • No dialyzer warnings from changed files
  • Downstream project confirmed tables render correctly
  • Visual check of syntax highlighting in light and dark mode
  • Verify vertex link navigation uses LiveView patch (not full page reload)

@rellen rellen force-pushed the spike/replace-earmark-with-mdex branch from 6219516 to 8a8a66e Compare March 15, 2026 00:57
@rellen rellen marked this pull request as draft March 15, 2026 00:59
@rellen rellen force-pushed the spike/replace-earmark-with-mdex branch 10 times, most recently from 306c2af to e659d39 Compare March 15, 2026 02:37
Swap the markdown parser from Earmark (pure Elixir) to MDEx (Rust/comrak NIF)
for better CommonMark compliance, multi-language syntax highlighting, and
typed AST structs.

- Replace Earmark parse/transform/render pipeline with MDEx AST-level
  pipeline: vertex link rewrite via MDEx.Raw node splicing → HTML render
- Add mdex dependency, remove makeup_elixir direct dependency
- Use Lumis html_linked formatter for class-based syntax highlighting
  with light/dark mode CSS support
- Replace Makeup CSS classes with Lumis semantic CSS classes
- Enable GFM extensions (tables, autolinks, strikethrough)
- Delete CodeHighlighter module (MDEx/Lumis handles all languages natively)
- Update existing test assertions for Lumis output format
- Add tests for special chars, nested links, mixed content, empty input
@rellen rellen force-pushed the spike/replace-earmark-with-mdex branch from e659d39 to a344c86 Compare March 15, 2026 02:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant