Skip to content

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.

ProjectLanguageStatus
carve-jsTypeScriptReference implementation. Tier-1 corpus passing.
carve-rsRustParser + HTML renderer with a carve CLI. Tier-1 corpus passing.
carve-phpPHPForked from djot-php; Carve syntax implemented, corpus passing. Powers the PHP sandbox and wp-carve.
carve-wasmWASMBrowser/Node bindings for carve-rs. Early.

Language bindings

Higher-level bindings and satellite packages that wrap one of the engine implementations.

ProjectLanguageNotes
carve-goGoPure-Go module via wazero + WASI over carve-rs.
carve-pyPythonPyO3 bindings over carve-rs. Enables MkDocs, Pelican, and other Python pipelines.
carve-rbRubyNative gem via magnus over carve-rs.
carve-componentsReact / VueUI components for rendering Carve markup in the browser.
carve-wysiwygTypeScriptWYSIWYG editor / live sandbox (Tiptap + carve-grammars).

Editor support

Syntax highlighting, structural editing, and diagnostics inside editors.

ProjectTargetStatus
vscode-carveVS CodeHighlighting, snippets, live preview.
emacs-carveEmacsMajor mode for .crv files.
vim-carveVim / NeovimSyntax highlighting + tree-sitter grammar.
sublime-carveSublime TextSyntax package for .crv files.
sublime-carve-lspSublime TextLSP helper package - diagnostics, hover and symbols via the Carve language server.
helix-carveHelixEditor support for Carve.
intellij-carveJetBrains IDEsHighlighting, live preview, and export for IntelliJ, PhpStorm, etc.
zed-carveZedEditor support.
tree-sitter-carveTree-sitterGrammar for highlighting and structural editing.
carve-lspLSPLanguage server - syntax diagnostics, Djot/Markdown collision hints. Early.

Framework integrations

Carve embedded in another tool or framework.

ProjectHostStatus
mkdocs-carveMkDocsPlugin: renders .crv pages in MkDocs documentation sites.
jekyll-carveJekyllConverter plugin for .crv pages.
eleventy-carveEleventy (11ty)Plugin for processing Carve source files.
astro-carveAstroIntegration for importing .crv pages.
hugo-carveHugoPreprocessor that converts .crv content to HTML, via carve-go.
symfony-carveSymfonyBundle to render Carve markup to HTML via carve-php.
symfony-carve-demoSymfonyDemo app showcasing the symfony-carve bundle.
laravel-carveLaravelIntegration with Blade directives, services, validation, and caching.
laravel-carve-demoLaravelRunnable app demonstrating every feature of laravel-carve.
shopware-carveShopware 6Twig filters, CMS element, product/category fields, admin live preview, mail, and a CLI.
wp-carveWordPressPlugin on the carve-php engine - live preview, multi-format paste, REST API.
carve-grammarsTiptapEditor kit and Carve serializer.
vite-plugin-carveViteImport .crv documents as rendered HTML. Early.

PDF / output

Render Carve documents to formats beyond HTML.

ProjectOutputNotes
carve-pdfPDFRender .crv documents to clean, paginated PDFs.
carve-hexapdfPDFCarve to PDF via the pure-Ruby HexaPDF engine (over carve-lang / carve-rb).
pandoc-carveLaTeX, Typst, DOCX, PDF, ...Carve AST to Pandoc JSON bridge; reaches every pandoc writer and makes {=latex}-style raw spans fire.

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.

BridgeModelRuntimeCarve to itIt to Carve
pandoc-carvePandoc ASTNode + pandoc✅ every pandoc writer✅ everything pandoc reads
carve-grammarsProseMirror / TiptapNodecarveToProseMirrorserializeToCarve
carve-phpProseMirror / TiptapPHPProseMirrorRendererProseMirrorToCarve

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.

ProjectTargetNotes
carve-php-media-embedcarve-phpEmbeds audio/video from 30+ providers via dereuromark/media-embed.
carve-php-chatcarve-phpRenders Carve to chat-platform markup (WhatsApp, Slack, Telegram, Discord) via data-driven flavor definitions.

Benchmarks

ProjectDescription
carve-benchCross-engine render performance benchmarks (carve-js / carve-php / carve-rs).

AI / agent tooling

Skills and context packs that teach AI coding agents to author Carve.

ProjectTargetStatus
carve-skillClaude Code / agentsAuthoring skill - a syntax card, the Markdown/Djot trap list, and a carve lint validation loop so agents write valid .crv the first time.

Resources

ProjectDescription
awesome-carveCurated list of Carve tools, libraries, and resources.
PHP SandboxPowerful 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.

Released under the MIT License.