Carve / benchmarks

Recorded performance evidence

How fast does Carve render?

Measured engine snapshots on shared hardware. Explore the default conversion route and the full language corpus separately.

2026-10-04T16:39:40.574Z; Node v22.22.2; PHP 8.5.11 (cli) (built: Sep 24 2026 13:49:29) (NTS), tracing JIT; rustc 1.97.1 (8bab26f4f 2026-07-14); serial processes on a shared host. Full-run load was not recorded. Separate snapshots do not isolate engine speed changes.

Track A

Core source to HTML

Default public conversion APIs, without opt-in extensions. Peers use equivalent logical content in their native syntax. Features and output differ; these rows measure rendering cost.

LanguageCarveCarve MB/sFastest peerPeer MB/s
JavaScriptcarve-js16.55djot.js6.53
PHPcarve-php17.16djot-php19.71
Rustcarve-rs125.84pulldown-cmark130.10
CSV with pipe tablesSnapshot JSON

Core conversion throughput with and without pipe tables, in separate panels
Download SVG
Carve core throughput with pipe tables
Download SVG

JavaScript

EngineMB/s
carve-js16.55
djot.js6.53
markdown-it6.09

PHP

EngineMB/s
carve-php17.16
djot-php19.71
league/commonmark-gfm1.59

Rust

EngineMB/s
carve-rs125.84
jotdown43.71
comrak42.65
pulldown-cmark130.10

Historical release comparison and capability scoring · Current dev-main measurement report

JavaScript without pipe tables

Carve, Djot, markdown-it and commonmark.js on equivalent content. This 14-point workload excludes pipe tables and is separate from the comparison with pipe tables above. Final values use median timing across all samples from both measurement rounds. Carve JS uses merged main a0e9960, with fast-path use verified. Peers use the released packages named in the report.

EngineMedian ms/opMB/s
carve-js2.216321.40
djot.js6.06087.83
markdown-it5.94868.07
commonmark.js2.879516.67
Final JavaScript throughput without pipe tables
Download SVG

Method, individual rounds and measurement provenance · Raw samples and controls

Track B

Full corpus and extension tiers

The mixed corpus exercises the normal parser and public AST. Competitor parsers do not accept equivalent syntax, so this track compares Carve implementations and internal PHP tiers.

carve 9db91206d1a4a8a8cf795c48210bca49d66f14d6 (2,134 documents); fixed committed corpus retained

Throughput of the three Carve engines for each corpus size
Download SVG

small (1.2 KB)

Enginems/opMB/srel
carve-js0.63231.865.47x
carve-php1.38940.8512.02x
carve-rs0.115610.181.00x

medium (63.6 KB)

Enginems/opMB/srel
carve-js75.96970.822.73x
carve-php133.53940.464.80x
carve-rs27.79942.231.00x

large (508.6 KB)

Enginems/opMB/srel
carve-js583.08280.851.67x
carve-php1435.79230.354.11x
carve-rs349.01531.421.00x

PHP authoritative extension tiers

ProfileRegistered extensionsms/opMB/scost vs Tier 1
Tier 1 core/default02.6517.74baseline
Tier 2 stack82.9515.91+12%
Tier 3 stack203.3713.95+27%
PHP throughput with core, Tier 2, and Tier 3 extension profiles
Download SVG

Full corpus report · Worker results and provenance

Engine release history

4 tags per engine, a pinned development main when its measured source differs, and candidate PRs when requested. Compare elapsed time within each engine; graphs mark changed output.

Explore the version history · History CSV · Samples and source commits

js elapsed time across release tags, development main and candidate PRs
Download js history SVG
php elapsed time across release tags, development main and candidate PRs
Download php history SVG
rs elapsed time across release tags, development main and candidate PRs
Download rs history SVG

Read the measurements

Method and source commits

Higher MB/s is better. Current core charts use median timing across fourteen warmed samples; full-corpus rows average many in-process iterations. The two tracks have different API costs and cannot be compared as equal work.

These are machine-specific snapshots. Shared host activity affects timings; controlled paired runs are needed to establish improvements or regressions.

Core comparison host

2026-10-04T16:33:07.040Z; AMD Ryzen 9 PRO 7940HS w/ Radeon 780M Graphics; Node v22.22.2; PHP PHP 8.5.11 (cli) (built: Sep 24 2026 13:49:29) (NTS); rustc 1.97.1 (8bab26f4f 2026-07-14); Allowed CPUs: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15. Child processes inherit this affinity, including Node compiler and GC threads.

Core peer versions

djot.js 0.3.2; markdown-it 15.0.0; Djot PHP c8416eec035b97b56f25df64e941b637830a8187; league/commonmark 2.10.0. Carve source commits: js a0e996083129b9d51e63be6982d79843fd35ea32; php 41c9fe6026e91ee0396dc98ee65be64b6080d3b3; rs 914704f80c08bc3b52703c9bc06dc3ff89ded7f4. Rust peer versions are recorded in the downloadable Cargo lock.

Full-corpus engines measured

carve-js @markup-carve/carve 0.1.10 (local checkout carve-bench-final-js @ a0e996083), carve-php markup-carve/carve-php (local checkout carve-bench-final-php @ 41c9fe602), carve-rs carve-lang 0.1.8 (local checkout carve-bench-final-rs @ 914704f80)

Site source: ed2d02d031d1427f428a632568b9e9f4637ce1e8.

Reproduce these runs · Feature scoring · HTML import comparison

Download reports

Core comparison · Full corpus · Reproduction guide · Feature scoring · Historical findings · All site data