Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs2.openclaw.ai/llms.txt

Use this file to discover all available pages before exploring further.

This page captures the evidence behind the May 2026 OpenClaw performance, package-size, dependency, and shrinkwrap cleanup. It is the technical companion to the public blog post. Two audits are combined here:
  • Release performance sweep: GitHub Releases from v2026.5.27 back through stable v2026.4.23, using the OpenClaw Performance workflow, profile=smoke, repeat=1, mock-provider lane.
  • Earlier April context: published clawgrit-reports mock-provider baselines from v2026.4.1 through v2026.5.2, used only to avoid treating the broken late-April releases as the public performance baseline.
  • Install footprint sweep: fresh npm install --ignore-scripts installs into temporary packages, with du -sk node_modules for size and a node_modules walk for package-instance counts.
  • npm package size sweep: npm pack openclaw@<version> --dry-run --json for published releases, recording compressed tarball size, unpacked size, and file count.
The main performance sweep uses one smoke sample per tag. Earlier April context uses published repeat-3 medians from clawgrit-reports. Treat the numbers as trend evidence and regression-hunting signal, not as release-gate statistics.

Snapshot

Performance coverage: 76 requested releases, 73 artifact-backed points, and 3 unavailable CI runs. Latest stable measured point: v2026.5.27.

Stable agent turn

2.9x faster cold turn
  • v2026.4.14: 9.8s
  • v2026.5.27: 3.4s

Published package

17.8MB tarballLatest stable package, down from the 43.3MB March package-size peak.

Latest stable install

786.9MB fresh installv2026.5.27 still contains the nested OpenClaw dependency tree. The next-release state on main is 407.4MB.

Dependency graph

371 installed packagesLatest stable release. Current main is down to 314 after the follow-up dependency cleanup.

Install Footprint Timeline

Monthly high

645 dependencies2026.2.26 was the monthly dependency-count high in this sample.

Shrinkwrap introduced

1,020.6MB install2026.5.22 added root shrinkwrap and exposed a package-shape problem: 911.8MB landed under nested openclaw/node_modules.

Latest stable

786.9MB install2026.5.27 reduced the peak but still installed a 675.9MB nested OpenClaw tree.

Next-release state

407.4MB installCurrent main keeps shrinkwrap, removes the nested tree, and installs 314 packages.
Shrinkwrap was not the problem by itself. The bad package shape was. Current main still ships shrinkwrap, but npm no longer materializes a second OpenClaw dependency tree during install.

What Changed After 5.27

The cleanup between v2026.5.27 and current main removed the duplicate default-install graph instead of removing the capabilities themselves.

Root default graph

Root shrinkwrap package paths fell from 372 to 331. Unique package names fell from 357 to 318.

Direct root dependencies

@earendil-works/pi-agent-core, @earendil-works/pi-ai, @earendil-works/pi-coding-agent, and pdfjs-dist left the default root dependency path.

Native optional cones

The all-platform @napi-rs/canvas and @mariozechner/clipboard native package cones stopped landing in the default install.

Supply-chain surface

Fewer default packages means fewer tarballs, maintainers, native binaries, install-time behaviors, and transitive update paths to trust by default.

Headline Numbers

Do not use the late-April broken rows as public performance baselines. v2026.4.23 and v2026.4.29 are useful regression evidence, but the large 14x-style deltas mostly describe the recovery from a bad release line. For the blog narrative, use the earlier April published baseline as scale:
MetricEarlier April baselinev2026.5.27Delta
Cold agent turn9,819ms3,378ms65.6% lower, 2.9x faster
Warm agent turn7,458ms2,973ms60.1% lower, 2.5x faster
Agent peak RSS686.2MB635.5MB7.4% lower
The earlier April baseline is v2026.4.14 from the published clawgrit-reports mock-provider run. That run used repeat 3 and failed only because the diagnostic timeline was not emitted; the cold, warm, and RSS medians are still useful as rough scale. Treat this as narrative context, not a release-gate statistic. Within the single-sample stable May sweep, the line moved more modestly:
Metricv2026.5.2v2026.5.27Delta
Cold agent turn3,897ms3,378ms13.3% lower
Warm agent turn3,610ms2,973ms17.6% lower
Agent peak RSS613.7MB635.5MB3.6% higher
Best prerelease point in the single-sample sweep:
Metricv2026.5.27v2026.5.27-beta.1Delta
Cold agent turn3,378ms2,575ms23.8% lower
Warm agent turn2,973ms2,217ms25.4% lower
Agent peak RSS635.5MB635.3MBflat

Install footprint

MetricBaselineCurrent mainDelta
Install size from 2026.5.22 peak1,020.6MB407.4MB60.1% lower
Install size from latest release 2026.5.27786.9MB407.4MB48.2% lower
Dependencies from monthly high 2026.2.2664531451.3% lower
Dependencies from latest release 2026.5.2737131415.4% lower
Nested openclaw/node_modules from 2026.5.22911.8MB0MBremoved
Nested openclaw/node_modules from 2026.5.27675.9MB0MBremoved

npm package size

VersionCompressed tarballUnpacked packageFilesNotes
2026.1.3012.8MB33.5MB4,607early rebranded package
2026.2.2623.6MB82.9MB10,125feature growth
2026.3.3143.3MB182.6MB21,037package-size high point
2026.4.2922.9MB74.6MB9,309package pruning visible
2026.5.1223.4MB80.1MB12,035major external-plugin split
2026.5.2217.2MB76.9MB12,386docs/assets excluded from package
2026.5.2717.8MB79.0MB12,509latest stable package
2026.5.12 is the visible plugin-extraction milestone in the changelog: Amazon Bedrock, Bedrock Mantle, Slack, OpenShell sandbox, Anthropic Vertex, Matrix, and WhatsApp moved out of the core dependency path so their dependency cones install with those plugins instead of every core install.

Kova agent turn summary

The April stable line contains two different stories. Earlier April was slow but recognizable. Late April became a regression cliff. v2026.5.2 is where the mock-provider lane first drops into the 3-5s range and starts passing consistently in the supplied sweep. Earlier published context:
ReleaseKovaCold turnWarm turnAgent peak RSS
v2026.4.10FAIL11,031ms7,962ms679.0MB
v2026.4.12FAIL11,965ms8,289ms713.5MB
v2026.4.14FAIL9,819ms7,458ms686.2MB
v2026.4.20FAIL22,314ms18,811ms810.8MB
v2026.4.22FAIL9,630ms7,459ms743.0MB
Supplied single-sample sweep:
ReleaseKovaCold turnWarm turnAgent peak RSS
v2026.4.23FAIL47,847ms8,010ms1,082.7MB
v2026.4.24FAIL48,264ms25,483ms996.0MB
v2026.4.25FAIL81,080ms59,172ms1,113.9MB
v2026.4.26FAIL76,771ms54,941ms1,140.8MB
v2026.4.27FAIL60,902ms33,699ms1,156.0MB
v2026.4.29FAIL94,031ms57,334ms3,613.7MB
v2026.5.2PASS3,897ms3,610ms613.7MB
v2026.5.7PASS3,923ms3,693ms654.1MB
v2026.5.12PASS7,248ms6,629ms834.8MB
v2026.5.18PASS3,301ms2,913ms630.3MB
v2026.5.20PASS3,413ms2,952ms643.2MB
v2026.5.22PASS4,494ms4,093ms654.3MB
v2026.5.26PASS2,626ms2,282ms660.4MB
v2026.5.27-beta.1PASS2,575ms2,217ms635.3MB
v2026.5.27PASS3,378ms2,973ms635.5MB

Source probes

Source probes were skipped for 17 successful older refs because those source trees did not yet have the required probe entry points. Agent-turn metrics still exist for those refs. Representative source-probe points:
ReleaseDefault readyz p5050 plugins readyz p50CLI health p50Plugin max RSS
v2026.4.292,819ms2,618ms1,679ms389.0MB
v2026.5.22,324ms2,013ms1,384ms377.2MB
v2026.5.71,649ms1,540ms1,175ms387.6MB
v2026.5.181,942ms1,927ms607ms426.5MB
v2026.5.201,966ms1,987ms621ms455.0MB
v2026.5.222,081ms1,884ms5,095ms444.2MB
v2026.5.261,546ms1,634ms656ms400.4MB
v2026.5.27-beta.11,462ms1,548ms548ms394.0MB
v2026.5.271,874ms1,925ms660ms398.0MB
The v2026.5.22 CLI health spike is visible in this table even though the agent-turn lane still passed. Keep the source probes when investigating targeted CLI or gateway regressions.

Install footprint audit

Dependency samples use one stable release per month, plus the 2026.5.22 shrinkwrap-introduction event, latest 2026.5.27, and current main.
PointInstalled depsFresh installOpenClaw packageNested openclaw/node_modulesRoot shrinkwrapCanvas install behavior
Jan 2026.1.30605438.4MB45.8MB2.4MBnotop-level wrapper + darwin-arm64
Feb 2026.2.26645575.7MB110.1MB3.5MBnotop-level wrapper + darwin-arm64
Mar 2026.3.31438584.1MB234.8MB0MBnotop-level wrapper + darwin-arm64
Apr 2026.4.29392335.0MB97.4MB0MBnonone installed
2026.5.224011,020.6MB1,020.4MB911.8MByesnested: all 12 @napi-rs/canvas packages
May 2026.5.26371767.5MB767.4MB656.4MByesnested: all 12 @napi-rs/canvas packages
Latest 2026.5.27371786.9MB786.7MB675.9MByesnested: all 12 @napi-rs/canvas packages
Current main314407.4MB101.0MB0MByestop-level wrapper + darwin-arm64

Shrinkwrap boundary

Before shrinkwrap

2026.5.20 has no root shrinkwrap and no large nested OpenClaw dependency tree.

Introduced

2026.5.22 adds root shrinkwrap and installs 911.8MB under nested openclaw/node_modules.

Latest stable

2026.5.27 keeps shrinkwrap and still installs 675.9MB under nested openclaw/node_modules.

Current main

main keeps shrinkwrap and removes the nested OpenClaw dependency tree.
Published tarball inspection verifies the boundary:
VersionPublished stable?Root npm-shrinkwrap.jsonNotes
2026.5.20yesnolast stable release before shrinkwrap
2026.5.21non/ano stable npm release
2026.5.22yesyesshrinkwrap introduced
2026.5.23non/ano stable npm release
2026.5.24non/ano stable npm release
2026.5.25non/ano stable npm release
2026.5.26yesyesnested dependency tree still present
2026.5.27yesyesnested dependency tree still present
mainn/ayesnested dependency tree removed
The important distinction: shrinkwrap itself is not the problem. Current main still ships root shrinkwrap. The problem was the package shape that made npm materialize a large nested OpenClaw dependency tree and all 12 @napi-rs/canvas platform packages. For a plain-English explanation of shrinkwrap and the maintainer-level package checks, see npm shrinkwrap.

Supply-chain interpretation

Dependency count is an operational security metric, not only an install-size metric. Every package expands the set of maintainers, tarballs, transitive updates, optional native binaries, and install-time behaviors that operators must trust. The cleanup direction is:
  • keep heavy and optional capabilities outside the default core install
  • make plugin packages own their runtime dependency graph
  • avoid runtime package-manager repair during Gateway startup
  • preserve deterministic installs without causing all-platform native package materialization
  • keep install scripts disabled in package acceptance and measurement paths
  • catch nested dependency trees and native optional dependency explosions before publishing
Related docs:

Unavailable performance runs

ReleaseRunResultReason
v2026.5.3-126561664645failuremock-provider job failed: CLI startup timed out waiting for qa-channel ready; no qa-channel accounts reported
v2026.5.326561666722failuremock-provider job failed: CLI startup timed out waiting for qa-channel ready; no qa-channel accounts reported
v2026.4.29-beta.226561683635cancelledoptional baseline fetch hung before artifact upload

Follow-up gates

Recommended release checks from this sweep:
  1. Run the mock-provider performance smoke for release candidates and retain artifacts.
  2. Track cold turn, warm turn, agent RSS, Gateway readyz, and CLI health.
  3. Fresh-install the packed tarball with scripts disabled.
  4. Record installed dependency count, install size, package size, nested openclaw/node_modules size, and native optional package shape.
  5. Fail or hold release review when nested dependency trees or all-platform native packages appear unexpectedly.