with one click
release-docs
// Build and update the developer documentation site for a new release
// Build and update the developer documentation site for a new release
Run realistic Chonk (client IVC) benchmarks using pinned protocol inputs. Covers native and WASM proving, per-circuit breakdowns, BB_BENCH instrumentation, and profiling code augmentation. Use when asked to benchmark, profile, or measure Chonk proving performance.
Run the Chonk (client-IVC) prover on the remote EC2 and collect Perfetto-compatible JSON traces. Supports both native and WASM runtimes. Generates a one-click Perfetto UI link for visual analysis. Use when asked to profile, trace, or visualize Chonk proving performance.
Run benchmarks on the dedicated remote EC2 benchmarking machine for noise-free, single-run results. Handles env var validation, lock management, binary transfer, and result collection. Use with /benchmark-chonk or any BB benchmark target.
Analyze source-file changes referenced by documentation, update affected docs when needed, and report documentation reference updates for a PR.
Reference for merge-train automation internals -- workflows, scripts, CI integration, and configuration. Use when modifying or debugging merge-train infrastructure.
Manage pinned Chonk IVC inputs and the Chonk/rollup UltraHonk proving checks. Use when updating, testing, benchmarking, or reviewing the CI flow for Chonk input refreshes.
| name | release-docs |
| description | Build and update the developer documentation site for a new release |
| argument-hint | <RPC_URL> |
Update the Aztec developer documentation for a new release. Queries the network
for current info, updates version defaults, contract addresses, migration notes,
builds the docs, cuts a versioned snapshot, and prepares changes on next.
Supports devnet, testnet, and mainnet releases. The release type is
auto-detected from the version string returned by the network (e.g. devnet in
the version means devnet, testnet means testnet, mainnet means mainnet). If
the version string does not self-identify its release type, ask the user to confirm.
/release-docs https://v4-devnet-3.aztec-labs.com
/release-docs https://rpc.testnet.aztec-labs.com
Fetch node info from the provided RPC URL:
curl -s -X POST -H 'Content-Type: application/json' \
-d '{"method":"node_getNodeInfo"}' <RPC_URL> | jq .result
Parse the response to extract:
nodeVersion (the version string, e.g. 4.0.0-devnet.3 or 4.1.0-rc.2)l1ContractAddresses: registry, rollup, inbox, outbox,
fee juice, staking asset, fee juice portal, fee asset handler, coin issuer,
reward distributor, governance proposer, governance, slash factoryprotocolContractAddresses: instance registry,
class registry, multi-call entrypoint, fee juicerollupVersionl1ChainIdNote: The RPC response may not include all contracts listed in networks.md.
Some addresses (like gseAddress) have been added to the RPC response over time,
so always check whether an address is already present before querying on-chain.
Contracts like Reward Booster, Staking Registry, Tally Slashing Proposer, Honk
Verifier, and others must be resolved separately in Step 9.
Detect release type from the version string:
devnet → release type is devnettestnet → release type is testnetmainnet → release type is mainnetStore all values (including the detected release type) for use in subsequent steps.
The version from step 1 tells us which git tag the docs should be built from.
git fetch origin
git tag -l "v<nodeVersion>"
git checkout v<nodeVersion>If the user provides a target version that differs from the nodeVersion
returned by the RPC (e.g. the network is still running 4.1.3 but the user
wants to prepare docs for 4.2.0), this is a pre-release docs preparation.
Ask the user to confirm the target version, then use that version instead of
nodeVersion throughout the remaining steps. The git tag for the target version
must still exist. Contract addresses from the RPC reflect the current network
state (the old version); they are still valid if the upgrade reuses the same
contracts, but ask the user to confirm whether any addresses will change at
upgrade time.
Run all work on the tag, not next. Cut on the tag so the snapshot
reflects what shipped. Then stash, switch to next, pop. Backport any newer
docs from next into the snapshot as an explicit step after the cut.
Pages under docs/docs/ (networks.md, index.md) are configured "no
versioning" in docusaurus.config.js and aren't snapshotted. Edits land
directly on next and become live. Treat them as post-release-live: if next
already has a newer version, port it in and bump the version field rather than
reverting to the tag's older copy.
aztec --version
The installed version must match the nodeVersion from step 1.
If wrong version, abort and instruct the user to install the correct one:
VERSION=<version> bash -i <(curl -sL https://install.aztec.network/<version>)
aztec get-canonical-sponsored-fpc-address
Store the address for updating docs.
Note: The Sponsored FPC is only deployed on devnet. For mainnet and testnet releases, mark the SponsoredFPC row as "Not deployed" in the L2 Contract Addresses table.
Developer docs: docs/developer_version_config.json
This file maps release types to version strings. Update the entry matching the
release type with the new version (prefixed with v):
{
"mainnet": "v4.2.0-aztecnr-rc.2",
"testnet": "v4.1.0-rc.2",
"devnet": "v4.0.0-devnet.2-patch.1",
"nightly": "v5.0.0-nightly.20260320"
}
For example, for a devnet release of 4.1.0-devnet.1, update "devnet": "v4.1.0-devnet.1".
The preprocessor (include_version.js) reads defaults from this config file, so
updating it is sufficient — you no longer need to edit hardcoded defaults in JS.
Network/operator docs are updated separately in Step 13 after the version snapshot is created (the config update requires the versioned docs directory to exist).
Generate the Aztec.nr and TypeScript API documentation for the new version. The
generation scripts automatically map version strings to stable folder names
(devnet, testnet, mainnet, nightly). When the version string doesn't
self-identify its release type, set RELEASE_TYPE explicitly.
cd docs
RELEASE_TYPE=<release_type> yarn generate:aztec-nr-api <nodeVersion>
RELEASE_TYPE=<release_type> yarn generate:typescript-api <nodeVersion>
This creates/updates the API docs in:
docs/static/aztec-nr-api/<release_type>/ (e.g. mainnet/, testnet/)docs/static/typescript-api/<release_type>/Prerequisites — you MUST build dependencies before generating API docs:
# Use submodule_update MCP tool, or:
git submodule update --init --recursive
cd noir && ./bootstrap.sh
cd yarn-project && yarn && yarn build
VERSION=<nodeVersion> bash -i <(curl -sL https://install.aztec.network/<nodeVersion>)
If generation fails, check that the tag has the required source code, that submodules are initialized, and that dependencies have been built. The build step (Step 10) will validate that API reference links resolve correctly.
Regenerate the CLI reference documentation from the installed CLI. The generation
scripts scan --help output from each CLI binary, so the installed aztec CLI
must match the release version (verified in Step 3). If the CLI is not the
correct version, the generated docs will document the wrong command set.
cd docs
./scripts/cli_reference_generation/generate_all_cli_docs.sh --force current
This updates the CLI reference files in docs/docs-developers/docs/cli/:
aztec_cli_reference.mdaztec_wallet_cli_reference.mdaztec_up_cli_reference.mdThese files are auto-generated — do not hand-edit them.
Regenerate the Node JSON-RPC API reference documentation. This script parses the
TypeScript interface definitions and Zod schemas in yarn-project/stdlib/src/interfaces/
to produce a complete markdown reference for the node_ and nodeAdmin_ RPC methods.
Prerequisite: yarn-project must be built (already done in Step 6 prerequisites).
cd docs
yarn generate:node-api-reference
This updates docs/docs-operate/operators/reference/node-api-reference.md.
The file is auto-generated — do not hand-edit it. When cutting network versioned docs (Step 13), the generated content is included in the snapshot automatically.
File: docs/docs-developers/docs/resources/migration_notes.md
Triage existing TBD items. Not all items under ## TBD necessarily belong
to the current release. Review each entry and decide whether it:
## <new version> heading## Unreleased (v<next_major>)
heading (create this heading if it doesn't exist, placed between ## TBD and
the new version heading)## TBDPresent the proposed triage to the user for confirmation before rearranging.
Create the new ## <new version> heading below ## TBD (and below any
## Unreleased sections). Move the items identified in step 1 under it.
Ensure ## TBD remains at the top with a blank line separating it from the
next heading.
Check for missing migration items by analyzing the diff between the previous release tag and the new one:
git diff v<old_version>..v<new_version> -- yarn-project/ noir-projects/
Present draft entries for user review before adding them
The networks.md L1 table includes contracts that are not returned by
node_getNodeInfo. Before updating the tables, resolve these in three tiers.
Determine the L1 RPC URL from the l1ChainId: 1 → Ethereum mainnet,
11155111 → Sepolia. The Rollup and Registry addresses are already known from
the RPC response.
First check whether the RPC response already includes gseAddress in
l1ContractAddresses — newer node versions return it directly. If present,
use it and skip the on-chain query for GSE.
# GSE (Governance Staking Escrow) — from Rollup (skip if already in RPC response)
cast call <ROLLUP_ADDRESS> "getGSE()(address)" --rpc-url <L1_RPC>
# Slasher — from Rollup
cast call <ROLLUP_ADDRESS> "getSlasher()(address)" --rpc-url <L1_RPC>
# Governance — from Registry
cast call <REGISTRY_ADDRESS> "getGovernance()(address)" --rpc-url <L1_RPC>
These addresses are stored internally with no public getter. They can be obtained
from the Forge deployment script output (l1-contracts/script/deploy/DeployAztecL1Contracts.s.sol
prints JSON with all addresses). Ask the user if they have deployment output.
RewardLib storage, no getter)These periphery contracts have no on-chain getter. Ask the user to provide new
addresses or confirm that the existing values in networks.md are still correct.
File: docs/docs/networks.md
Update the column matching the release type (Testnet or Alpha (Mainnet))
in the tables. (The Devnet column was removed from networks.md — devnet
releases no longer update this file.)
https://etherscan.io/address/0xADDR link formathttps://sepolia.etherscan.io/address/0xADDR link formatN/AprotocolContractAddresses from the RPC response for any changes
to canonical L2 addresses (instance registry, class registry, multi-call
entrypoint, fee juice).Also grep for any other files referencing old addresses for this network and update:
grep -r "<old_address>" docs/
For devnet releases:
File: docs/docs-developers/getting_started_on_devnet.md
SPONSORED_FPC_ADDRESS in the environment variables sectionNODE_URL if the RPC URL changedFor testnet releases:
There is no dedicated getting_started_on_testnet.md page. Instead:
docs/docs-operate/docs/docs/networks.md for accuracydocs/docs-developers/getting_started_on_devnet.md for any testnet references
that also need updatingyarn build and Fix IssuesRun after Step 13. Docusaurus validates lastVersion against existing
versioned dirs, so the build fails if the config points to a version that
hasn't been cut yet. Actual order: 5–10, 13 (cut), then 11 (build), 12.
rc tags are still mainnet. Always pass RELEASE_TYPE=mainnet explicitly
for rc-suffixed mainnet builds. The API-doc generation scripts fall back to
testnet for rc strings when RELEASE_TYPE is unset.
Set the environment variables matching the release type so the build preprocessor resolves version placeholders correctly:
DEVNET_TAG=<new_version> RELEASE_TYPE=devnetTESTNET_TAG=<new_version> RELEASE_TYPE=testnetMAINNET_TAG=<new_version> RELEASE_TYPE=mainnetIMPORTANT: COMMIT_TAG must include the v prefix (e.g., v4.2.0-aztecnr-rc.2).
The #include_aztec_version macro outputs COMMIT_TAG as-is (used for git tags and
GitHub URLs which require the v prefix), while #include_version_without_prefix strips
the v to produce the bare version (used for install commands and npm packages). If you
omit the v, all GitHub links and git tag references in the versioned docs will be broken.
cd docs && <TAG_VAR>=<new_version> RELEASE_TYPE=<release_type> COMMIT_TAG=v<nodeVersion> yarn build
Fix any issues reported by the build:
validate_redirect_targets.sh)validate_api_ref_links.sh)Iterate until the build passes.
For devnet releases: Read through docs/docs-developers/getting_started_on_devnet.md
one final time after all changes are complete.
For testnet releases: Read through the testnet section of docs/docs/networks.md
and any updated operator docs.
In both cases verify:
Present a summary of the review to the user for approval.
Create a versioned snapshot of the developer docs:
Set the environment variables matching the release type:
DEVNET_TAG=<new_version> RELEASE_TYPE=devnetTESTNET_TAG=<new_version> RELEASE_TYPE=testnetMAINNET_TAG=<new_version> RELEASE_TYPE=mainnetImportant: The version string passed to docs:version must always be prefixed
with v (e.g. v4.1.0-rc.2, not 4.1.0-rc.2).
cd docs
<TAG_VAR>=<new_version> RELEASE_TYPE=<release_type> yarn docusaurus docs:version:developer v<new_version>
Then update the versions files:
scripts/update_docs_versions.sh developer
For mainnet and testnet releases, also cut and configure the network/operator docs.
Before cutting, read docs/network_version_config.json and record the
current version for this release type. This is the old network version needed
for cleanup in Step 15. Save this value — the config will be overwritten next.
cat docs/network_version_config.json
Then cut and update the config:
<TAG_VAR>=<new_version> RELEASE_TYPE=<release_type> yarn docusaurus docs:version:network v<new_version>
scripts/update_docs_versions.sh network <release_type> v<new_version>
Verify the new version appears in both docs/developer_version_config.json and
docs/network_version_config.json.
Also verify that macros were resolved in the network versioned snapshot — check
that docs/network_versioned_docs/version-v<new_version>/ contains no raw
#release_version or #release_network placeholders.
Grep source and the new snapshot for the old version and update each hit. Skip historical refs (migration-note headings, changelog entries, "in vX, Y was removed" prose).
cd docs && grep -rn "<old_version>" src/ docs-developers/ docs-operate/ docs/ \
developer_versioned_docs/version-v<new_version>/ \
network_versioned_docs/version-v<new_version>/
Known hits: src/clientModules/docsgpt.js (heroDescription),
developer_versioned_docs/version-v<new_version>/docs/aztec-js/wallet-sdk/{wallet,dapp}_integration.md
(yarn add @aztec/*@<version>).
nextAfter cutting versioned docs, check whether any recent documentation updates on
next are relevant for the newly versioned pages but were missed during the cut.
Find recent docs commits on next that touch the source docs folders:
git log --oneline --no-merges -30 next -- docs/docs-developers/ docs/docs-operate/
For each substantive commit (skip version cuts, nightly auto-cuts, and template-only changes), diff the source docs against the versioned copy:
diff -rq docs/docs-developers/ docs/developer_versioned_docs/version-v<new_version>/
diff -rq docs/docs-operate/ docs/network_versioned_docs/version-v<new_version>/
For files that differ, check whether the source version reflects code changes that shipped in the release tag. Compare API signatures, function names, and trait definitions in the docs against the actual source code at the tag:
git show v<new_version>:<path_to_source_file>
Backport any fixes that are relevant to the release version (e.g. corrected API signatures, new SDK reference tables, additional error entries). Skip changes that are nightly-only or introduce APIs not present in the release.
Present a summary of what was found and what was backported to the user.
Identify the previous developer docs version for this release type from
docs/developer_version_config.json (look for the old entry being replaced).
Note: For testnet, there may not be an old developer docs version to clean up if this is the first testnet developer docs cut. In that case, skip this part.
Ask the user for confirmation before deleting. If approved, remove:
docs/developer_versioned_docs/version-<old_version>/docs/developer_versioned_sidebars/version-<old_version>-sidebars.jsondeveloper_version_config.jsondocs/static/aztec-nr-api/<old_version>/docs/static/typescript-api/<old_version>/If a release type entry in developer_version_config.json or
network_version_config.json points to a version whose versioned docs directory
no longer exists (e.g. an old testnet entry that was superseded by a unified
mainnet release), remove that entry from the config. The reconciliation script
(update_docs_versions.sh) only manages directory-to-config consistency for a
single release type at a time — it will not remove orphaned entries for other
release types automatically.
If a network version was cut in Step 13, use the old network version recorded at the start of that step.
If this is the first network release for this release type (no previous version existed in the config), skip this part.
Ask the user for confirmation before deleting. If approved, remove:
docs/network_versioned_docs/version-<old_network_version>/docs/network_versioned_sidebars/version-<old_network_version>-sidebars.jsonThen re-run the reconciliation script so that network_versions.json drops the
old version (its directory no longer exists):
scripts/update_docs_versions.sh network
Verify that network_version_config.json and network_versions.json no longer
reference the old version.
next Branchgit stash
git checkout next && git pull origin next
git stash pop
Check for stash conflicts. Then report to the user:
git status and git diff --stat to show what changedaztec CLI must match the network version to get
the correct canonical FPC address.yarn build succeeds.next: All changes are stashed and moved to the next branch
at the end, ready for a PR.docs/static/typescript-api/ and
docs/static/aztec-nr-api/ with stable folder names (mainnet, testnet,
devnet, nightly). The #api_ref_version macro resolves to the matching
folder name for each release type (see include_version.js).docs/README.md: If any new generation scripts, build steps, or
tooling changes were added during the release, update docs/README.md to
document them (e.g. new yarn generate:* commands).