Ecosystem
Everything that speaks Carve, grouped by role. All of it lives under the markup-carve organization. For live corpus conformance numbers of the reference parsers, see Implementation Comparison.
Parsers
The engines that turn Carve source into an AST and HTML. Conformance is measured against the shared spec corpus; the bar for "a Carve implementation" is Tier-1 core (native syntax) - see Build Your Own Implementation.
| Project | Language | Status |
|---|---|---|
| carve-js | TypeScript | Reference implementation. Tier-1 corpus passing. |
| carve-rs | Rust | Parser + HTML renderer with a carve CLI. Tier-1 corpus passing. |
| carve-php | PHP | Forked from djot-php; Carve syntax implemented, corpus passing. Powers the PHP sandbox and wp-carve. |
| carve-wasm | WASM | Browser/Node bindings for carve-rs. Early. |
Language bindings
Higher-level bindings and satellite packages that wrap one of the engine implementations.
A binding over carve-rs exposes the complete core output surface: HTML, Markdown, plain text, ANSI, canonical Carve, and the published AST. Importers are optional, but each binding declares every HTML, Markdown, Djot, and BBCode importer as either implemented or out of scope. The machine-readable declaration in resources/binding-contract.json checks that the required output set is exact, that every importer has exactly one declaration, and that both kinds of declaration hold against the source each binding ships: a declared importer names a real export, and an out-of-scope entry survives only while nothing in the binding's own sources names that format.
| Project | Language | Notes |
|---|---|---|
| carve-go | Go | Pure-Go module via wazero + WASI over carve-rs. |
| carve-py | Python | PyO3 bindings over carve-rs. Enables MkDocs, Pelican, and other Python pipelines. |
| carve-rb | Ruby | Native gem via magnus over carve-rs. |
| carve-components | React / Vue | UI components for rendering Carve markup in the browser. |
| carve-wysiwyg | TypeScript | WYSIWYG editor / live sandbox (Tiptap + carve-grammars). |
| carve-css | CSS | Shared styles for semantic Carve HTML such as admonitions and tabs. |
Editor support
Syntax highlighting, structural editing, and diagnostics inside editors.
| Project | Target | Status |
|---|---|---|
| vscode-carve | VS Code | Highlighting, snippets, live preview. |
| emacs-carve | Emacs | Major mode for .crv files. |
| vim-carve | Vim / Neovim | Syntax highlighting + tree-sitter grammar. |
| sublime-carve | Sublime Text | Syntax package for .crv files. |
| sublime-carve-lsp | Sublime Text | LSP helper package - diagnostics, hover and symbols via the Carve language server. |
| helix-carve | Helix | Editor support for Carve. |
| intellij-carve | JetBrains IDEs | Highlighting, live preview, and export for IntelliJ, PhpStorm, etc. |
| zed-carve | Zed | Editor support. |
| tree-sitter-carve | Tree-sitter | Grammar for highlighting and structural editing. |
| highlightjs-carve | Highlight.js | Syntax grammar for highlighted Carve source. |
| pygments-carve | Pygments | Lexer for Python documentation and highlighting tools. |
| rouge-carve | Rouge | Lexer coloring Carve source wherever Rouge highlights. |
| carve-lsp | LSP | Language server - syntax diagnostics, Djot/Markdown collision hints. Early. |
Copying a Carve document
An integration that puts Carve source on the clipboard carries it as text/x-carve (CARVE-P9-071), next to a text/plain flavor for targets that know no Carve. Browser and Electron hosts must write it as web text/x-carve: the unprefixed type fails only when the write runs, so await navigator.clipboard.write and report its rejection, or a copy that put nothing on the clipboard looks like success.
Framework integrations
Carve embedded in another tool or framework.
| Project | Host | Status |
|---|---|---|
| mkdocs-carve | MkDocs | Plugin: renders .crv pages in MkDocs documentation sites. |
| jekyll-carve | Jekyll | Converter plugin for .crv pages. |
| eleventy-carve | Eleventy (11ty) | Plugin for processing Carve source files. |
| astro-carve | Astro | Integration for importing .crv pages. |
| hugo-carve | Hugo | Preprocessor that converts .crv content to HTML, via carve-go. |
| docusaurus-carve | Docusaurus | Docs plugin: converts .crv pages and delegates routes, sidebars, and metadata to Docusaurus. |
| webpack-loader-carve | webpack / Next.js | Build-time loader for importing .crv as rendered HTML modules. |
| obsidian-carve | Obsidian | Community plugin with source and reading views for .crv notes. |
| symfony-carve | Symfony | Bundle to render Carve markup to HTML via carve-php. |
| symfony-carve-demo | Symfony | Demo app for the symfony-carve bundle. |
| laravel-carve | Laravel | Integration with Blade directives, services, validation, and caching. |
| laravel-carve-demo | Laravel | Runnable app demonstrating every feature of laravel-carve. |
| shopware-carve | Shopware 6 | Twig filters, CMS element, product/category fields, admin live preview, mail, and a CLI. |
| wp-carve | WordPress | Plugin on the carve-php engine - live preview, multi-format paste, REST API. |
| carve-grammars | Tiptap | Editor kit and Carve serializer. |
| vite-plugin-carve | Vite | Import .crv documents as rendered HTML. Early. |
| carve-press | Static sites | Carve-native static site generator. |
| zensical-carve | Zensical | Carve integration for Zensical documentation sites. |
PDF / output
Render Carve documents to formats beyond HTML.
| Project | Output | Notes |
|---|---|---|
| carve-pdf | Render .crv documents to clean, paginated PDFs. | |
| carve-hexapdf | Carve to PDF via the pure-Ruby HexaPDF engine (over carve-lang / carve-rb). | |
| pandoc-carve | LaTeX, Typst, DOCX, PDF, ... | Carve AST to Pandoc JSON bridge; reaches every pandoc writer and makes {=latex}-style raw spans fire. |
| carve-sile | SILE input support for typesetting Carve documents. | |
| pdf-to-carve | Carve source | Extract PDF text and layout into validated .crv documents. |
Format bridges
Conversions between the Carve AST and another document model, in both directions. These are keyed by bridge rather than by repository, because one of them lives inside an engine rather than in a package of its own. Why the boundary sits at the AST, and what a bridge owes its caller: Format bridges.
| Bridge | Model | Runtime | Carve to it | It to Carve |
|---|---|---|---|---|
| pandoc-carve | Pandoc AST | Node + pandoc | ✅ every pandoc writer | ✅ everything pandoc reads |
| carve-grammars | ProseMirror / Tiptap | Node | ✅ carveToProseMirror | ✅ serializeToCarve |
| carve-php | ProseMirror / Tiptap | PHP | ✅ ProseMirrorRenderer | ✅ ProseMirrorToCarve |
The same editor model is reached from two runtimes on purpose: an editor needs the model in whatever runtime the application already has. The carve-php pair is what lets a Tiptap editor in the browser and PHP rendering in a queue worker share one stored document with no Node runtime anywhere in the pipeline. carve-grammars owns the shared CarveKit schema and the name map both sides read.
carve-js and carve-rs have no bridge of their own; their prosemirror HTML import adapter is a different job at a different stage.
Extensions
Opt-in extensions that add non-core syntax.
| Project | Target | Notes |
|---|---|---|
| carve-php-media-embed | carve-php | Embeds audio and video through dereuromark/media-embed. |
| carve-php-chat | carve-php | Renders Carve to chat-platform markup (WhatsApp, Slack, Telegram, Discord) via data-driven flavor definitions. |
Benchmarks
| Project | Description |
|---|---|
| carve-bench | Cross-engine render performance benchmarks (carve-js / carve-php / carve-rs). |
AI / agent tooling
Skills and servers that let AI coding agents author, validate and convert Carve.
| Project | Target | Status |
|---|---|---|
| carve-skill | Claude Code / agents | Authoring skill - a syntax card, the Markdown/Djot trap list, and a carve lint validation loop so agents write valid .crv the first time. |
| carve-mcp | MCP clients | Local stdio server exposing the carve-js linter, formatter, renderers, AST, HTML/Markdown/Djot import and concise authoring resources. No filesystem or network access by default. Not yet published - run from source. |
Resources
| Project | Description |
|---|---|
| awesome-carve | Curated list of Carve tools, libraries, and resources. |
| homebrew-carve | Homebrew tap for installing Carve tools. |
| PHP Sandbox | Powerful live sandbox on the carve-php engine - explore syntax and extensions, inspect output, and share snippets via pastebin-style links. |
Building something new? See Build Your Own Implementation. External tools are welcome in awesome-carve even if they do not live in the org.