Awesome Carve [](https://awesome.re)
August 21, 2026 · View on GitHub
A curated list of Carve resources, tools, editors, and libraries.
Carve is a post-Markdown lightweight markup language with visual mnemonics and human-centered design. It builds on Djot's technical rigor — linear parsing, no expressive blind spots, arbitrary attributes — while adding visual mnemonics (/italic/, *bold*, _underline_, ~strike~) and conventions that match how non-technical users naturally mark up text.
Contents
- Official Resources
- Specification
- Parsers & Libraries
- Editors & IDE Support
- Tools
- AI & Agent Tooling
- Converters
- Migration
- Roundtrip Conversion
- Framework Integration
- CMS Integration
- Documentation Tools
- Static Site Generators
- Syntax Highlighting
- Sandboxes
- Example Sites
- Learning Resources
- Community
Official Resources
Documentation and reference materials for Carve.
- carve - Language definition, philosophy, and quick reference.
- carve-js - Reference TypeScript implementation.
- tree-sitter-carve - Native Tree-sitter grammar for Carve.
- carve-lsp - Language server for diagnostics and document symbols.
Specification
Formal syntax specification and grammar definitions.
- carve
grammar.ebnf- Normative EBNF grammar plus the PART 9 semantic constraints (the conformance authority). - Carve docs - Rendered spec, examples, and edge-case reference.
- Conformance test suite - The shared spec corpus: input
.crvpaired with expected.html, generated fromdocs/examples.md. Also emitted in the djot.js fenced format attests/spec, plus a feature-tagged Tier-2 set intests/corpus-optional. Every implementation consumes it as a git submodule; new slugs are drift-guarded per impl.
Parsers & Libraries
Language-specific implementations for parsing and rendering Carve.
JavaScript / TypeScript
- carve-js - Reference TypeScript implementation of the Carve markup language.
PHP
- carve-php - PHP parser and renderer with a
carveCLI binary; implements the full Carve syntax and passes the spec corpus (forked from djot-php). - carve-php-media-embed - Opt-in carve-php extension that embeds audio/video from 30+ providers via media-embed.
Rust
- carve-rs - Rust parser and HTML renderer with a
carveCLI binary; passes the upstream spec corpus. - carve-wasm - WebAssembly bindings for the Rust implementation.
Python
- carve-py - Python bindings (PyO3) over the carve-rs engine;
carve.to_htmlplus Markdown, plain-text, and ANSI renderers and the extension toggles, output byte-identical to the carve-rs CLI. Installs as a native wheel via maturin.
Go
- carve-go - Pure-Go module (no cgo): embeds a WASI build of carve-rs and runs it via wazero.
ToHTMLoutput byte-identical to the carve-rs CLI.
Ruby
- carve-rb - Native Ruby gem (magnus over carve-rs);
Carve.to_html(source, extensions:), output byte-identical to the carve-rs CLI.
Editors & IDE Support
Syntax highlighting and editing support for popular editors.
- intellij-carve - JetBrains IDE plugin (IntelliJ IDEA, PhpStorm, WebStorm, ...) for
.crvfiles: TextMate-based highlighting, live split preview (carve-js or carve-php), HTML export, live templates, and custom preview CSS. - vscode-carve - VS Code extension for
.crvfiles, with syntax highlighting, semantic tokens, diagnostics, and document symbols. - zed-carve - Zed editor extension for
.crvfiles, backed by the native Tree-sitter grammar. - emacs-carve - Emacs major mode (
carve-mode) for.crvfiles: font-lock highlighting for the full syntax,%%comments, imenu heading index, and outline support. - vim-carve - Vim and Neovim support: classic regex syntax highlighting that works with any colorscheme, plus Neovim Tree-sitter integration reusing the native grammar and queries.
- sublime-carve - Sublime Text package for
.crvfiles:.sublime-syntaxhighlighting with real embedded language syntaxes inside fenced code, a heading outline for Goto Symbol, cross-reference navigation,carve fmtintegration, a build system wrappingcarve lint, and snippets. - helix-carve - Helix editor support:
languages.tomlentry and runtime queries backed by the tree-sitter-carve grammar. - obsidian-carve - Obsidian community plugin registering
.crvnotes with safe reading and editable source views; raw HTML is disabled by default.
Tools
Command-line utilities for working with Carve documents.
- carve-lsp - Language server for editor integrations and tooling that speaks LSP.
carveCLI (carve-php) - Convert.crvfiles to HTML (and import Markdown/HTML/BBCode/Djot) from the command line.carveCLI (carve-rs) - Fast native.crvto HTML converter binary.
Validators & Linters
carve lint- Validator in the carve-js CLI. Flags problems that parse but render wrong: broken</#id>cross-references, duplicate heading ids, trailing{…}heading attributes, legacyraw FORMATfences, and block markers that leaked as plain text. Exits non-zero, so it works as a CI gate; the same checks surface live in editors via carve-lsp.
Formatters
carve fmt- Canonical Carve formatter, in thecarveCLI of all three engines (carve-js, carve-php, carve-rs) with byte-identical output. Conservative, idempotent, and semantic-preserving (the rendered HTML is unchanged): normalizes whitespace, headings, fence lengths, and attribute spacing. List markers are deliberately preserved, not normalized - the bullet character and ordered delimiter are semantic in Carve (a different marker starts a new list), so rewriting them would merge adjacent lists.carve fmt -wrewrites in place;carve fmt --checkis a CI gate. The serializer is also exposed programmatically (carveToCarve/to_carve).
Styling
- carve-css - The stylesheet for Carve's rendered HTML: admonitions, tab sets, code groups, code callouts, figures, footnotes, glossary, index, critic markup and the rest. Scoped under
.carveand themed by overriding custom properties rather than selectors, in four layers (tokens, core, extensions, print). It exists because six repositories were each writing this CSS by hand and each covering a different subset - callouts, the glossary and the index were styled in exactly one of them. A coverage gate renders a fixture through the published engine and fails when a class or ARIA role reaching the page has no rule.
Benchmarks
- carve-bench - Cross-engine render performance benchmarks: per-engine in-process timing harnesses (carve-js, carve-php, carve-rs) over a fixed document set, with an orchestrator that writes a results table. A speed comparison; correctness is covered by the shared conformance corpus.
- pandoc-format-fidelity - How much of a document survives a conversion, across every format pandoc ships. Each probe is a pair of pandoc ASTs differing in one feature, answering whether a writer can express it and whether it reads back unchanged. Carve is scored on the same probes via the pandoc-carve bridge. A compatibility comparison, where carve-bench is a speed one.
AI & Agent Tooling
Skills and resources for AI coding tools and LLM agents writing Carve.
- carve-skill - A Claude Code / agent authoring skill (
carve-authoring) that teaches AI tools to write valid.crv. Front-loads the syntax that diverges from Markdown/Djot (swapped emphasis delimiters, braced-only sup/sub) and the traps that silently mis-render, plus thecarve lintround-trip loop. Content is sourced from the canonical spec docs via a git submodule and drift-guarded in CI, so it can't rot out of sync with the language.
Converters
Render Carve to other output formats. All three engines (carve-js, carve-php, carve-rs) and their language bindings ship the same renderer set, selectable by CLI flag or API.
- Carve to HTML - the default output of every engine: carve-js
renderHtml, carve-rscarve --html, carve-phpHtmlRenderer, carve-pycarve.to_html. - Carve to Markdown - carve-js
renderMarkdown, carve-rscarve --markdown, carve-phpMarkdownRenderer, carve-pycarve.to_markdown. - Carve to plain text - carve-js
renderPlain, carve-rscarve --plain, carve-phpPlainTextRenderer, carve-pycarve.to_plain_text. - Carve to ANSI (terminal) - carve-js
renderAnsi, carve-rscarve --ansi, carve-phpAnsiRenderer, carve-pycarve.to_ansi. - Carve to PDF - two engines:
- carve-pdf - the
crv2pdfCLI renders via headless Chrome (CDP) with a pluggable PHP or JS Carve backend; also emits standalone HTML, Markdown, and text, with batch and watch modes. - carve-hexapdf - native PDF via the pure-Ruby HexaPDF engine (no browser).
- carve-pdf - the
- Carve to LaTeX, Typst, DOCX, and every pandoc writer - pandoc-carve - converts the Carve AST to Pandoc's JSON AST, so one Carve document reaches any pandoc output format; also makes
{=latex}-style raw spans fire for their target writer. - Carve to chat-platform markup - carve-php-chat - renders a Carve document to WhatsApp, Slack, Telegram or Discord markup, and reports what could not survive the trip. Each platform accepts a different, mutually incompatible subset - different link syntax, escaping rules and length caps - and each is a JSON flavor definition rather than a class, so adding one needs no PHP.
Migration
Tools for migrating from other markup formats to Carve.
- carve-js
markdownToCarve- Source-to-source Markdown → Carve converter (handles the inline syntax that differs from Markdown, blank-line block spacing, setext headings, and more). - carve-php converters - Markdown, HTML, BBCode and Djot → Carve converters, with a
carveCLI for converting files. - pandoc-carve import - anything pandoc reads (DOCX, LaTeX, RST, Org, MediaWiki, ...) → Carve, via the Pandoc AST and the
carve fmtserializer (pandoc-carve doc.docx -f docx -o doc.crv). - pdf-to-carve - PDFs and document images → Carve. Born-digital PDFs are converted without any AI; scans and images can use an optional OpenAI-compatible vision path. Extraction never produces Carve syntax directly: it emits a strict, versioned JSON document that a deterministic writer serializes, then verifies with
carve fmt/carve lint. Supports text, vision and hybrid (image plus positioned text) modes, JSON replay without a second API call, and an HTML review report.
Roundtrip Conversion
Tools supporting lossless bidirectional conversion for content editing workflows. Essential for WYSIWYG integration where content is stored as Carve but edited as HTML — changes made in the visual editor convert back to Carve without losing syntax choices or formatting details.
- carve-php - Round-trip mode (data attributes for Carve to HTML to Carve) plus an
HtmlToCarveconverter for WYSIWYG editing workflows.
Framework Integration
Carve support for web frameworks.
- cakephp-markup - CakePHP plugin rendering Carve to HTML via carve-php: a
CarveHelperfor converting Carve in templates, aCarveViewfor rendering.crvtemplate files with variable substitution, and safe-mode and profile configuration. - laravel-carve - Laravel package rendering Carve to HTML via carve-php:
@carve/@carveRaw/@carveTextBlade directives, aCarvefacade with named converter profiles (including the static graceful-degradation mode), aValidCarvevalidation rule, and content-hash render caching. - laravel-carve-demo - Runnable Laravel app demonstrating every feature of laravel-carve: Blade directives, facade and named profiles, form validation, a safe-mode comparison, and the static graceful-degradation mode rendered side by side with the interactive output.
- symfony-carve - Symfony bundle that renders Carve to HTML via carve-php: a
{{ value|carve }}Twig filter, acarve()function, aCarveRendererservice, and configurable safe-mode sanitization. - symfony-carve-demo - Runnable Symfony app demonstrating every feature of the symfony-carve bundle: Twig filter and function, the service, a live editor, a safe-mode comparison, and a syntax gallery.
- vite-plugin-carve - Vite plugin for importing
.crvfiles as rendered HTML modules. - webpack-loader-carve - Webpack 5 loader for importing
.crvfiles as build-time-rendered HTML modules, with a verified Next.js webpack build. - carve-grammars - Tiptap editor kit and Carve serializer for building WYSIWYG editors that read and write Carve (also ships Prism and highlight.js grammars; see Syntax Highlighting).
- carve-components - React and Vue 3
<Carve>components (and auseCarveHtmlhook/composable) that render Carve to HTML via carve-js, with per-framework subpath exports, SSR support, and safe-by-default raw-HTML escaping.
CMS Integration
Carve plugins for content management systems.
- shopware-carve - Shopware 6 plugin (carve-php engine) with Twig filters, a CMS element, product/category fields, admin live preview, mail rendering, and a CLI.
- wp-carve - WordPress plugin (carve-php engine) with live in-browser preview, multi-format paste, frontmatter-to-meta, render caching, and a REST API.
Documentation Tools
Generate documentation from Carve source files.
- mkdocs-carve - MkDocs plugin that renders
.crvpages via carve-py, with per-extension config and full nav/path support. - docusaurus-carve - Docusaurus 3 docs plugin for
.crvpages, delegating routes, sidebars, frontmatter, search metadata, and theming to the official docs plugin. - zensical-carve - Zensical support (the successor to MkDocs, from the Material for MkDocs team): a
carvecustom fence for blocks inside Markdown pages, plus a preprocessor that renders whole.crvpages, lifting Carve frontmatter into the page.
Static Site Generators
Build static websites with Carve content.
- astro-carve - Astro integration: import
.crvfiles into Astro pages and components as rendered HTML with frontmatter. - carve-press - First-party static site generator: discovers
.crvpages, expands includes, renders through carve-js with a Shiki highlighting stack, validates links and cross-references at build time, and ships a dev server with incremental rebuilds. Its own documentation site is built with it. - eleventy-carve - Eleventy (11ty) plugin adding
.crvas a template format, with Carve frontmatter flowing into the data cascade. - hugo-carve - Hugo preprocessor (via carve-go) that converts
.crvcontent to HTML pages, preserving front matter. (Hugo has no markup-plugin API, so it is a convert-then-build step.) - jekyll-carve - Jekyll converter plugin rendering
.crvpages via the carve-lang Ruby gem.
Syntax Highlighting
Grammars and themes for displaying Carve with syntax colors.
- tree-sitter-carve - Tree-sitter grammar with queries for highlighting, injections, folds, indents, locals, and text objects.
- carve-grammars
prism/carve.js- Prism grammar for highlighting Carve source on the web (Prism.languages.carve). - carve-grammars
highlightjs/carve.js- highlight.js grammar for highlighting Carve source on the web (ESM, CommonJS, or classic<script>). - vscode-carve
carve.tmLanguage.json- TextMate grammar (also bundled by intellij-carve).
Sandboxes
Interactive playgrounds for experimenting with Carve.
- Carve Playground - Type Carve and see the rendered HTML live in the browser.
- carve-wysiwyg - WYSIWYG editor for Carve built on the carve-grammars Tiptap kit: visual editing, a live Carve source pane, and an HTML preview, with round-trip import via carve-js.
Example Sites
Websites and blogs built with Carve.
- Carve documentation site - The official docs, built from Carve sources via vite-plugin-carve.
- CarvePress documentation site - The carve-press docs, authored in Carve and built by carve-press itself: home layout, generated blog and tag pages, client-side search, live
::: compareand playground blocks, and a German locale sample.
Learning Resources
Articles and tutorials for learning Carve.
Articles
- Twenty years of Markdown hindsight, in one markup language - What Carve keeps from Markdown, and what it fixes.
Tutorials
Community
Places to discuss Carve and get help.
- GitHub Discussions - Discussion forum for Carve.
- GitHub Issues - Report bugs and request features.
- r/markup_carve - Subreddit for Carve news, questions, and showing what you built.