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.
| Language | Carve | Carve MB/s | Fastest peer | Peer MB/s |
|---|---|---|---|---|
| JavaScript | carve-js | 16.55 | djot.js | 6.53 |
| PHP | carve-php | 17.16 | djot-php | 19.71 |
| Rust | carve-rs | 125.84 | pulldown-cmark | 130.10 |
JavaScript
| Engine | MB/s |
|---|---|
| carve-js | 16.55 |
| djot.js | 6.53 |
| markdown-it | 6.09 |
PHP
| Engine | MB/s |
|---|---|
| carve-php | 17.16 |
| djot-php | 19.71 |
| league/commonmark-gfm | 1.59 |
Rust
| Engine | MB/s |
|---|---|
| carve-rs | 125.84 |
| jotdown | 43.71 |
| comrak | 42.65 |
| pulldown-cmark | 130.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.
| Engine | Median ms/op | MB/s |
|---|---|---|
| carve-js | 2.2163 | 21.40 |
| djot.js | 6.0608 | 7.83 |
| markdown-it | 5.9486 | 8.07 |
| commonmark.js | 2.8795 | 16.67 |
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
small (1.2 KB)
| Engine | ms/op | MB/s | rel |
|---|---|---|---|
| carve-js | 0.6323 | 1.86 | 5.47x |
| carve-php | 1.3894 | 0.85 | 12.02x |
| carve-rs | 0.1156 | 10.18 | 1.00x |
medium (63.6 KB)
| Engine | ms/op | MB/s | rel |
|---|---|---|---|
| carve-js | 75.9697 | 0.82 | 2.73x |
| carve-php | 133.5394 | 0.46 | 4.80x |
| carve-rs | 27.7994 | 2.23 | 1.00x |
large (508.6 KB)
| Engine | ms/op | MB/s | rel |
|---|---|---|---|
| carve-js | 583.0828 | 0.85 | 1.67x |
| carve-php | 1435.7923 | 0.35 | 4.11x |
| carve-rs | 349.0153 | 1.42 | 1.00x |
PHP authoritative extension tiers
| Profile | Registered extensions | ms/op | MB/s | cost vs Tier 1 |
|---|---|---|---|---|
| Tier 1 core/default | 0 | 2.65 | 17.74 | baseline |
| Tier 2 stack | 8 | 2.95 | 15.91 | +12% |
| Tier 3 stack | 20 | 3.37 | 13.95 | +27% |
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
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