
update-v8
Step-by-step guide for updating the V8 JavaScript engine in workerd, including patch rebasing, dependency updates, integrity hashes, and verification. Load this skill when performing or assisting with a V8 version bump.
- Installs
- 49
- Last 24h
- —
- Trending rank
- —
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/cloudflare/workerd --skill update-v8- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads update-v8 automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
Updating V8 in workerd
V8 updates are high-risk changes that require careful patch management and human judgment for merge conflicts. This skill covers the full process. Always confirm the target version with the developer before starting.
See also the V8 update reference.
Always communicate and confirm with the developer at each step. Never take irreversible actions (like dropping patches or updating hashes) without explicit confirmation.
Prerequisites
depot_toolsinstalled and on$PATH(setup guide)- A local V8 checkout (outside the workerd repo to avoid confusing Bazel):
mkdir v8 && cd v8 && fetch v8
Step 1: Identify the target version
Check chromiumdash.appspot.com for the latest V8 version used by Chrome Beta. Confirm the target <new_version> with the developer.
Find the current version in build/deps/v8.MODULE.bazel:
VERSION = "14.5.201.6" # example — check the actual file
We'll call this <old_version>.
Step 2: Sync local V8 to the current workerd version
cd <path_to_v8>/v8
git checkout <old_version>
gclient sync
Step 3: Apply workerd's patches onto a branch
git checkout -b workerd-patches
git am --keep-non-patch <path_to_workerd>/patches/v8/*
There are multiple patches in patches/v8/. These include workerd-specific customizations:
| Patch category | Examples |
|---|---|
| Serialization | Custom ValueSerializer/Deserializer format versions, proxy/function host object support |
| Build system | Windows/Bazel fixes, shared linkage, dependency path overrides (fp16, fast_float, simdutf, dragonbox) |
| Embedder hooks | Promise context tagging, cross-request promise resolution, extra isolate embedder slot |
| Bug workarounds | Memory leak assert disable, slow handle check disable, builtin-can-allocate workaround |
| API additions | String::IsFlat, AdjustAmountOfExternalAllocatedMemory exposure, additional Exception constructors |
| ICU/config | ICU data export, googlesource ICU binding, verify_write_barriers flag |
Step 4: Rebase patches onto the new V8 version
git rebase --onto <new_version> <old_version>
This is where most of the work happens. Expect conflicts. Key guidance:
- Build-system patches (dependency paths, Bazel config) conflict most often as upstream V8 restructures its build.
- API patches (new methods on V8 classes) may conflict if upstream changed the surrounding code.
- Always preserve workerd's intent — understand what each patch does before resolving conflicts. The patch filenames are descriptive.
- Do not drop patches without explicit confirmation from the developer.
- Do not auto-resolve conflicts — flag them for human review. Merge conflicts in V8 patches almost always require human judgment.
Step 5: Regenerate patches
git format-patch --full-index -k --no-signature --no-stat --zero-commit <new_version>
This produces numbered .patch files in the current directory.
Step 6: Replace patches in workerd
Always confirm with the human before replacing patches. If any patches were dropped or added, the human needs to review the changes.
rm <path_to_workerd>/patches/v8/*
cp *.patch <path_to_workerd>/patches/v8/
Step 7: Update build/deps/v8.MODULE.bazel
Three things need updating:
-
VERSION: Set to<new_version>. -
INTEGRITY: Compute the sha256 hash of the new tarball:curl -sL "https://github.com/v8/v8/archive/refs/tags/<new_version>.tar.gz" -o v8.tar.gz openssl dgst -sha256 -binary v8.tar.gz | openssl base64 -AFormat:
"sha256-<base64_hash>=". Alternatively, attempt a build and copy the expected hash from Bazel's mismatch error. -
PATCHES: Update the list if patches were added, removed, or renamed. The list must match the filenames inpatches/v8/exactly, in order.
Step 8: Update V8's dependencies
V8 depends on several libraries that are pinned in build/deps/v8.MODULE.bazel and build/deps/deps.jsonc. Check the local V8 checkout's DEPS file for commit versions:
cat <path_to_v8>/v8/DEPS
Dependencies to check and update:
| Dependency | Where | Notes |
|---|---|---|
com_googlesource_chromium_icu | v8.MODULE.bazel (git_repository commit) | Chromium fork; update commit from V8's DEPS |
perfetto | deps.jsonc (managed by update-deps.py) | V8 depends via Chromium; safe to bump to latest GitHub release |
simdutf | deps.jsonc (managed by update-deps.py) | V8 depends via Chromium; safe to bump to latest GitHub release |
For dependencies in deps.jsonc, you can use the update script:
python3 build/deps/update-deps.py perfetto
python3 build/deps/update-deps.py simdutf
This fetches the latest version, computes integrity hashes, and regenerates the gen/ MODULE.bazel fragments. Do not hand-edit files in build/deps/gen/.
Step 9: Build and test
# Full build
just build
# Full test suite
just test
Watch for:
-
Build failures from V8 API changes: V8 may deprecate or change APIs between versions. Search for deprecation warnings in the build output. Common areas affected:
src/workerd/jsg/— V8 binding layer, most directly affectedsrc/workerd/api/— APIs that interact with V8 types directlysrc/workerd/io/worker.c++— Isolate creation and configuration
-
Test failures from behavior changes: V8 may change observable JS behavior. Check:
just test //src/workerd/jsg/...— JSG binding testsjust test //src/workerd/api/tests/...— API tests- Node.js compatibility tests (
just node-test) - Web Platform Tests (
just wpt-test)
-
New V8 deprecation warnings: These are future breakage signals. Document them in the PR description even if tests pass.
Step 10: Commit and submit
Prompt the user to commit the changes and push for review.
Never push the branch for review without a human review of the patch changes.
You May prepare the draft PR text for the user. The PR should include:
- Updated
build/deps/v8.MODULE.bazel(version, integrity, patches list) - Updated patches in
patches/v8/ - Updated dependency versions if changed
- Any C++ fixes for V8 API changes
- PR description listing: old version, new version, patches that required conflict resolution, any deprecation warnings observed, and any behavior changes noted
Checklist
- Target V8 version confirmed with developer
- Local V8 checked out and synced to old version
- workerd patches applied and rebased onto new version
- Conflicts resolved with human review (no auto-resolution)
- Patches regenerated with
git format-patch - Old patches replaced with new patches in
patches/v8/ -
VERSIONupdated inv8.MODULE.bazel -
INTEGRITYupdated inv8.MODULE.bazel -
PATCHESlist updated if patches added/removed/renamed - V8 dependencies checked and updated (ICU, perfetto, simdutf)
-
just buildsucceeds -
just testpasses (or failures documented and explained) - No new patches dropped without explicit confirmation
- PR description documents version change, conflict resolutions, and deprecation warnings
Troubleshooting
Bazel integrity mismatch: If you see expected sha256-... but got sha256-..., copy the "got" hash into the INTEGRITY field. This happens when the hash was computed incorrectly or the tarball was re-generated by GitHub.
Patch won't apply: A patch that applied cleanly during git am but fails in Bazel means the git format-patch output differs from what Bazel expects. Verify you used --full-index -k --no-signature --no-stat --zero-commit flags. Also verify patch order matches the PATCHES list.
ICU build failures: ICU is a Chromium fork fetched via git_repository. If the commit in v8.MODULE.bazel is wrong, you'll see missing-file or compilation errors in ICU. Cross-reference with V8's DEPS file for the correct commit.
update-deps.py fails: The script requires network access to fetch versions. If a dependency's GitHub release format changed, you may need to update the version manually in deps.jsonc and run python3 build/deps/update-deps.py to regenerate hashes.
FAQ
What does the update-v8 skill do?
Step-by-step guide for updating the V8 JavaScript engine in workerd, including patch rebasing, dependency updates, integrity hashes, and verification. Load this skill when performing or assisting with a V8 version bump.
How do I install update-v8?
Run npx skills add https://github.com/cloudflare/workerd --skill update-v8 in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/update-v8/ (personal) or .claude/skills/update-v8/ (project).
Which AI agents can use update-v8?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is update-v8 safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains update-v8?
It is published by cloudflare in cloudflare/workerd, and it is an official skill from the maker of the technology it covers. It has 49 recorded installs.
More from cloudflare/workerd
verification-before-completion
cloudflare/workerd
Use when about to claim work is complete, fixed, or passing, before committing or creating PRs - requires running verification commands and confirming output before making any success claims; evidence before assertions always
rust-review
cloudflare/workerd
Open the skill to read its SKILL.md instructions.
dad-jokes
cloudflare/workerd
After completing any task that took more than 5 tool calls, or after long-running builds/tests finish, load this skill and deliver a dad joke to lighten the mood. Also load before any user-requested joke, pun, or limerick. Never improvise jokes without loading this skill first.
markdown-drafts
cloudflare/workerd
Use markdown formatting when drafting content intended for external systems (GitHub issues/PRs, Jira tickets, wiki pages, design docs, etc.) so formatting is preserved when the user copies it. Load this skill before producing any draft the user will paste elsewhere.
receiving-code-review
cloudflare/workerd
Use when receiving code review feedback, before implementing suggestions, especially if feedback seems unclear or technically questionable - requires technical rigor and verification, not performative agreement or blind implementation
workerd-api-review
cloudflare/workerd
Performance optimization, API design & compatibility, security vulnerabilities, and standards spec compliance for workerd code review. Covers tcmalloc-aware perf analysis, compat flags, autogates, web standards adherence, and security patterns. Load this skill when reviewing API changes, performance-sensitive code, security-relevant code, or standards implementations.
Popular devops & cloud skills
microsoft-foundry
microsoft/azure-skills
Build, deploy, evaluate, optimize, fine-tune, and manage Microsoft Foundry agents, models, and resources end to end. USE FOR: foundry, azd ai agent, azd provision/deploy, hosted agent scaffold/develop/run/deploy/troubleshoot, prompt agent create, managed harness agent create, GitHub Copilot harness agent, create agent, update agent, add tool to agent, invoke agent, agent insights, evaluate agent, batch eval, continuous eval, continuous monitoring, agent CI/CD, optimize prompt, improve prompt, optimize agent instructions, Agent Optimizer scaffold, dataset curation from traces, deploy model, model fine-tuning (SFT/DPO/RFT), Foundry project, RBAC, role assignment, permissions, quota, capacity, region, deployment failure, AI Services, create Foundry resource, knowledge index, customize deployment, onboard, availability, training-data, grader, distillation, large file upload. DO NOT USE FOR: Azure Functions, App Service, general Azure deploy (use azure-deploy), general Azure prep (use azure
azure-diagnostics
microsoft/azure-skills
Debug Azure production issues on Azure using AppLens, Azure Monitor, resource health, and safe triage. WHEN: debug production issues, troubleshoot app service, app service high CPU, app service deployment failure, troubleshoot container apps, container app 503 or target port mismatch, troubleshoot functions, function telemetry missing or stopped after a config/connection-string change, troubleshoot AKS, VM RDP, Linux SSH, VM black screen, can't connect to VM, reset VM password, NSG or firewall blocking, kubectl cannot connect, kube-system/CoreDNS failures, pod pending, crashloop, node not ready, upgrade failures, analyze logs, KQL, insights, image pull failures, cold start issues, health probe failures, resource health, root cause of errors, troubleshoot event hubs, troubleshoot service bus, messaging SDK error, AMQP connection failure, message lock lost, lock renewal during long-running processing, service bus dead letter.
azure-prepare
microsoft/azure-skills
Prepare azd-based Azure projects for deployment: generates azure.yaml, infrastructure (Bicep/Terraform), and Dockerfiles for the Azure Developer CLI (azd) workflow. USE ONLY when the user explicitly wants to use azd as the deployment tool, or the project already has an azure.yaml file. DO NOT USE FOR: non-azd deployments, Python App Service code-only deploys (use python-appservice-deploy), or cross-cloud migration (use azure-cloud-migrate). WHEN: prepare app for azd, create azure.yaml, set up azd infrastructure, modernize app for Azure with azd, deploy with azd, function app, timer trigger, service bus trigger, event-driven function, managed identity, generate Bicep, generate Terraform, create and deploy to Azure.
azure-ai
microsoft/azure-skills
Use for Azure AI: Search, Speech, OpenAI, Document Intelligence. Helps with search, vector/hybrid search, speech-to-text, text-to-speech, transcription, OCR. WHEN: AI Search, query search, vector search, hybrid search, semantic search, speech-to-text, text-to-speech, transcribe, OCR, convert text to speech.
azure-deploy
microsoft/azure-skills
Execute Azure deployments for ALREADY-PREPARED applications that have existing .azure/deployment-plan.md and infrastructure files. DO NOT use this skill when the user asks to CREATE a new application — use azure-prepare instead. This skill runs azd up, azd deploy, terraform apply, and az deployment commands with built-in error recovery. Requires .azure/deployment-plan.md from azure-prepare and validated status from azure-validate. WHEN: "run azd up", "run azd deploy", "execute deployment", "push to production", "push to cloud", "go live", "ship it", "bicep deploy", "terraform apply", "publish to Azure", "launch on Azure". DO NOT USE WHEN: "create and deploy", "build and deploy", "create a new app", "set up infrastructure", "create and deploy to Azure using Terraform" — use azure-prepare for these.
azure-validate
microsoft/azure-skills
Pre-deployment validation for Azure readiness. Run deep checks on configuration, infrastructure (Bicep or Terraform), RBAC role assignments, managed identity permissions, and prerequisites before deploying. WHEN: validate my app, check deployment readiness, run preflight checks, verify configuration, check if ready to deploy, validate azure.yaml, validate Bicep, test before deploying, troubleshoot deployment errors, validate Azure Functions, validate function app, validate serverless deployment, verify RBAC roles, check role assignments, review managed identity permissions, what-if analysis, validate Container Apps deployment.