### Walrus Sites v2.12.0

July 10, 2026 | [GitHub](https://github.com/MystenLabs/walrus-sites/releases/tag/mainnet-v2.12.0)

The portal gains a glob-based route/redirect matcher behind a flag (first step of the routing migration), and the site-builder migrates off JSON-RPC-only client methods ahead of the JSON-RPC deprecation.

#### Changes

- [portal: Glob route/redirect matcher behind a flag, with a pattern cap](https://github.com/MystenLabs/walrus-sites/pull/720)
- [site-builder: Migrate off JSON-RPC-only client methods and bump walrus deps to testnet-v1.51.2](https://github.com/MystenLabs/walrus-sites/pull/725)
- [Read the release tag from the event payload](https://github.com/MystenLabs/walrus-sites/pull/724)
- [Bump version to 2.11.1 (#726), then 2.12.0](https://github.com/MystenLabs/walrus-sites/pull/727)

---

### Walrus Sites v2.11.0

July 6, 2026 | [GitHub](https://github.com/MystenLabs/walrus-sites/releases/tag/mainnet-v2.11.0)

The portal now talks to Sui over gRPC instead of JSON-RPC, in preparation for the JSON-RPC deprecation.

#### Changes

- [portal: Migrate Sui reads to gRPC](https://github.com/MystenLabs/walrus-sites/pull/721)
- [site-builder: Update Sui and Walrus deps](https://github.com/MystenLabs/walrus-sites/pull/722)

---

### Walrus Sites v2.10.0

June 4, 2026 | [GitHub](https://github.com/MystenLabs/walrus-sites/releases/tag/mainnet-v2.10.0)

Portal aggregator timing rework: a per-attempt fetch timeout plus a Bun `idleTimeout` sized from the worst-case retry budget close the gap where a slow aggregator could trip the inbound connection mid-flight and surface a generic upstream proxy error instead of the portal's own `aggregatorFail()` page. Sui and Walrus deps bumped to their current testnet releases. No Move contract changes.

> ℹ️ **Portal operators**: each aggregator attempt is now bounded at 10s and fails over to the next URL; Bun's `idleTimeout` is sized from the full retry chain so the portal can return its own response. Tune via `AGGREGATOR_REQUEST_TIMEOUT_MS` (default `10000`) and `PORTAL_IDLE_TIMEOUT_MAX_S` (default `100`); resolved values logged at startup.

#### Changes

- [portal: Size Bun `idleTimeout` from aggregator retry budget; add per-attempt fetch timeout and sanitize-and-log resolved config at startup](https://github.com/MystenLabs/walrus-sites/pull/714)
- [site-builder: Bump Sui to `testnet-v1.73.0`, Walrus to `testnet-v1.50.0`](https://github.com/MystenLabs/walrus-sites/pull/718)

---

### Walrus Sites v2.9.2

May 21, 2026 | [GitHub](https://github.com/MystenLabs/walrus-sites/releases/tag/mainnet-v2.9.2)

Patch release with a portal SuiNS resolution fix and a site-builder dependency bump. No new features, no breaking changes, and no Move contract changes.

#### Changes

- [portal: Stop counting `notExists` SuiNS lookups as FN failures; short-circuit retries and unwrap to `null`](https://github.com/MystenLabs/walrus-sites/pull/709)
- [site-builder: Update Sui and Walrus dependencies (Walrus pinned to `f39a84f0` for walrus#3389)](https://github.com/MystenLabs/walrus-sites/pull/713)

---

### Walrus Sites v2.9.1

May 7, 2026 | [GitHub](https://github.com/MystenLabs/walrus-sites/releases/tag/mainnet-v2.9.1)

Patch release with portal observability and configuration fixes, plus dependency bumps and CI hardening. No new features, no breaking changes, and no Move contract changes.

> ℹ️ **walrus-upgrade**: drop `walrus_package` from your `sites-config.yaml` (to auto-resolve), or update it to the latest package id from the Walrus `staking_object` in `~/.config/walrus/client_config.yaml`.

#### Changes

- [portal: Count every request in `ws_num_requests_made_counter`](https://github.com/MystenLabs/walrus-sites/pull/705)
- [site-builder: Remove `walrus` `package_id` from `sites-config.yaml` (auto-resolved from the Walrus staking object)](https://github.com/MystenLabs/walrus-sites/pull/710)
- [portal: Wire `bun run typecheck` across `common`, `server`, `worker` and run it in CI](https://github.com/MystenLabs/walrus-sites/pull/706)
- [site-builder: Bump Sui and Walrus dependencies](https://github.com/MystenLabs/walrus-sites/pull/707)

---

### Walrus Sites v2.9.0

April 23, 2026 | [GitHub](https://github.com/MystenLabs/walrus-sites/releases/tag/mainnet-v2.9.0)

Site builder performance and reliability improvements: resource dynamic field fetching now uses a single batched `multi_get` call instead of chunked per-resource queries with inter-batch delays, and the `sitemap` subcommand correctly respects the active wallet environment instead of whichever env happened to be listed first in the config.

#### Changes

- [site-builder: Use multi_get for resource dynamic field fetching](https://github.com/MystenLabs/walrus-sites/pull/684)
- [site-builder: Use active env, not envs.first(), for sitemap RPC](https://github.com/MystenLabs/walrus-sites/pull/704)
- [portal: Fix local Docker portal script and suppress meta logger noise](https://github.com/MystenLabs/walrus-sites/pull/700)
- [dev: Contract upgrade documentation](https://github.com/MystenLabs/walrus-sites/pull/692)
- [site-builder: Bump Sui to testnet-v1.69.1, Walrus to testnet-v1.46.1](https://github.com/MystenLabs/walrus-sites/pull/701)
- [portal: Bump vite from 5.4.21 to 8.0.8 in portal/common](https://github.com/MystenLabs/walrus-sites/pull/702)

---

### Walrus Sites v2.8.0

April 2, 2026 | [GitHub](https://github.com/MystenLabs/walrus-sites/releases/tag/mainnet-v2.8.0)

This release adds server-side redirect support to Walrus Sites. Redirect rules are stored as dynamic fields on the on-chain `Site` object, configurable via `ws-resources.json` with glob pattern matching. The portal evaluates redirects before resource fetching and serves 3xx response.

**This release includes a Move contract upgrade** — the `walrus_site` package is upgraded to add redirect storage on-chain. To use the new redirects feature, update the `package_id` in your `sites-config.yaml` to point to the latest package ID, or remove the `package_id` field entirely so that MVR can resolve it automatically.

**Portal config change:** `site_package` has been renamed to `original_package_id` as this is what actually matters of it.

The portal has also been updated to Mysten SDK v2.

#### Changes

- [move/site-builder/portal: Support server-side redirects](https://github.com/MystenLabs/walrus-sites/pull/685)
- [server-portal: Drop blobOrPatchId and path labels from aggregator histogram](https://github.com/MystenLabs/walrus-sites/pull/691)
- [site-builder: Clear checkout credentials before pushing with automerge token](https://github.com/MystenLabs/walrus-sites/pull/693)
- [site-builder: Auto-detect Sui version when bumping Walrus alone](https://github.com/MystenLabs/walrus-sites/pull/676)
- [site-builder: Use automerge token for git push to trigger CI on version bump PRs](https://github.com/MystenLabs/walrus-sites/pull/681)
- [e2e: Build site-builder from main instead of using suiup](https://github.com/MystenLabs/walrus-sites/pull/698)
- [portal: Update portal deps to Mysten SDK v2](https://github.com/MystenLabs/walrus-sites/pull/683)
- [testing: Add a script for testing normal snake operation](https://github.com/MystenLabs/walrus-sites/pull/689)
- [move/site-builder: Update package ids after upgrade](https://github.com/MystenLabs/walrus-sites/pull/697)

---

### Walrus Sites v2.7.0

March 12, 2026 | [GitHub](https://github.com/MystenLabs/walrus-sites/releases/tag/mainnet-v2.7.0)

Site builder reliability improvements: large sites (500+ routes/resources) no longer fail with `InsufficientGas` errors due to PTB byte-size overflow, and Site deploying is more resilient to transient Sui object version conflicts with automatic retry and exponential backoff.

#### Changes

- [site-builder: Prevent PTB byte-size overflow for large sites](https://github.com/MystenLabs/walrus-sites/pull/674)
- [site-builder: Retry on Sui object version conflicts](https://github.com/MystenLabs/walrus-sites/pull/660)
- [ci: Use walrus-automerge app token and add reviewers to version bump PRs](https://github.com/MystenLabs/walrus-sites/pull/672)

---

### Walrus Sites v2.6.0

February 26, 2026 | [GitHub](https://github.com/MystenLabs/walrus-sites/releases/tag/mainnet-v2.6.0)

The portal configuration is now loaded from a YAML file instead of environment variables. Env vars can still be used as overrides. This simplifies deployment (single ConfigMap vs many env vars) and enables structured configuration (URL arrays with priority/retries are native YAML lists instead of pipe-delimited strings).

#### Changes

- [server-portal: Migrate portal configuration from env vars to YAML](https://github.com/MystenLabs/walrus-sites/pull/665)
- [server-portal: PriorityExecutor should fallback based on priority](https://github.com/MystenLabs/walrus-sites/pull/648)
- [server-portal: Add a local-docker-portal.sh script](https://github.com/MystenLabs/walrus-sites/pull/659)
- [site-builder: Error gracefully on invalid glob pattern in ws-resources.json](https://github.com/MystenLabs/walrus-sites/pull/650)
- [site-builder: Fix lowercasing issue with header mappings](https://github.com/MystenLabs/walrus-sites/pull/651)
- [site-builder: Bump script fails when Walrus rev is a tag instead of SHA](https://github.com/MystenLabs/walrus-sites/pull/666)
- [server-portal: Add job for server tests](https://github.com/MystenLabs/walrus-sites/pull/658)
- [site-builder: Add automated Sui + Walrus version bump workflow](https://github.com/MystenLabs/walrus-sites/pull/663)
- [site-builder: Add anyhow error contexts](https://github.com/MystenLabs/walrus-sites/pull/654)
- [server-portal: Add more info to error logs](https://github.com/MystenLabs/walrus-sites/pull/662)
- [portal: Rename priority to metric](https://github.com/MystenLabs/walrus-sites/pull/657)
- [site-builder: Bump walrus & sui deps](https://github.com/MystenLabs/walrus-sites/pull/652)
- [site-builder: Bump bytes from 1.11.0 to 1.11.1](https://github.com/MystenLabs/walrus-sites/pull/647)
- [site-builder: Bump time from 0.3.46 to 0.3.47](https://github.com/MystenLabs/walrus-sites/pull/655)

---

### Walrus Sites v2.4.0

February 9, 2026 | [GitHub](https://github.com/MystenLabs/walrus-sites/releases/tag/mainnet-v2.4.0)

#### Changes

- [portal: Handle aggregator 403/404 errors with better messaging](https://github.com/MystenLabs/walrus-sites/pull/646)
- [portal: Print errors correctly in logger](https://github.com/MystenLabs/walrus-sites/pull/640)
- [portal: Add prettier lint workflow for ts files](https://github.com/MystenLabs/walrus-sites/pull/644)
- [portal: Use prettier to format portal](https://github.com/MystenLabs/walrus-sites/pull/645)
- [portal: Include .cause in error log](https://github.com/MystenLabs/walrus-sites/pull/649)

---

### Walrus Sites v2.3.1

January 29, 2026 | [GitHub](https://github.com/MystenLabs/walrus-sites/releases/tag/mainnet-v2.3.1)

Requires Walrus CLI v1.37.0 or later

#### Changes

- [site-builder: Disabled child process uploads to fix JSON parsing errors with Walrus CLI](https://github.com/MystenLabs/walrus-sites/pull/642)
- [ci: Simplify dockerhub workflow: use release tag](https://github.com/MystenLabs/walrus-sites/pull/641)

---

### Walrus Sites v2.3.0

January 26, 2026 | [GitHub](https://github.com/MystenLabs/walrus-sites/releases/tag/mainnet-v2.3.0)

#### Changes

- [site-builder: Refine 'deploy --dry-run' output, add Sui gas estimates.](https://github.com/MystenLabs/walrus-sites/pull/614)
- [site-builder: Add size-based file grouping.](https://github.com/MystenLabs/walrus-sites/pull/606)
- [site-builder: Add context to the site-fields not found error.](https://github.com/MystenLabs/walrus-sites/pull/633)
- [site-builder: Fix site updating when there are expired blobs.](https://github.com/MystenLabs/walrus-sites/pull/638)
- [server-portal: Fix serializing error when an unexpected exception is caught.](https://github.com/MystenLabs/walrus-sites/pull/632)
- [portal: Fix portal common strict true.](https://github.com/MystenLabs/walrus-sites/pull/634)

---

### Walrus Sites v2.2.1

January 14, 2026 | [GitHub](https://github.com/MystenLabs/walrus-sites/releases/tag/mainnet-v2.2.1)

This release introduces an optimization for site updates: files that remain unchanged during an update are no longer re-uploaded into new Quilts. Only new and modified files are uploaded.

#### Changes

- [site-builder: Use correct walrus package-id from Staking object when extending blobs](https://github.com/MystenLabs/walrus-sites/pull/630)
- [site-builder: Optimize site updates by creating new Quilts only for changed resources](https://github.com/MystenLabs/walrus-sites/pull/616)
- [site-builder: Add config path to error output](https://github.com/MystenLabs/walrus-sites/pull/548)
- [site-builder: Add Walrus and Seal documentation builder workflow](https://github.com/MystenLabs/walrus-sites/pull/623)
- [site-builder: Add system resource usage tracking to build scripts](https://github.com/MystenLabs/walrus-sites/pull/627)
- [server-portal: Remove Amplitude integration](https://github.com/MystenLabs/walrus-sites/pull/620)

---

### Walrus Sites v2.1.2

December 16, 2025 | [GitHub](https://github.com/MystenLabs/walrus-sites/releases/tag/mainnet-v2.1.2)

---

### Walrus Sites v2.1.1

December 4, 2025 | [GitHub](https://github.com/MystenLabs/walrus-sites/releases/tag/mainnet-v2.1.1)

This is a bugfix release for the Portal component and does not impact Site Builder.

#### Changes

- [server-portal: Treat only 5xx responses as aggregator failures.](https://github.com/MystenLabs/walrus-sites/pull/611)

---

### Walrus Sites v2.1.0

December 1, 2025 | [GitHub](https://github.com/MystenLabs/walrus-sites/releases/tag/mainnet-v2.1.0)

#### Changes

- [site-builder: Support files larger than `--max-quilt-size`.](https://github.com/MystenLabs/walrus-sites/pull/602)
- [portal: Enhance error handling with 503 and 500 responses for service unavailability and unhandled exceptions](https://github.com/MystenLabs/walrus-sites/pull/604)
- [site-builder: Fix abort on updating sites with more than 1000 resources.](https://github.com/MystenLabs/walrus-sites/pull/603)
- [portal: Fix full-node error metric not incrementing.](https://github.com/MystenLabs/walrus-sites/pull/605)
- [site-builder: Partly handle invalid object version fetched by full-node.](https://github.com/MystenLabs/walrus-sites/pull/597)
- [site-builder: Replace \ with / in full-path to resource path for Windows.](https://github.com/MystenLabs/walrus-sites/pull/607)
- [portal: Add aggregator fetching metric](https://github.com/MystenLabs/walrus-sites/pull/595)
- [Github Actions: Updates the migrated deploy github action](https://github.com/MystenLabs/walrus-sites/pull/601)

---

### Walrus Sites v2.0.0

November 17, 2025 | [GitHub](https://github.com/MystenLabs/walrus-sites/releases/tag/mainnet-v2.0.0)

This major release transitions the `site-builder` CLI to exclusively use **Quilts** for site data

#### Changes

- [Added comprehensive test coverage for `max-quilt-size` limit enforcement.](https://github.com/MystenLabs/walrus-sites/pull/591)
- [Updated Sui and Walrus dependencies.](https://github.com/MystenLabs/walrus-sites/pull/598)
- [Reduced code duplication in Quilt update tests, improving maintainability.](https://github.com/MystenLabs/walrus-sites/pull/590)
- [Updated github-action, removed --check-extend.](https://github.com/MystenLabs/walrus-sites/pull/600)

---

### Walrus Sites v1.3.1

November 3, 2025 | [GitHub](https://github.com/MystenLabs/walrus-sites/releases/tag/mainnet-v1.3.1)

Work for feature flag `quilts-experimental`. Mainly testing and bug-fixes.

---

### Walrus Sites v1.3.0

October 21, 2025 | [GitHub](https://github.com/MystenLabs/walrus-sites/releases/tag/mainnet-v1.3.0)

#### Changes

- [site-builder: Support list directory when deploying with quilts](https://github.com/MystenLabs/walrus-sites/pull/578)
- [site-builder: Do not delete moved-resource's blob](https://github.com/MystenLabs/walrus-sites/pull/575)
- [site-builder: Propagate epoch-argument in quilts implementation](https://github.com/MystenLabs/walrus-sites/pull/577)
- [site-builder: Remove temp hack using empty path vec for publish-quilts command](https://github.com/MystenLabs/walrus-sites/pull/572)
- [site-builder: Create new test for duplicate files for quilts publish](https://github.com/MystenLabs/walrus-sites/pull/576)
- [site-builder: Bump versions of site-builder and portal](https://github.com/MystenLabs/walrus-sites/pull/580)
- [vite: Bump vite from 7.0.0 to 7.1.5 in /examples/vite-react-ts](https://github.com/MystenLabs/walrus-sites/pull/553)
- [site-builder: Blob update test with a lot of files](https://github.com/MystenLabs/walrus-sites/pull/573)

---

### Walrus Sites v1.2.1

October 7, 2025 | [GitHub](https://github.com/MystenLabs/walrus-sites/releases/tag/mainnet-v1.2.1)

#### Changes

- [site-builder: Dynamically split move-commands into ptbs](https://github.com/MystenLabs/walrus-sites/pull/564)
- [site-builder: Fix dry run throwing error for publish quilts](https://github.com/MystenLabs/walrus-sites/pull/567)
- [portal: Fix logger typo, not passing args in getPropertiesWithContext](https://github.com/MystenLabs/walrus-sites/pull/565)
- [Add #[ignore] in integration tests](https://github.com/MystenLabs/walrus-sites/pull/566)

---

### Walrus Sites v1.2.0

September 22, 2025 | [GitHub](https://github.com/MystenLabs/walrus-sites/releases/tag/mainnet-v1.2.0)

Further support of quilts under the `quilts-experimental` feature.

> **Note**  
> Header and ignore-file matching in ws-resources.json, now uses **glob patterns** (e.g. `*.md`, `docs/**`) instead of regular expressions.  
> Regex support was never intentional, so if you were using advanced regex, please update your configs to glob style.([#556](https://github.com/MystenLabs/walrus-sites/pull/556)).

#### Changes

- [deploy-action: Support wallet exported keys.](https://github.com/MystenLabs/walrus-sites/pull/525)
- [site-builder: UpdateQuilts command, deletes and re-creates all resources.](https://github.com/MystenLabs/walrus-sites/pull/552)
- [site-builder: Use quilt patch ids in site-builder publish/update output.](https://github.com/MystenLabs/walrus-sites/pull/561)
- [site-builder: Show quilt patch ids during sitemap.](https://github.com/MystenLabs/walrus-sites/pull/562)
- [site-builder: Improve the print_summary docs.](https://github.com/MystenLabs/walrus-sites/pull/557)
- [deploy-action: Fix inputs usage.](https://github.com/MystenLabs/walrus-sites/pull/550)
- [site-builder: Use glob instead of regex for ignore files and headers assignments.](https://github.com/MystenLabs/walrus-sites/pull/556)
- [site-builder: --list-directory and ignore files.](https://github.com/MystenLabs/walrus-sites/pull/556)
- [common-lib: nullish coalescing for range header building.](https://github.com/MystenLabs/walrus-sites/pull/560)
- [portal: Integrate Javascript/Typescript tests with Sonarqube.](https://github.com/MystenLabs/walrus-sites/pull/549)
- [deploy: Remove publish_landing_page.sh script.](https://github.com/MystenLabs/walrus-sites/pull/554)
- [site-builder: Update Walrus and Sui dependencies.](https://github.com/MystenLabs/walrus-sites/pull/555)
- [site-builder: Remove unused .with_type() in test-setup resource-fetching.](https://github.com/MystenLabs/walrus-sites/pull/551)
- [site-builder: Create integration test for list directory.](https://github.com/MystenLabs/walrus-sites/pull/559)

---

### Walrus Sites v1.1.0

September 8, 2025 | [GitHub](https://github.com/MystenLabs/walrus-sites/releases/tag/mainnet-v1.1.0)

This release introduces a new publishing and deployment method for Walrus Sites using [quilts](https://docs.wal.app/usage/quilt.html) instead of blobs. Multiple resources are now bundled as quilt patches on Walrus, significantly reducing the cost of site publishing.

You can use this feature with: `site-builder publish-quilts --epochs=<EPOCHS> <YOUR-BUILD-DIR>`.

> ⚠️ **Important note**: This feature is only available when building `site-builder` from source with `cargo build --features quilts-experimental`.

#### Changes

- [site-builder: Publish using quilts.](https://github.com/MystenLabs/walrus-sites/pull/544)
- [portal: Derive `quiltpatchid` for resource retrieval.](https://github.com/MystenLabs/walrus-sites/pull/535)
- [portal: Retrieve quilt-based resources.](https://github.com/MystenLabs/walrus-sites/pull/536)
- [portal: Update domain parsing logic and tests for `parse-domain@8.2.2`.](https://github.com/MystenLabs/walrus-sites/pull/538)
- [site-builder: Add more checks for tx failure.](https://github.com/MystenLabs/walrus-sites/pull/542)
- [site-builder: Update the site name if changed in `ws-resources.json`.](https://github.com/MystenLabs/walrus-sites/pull/529)
- [site-builder: Override `walrus_package` from config if passed explicitly as an argument.](https://github.com/MystenLabs/walrus-sites/pull/532)
- [site-builder: Catch errors earlier in site PTB.](https://github.com/MystenLabs/walrus-sites/pull/541)
- [Add workflow to build and publish the server-portal Docker image.](https://github.com/MystenLabs/walrus-sites/pull/515)
- [Create tarball for the site-builder binary in the release workflow.](https://github.com/MystenLabs/walrus-sites/pull/516)
- [Compress the site-builder tarball with gzip and use the `.tgz` extension.](https://github.com/MystenLabs/walrus-sites/pull/519)
- [Add a tarball creation step.](https://github.com/MystenLabs/walrus-sites/pull/521)
- [Add ubuntu-arm64 to the site-builder build list.](https://github.com/MystenLabs/walrus-sites/pull/523)
- [Optionally use `--check-extend` on the site deploy action.](https://github.com/MystenLabs/walrus-sites/pull/526)
- [Clean up portal code by removing the Sentry integration.](https://github.com/MystenLabs/walrus-sites/pull/517)
- [site-builder: Remove unused `network.rs`.](https://github.com/MystenLabs/walrus-sites/pull/527)
- [server-portal: Remove Vercel web analytics and Sentry remnants.](https://github.com/MystenLabs/walrus-sites/pull/528)
- [server-portal: Use mainnet as the default build-arg for suins in Dockerfile.](https://github.com/MystenLabs/walrus-sites/pull/534)
- [site-builder: Remove unused `ResourceOpSummary`.](https://github.com/MystenLabs/walrus-sites/pull/539)
- [portal: Use `toString` in HTML templates to fix build failures.](https://github.com/MystenLabs/walrus-sites/pull/545)

---

### Walrus Sites v1.0.2

July 15, 2025 | [GitHub](https://github.com/MystenLabs/walrus-sites/releases/tag/mainnet-v1.0.2)

---

### Walrus Sites walrus_sites_v0.1.0_1751313026_mainnet_ci

June 30, 2025 | [GitHub](https://github.com/MystenLabs/walrus-sites/releases/tag/walrus_sites_v0.1.0_1751313026_mainnet_ci)

#### Changes

- [site-builder: Setup integration tests for e2e testing.](https://github.com/MystenLabs/walrus-sites/pull/495)

---

### Walrus Sites walrus_sites_v0.1.0_1750076111_mainnet_ci

June 16, 2025 | [GitHub](https://github.com/MystenLabs/walrus-sites/releases/tag/walrus_sites_v0.1.0_1750076111_mainnet_ci)

🚀 Welcome to the very first official release of Walrus Sites! This marks the production-ready milestone for the project.

Starting with this release, each version will include all the necessary components for deploying (via the site-builder) and accessing (via the portals) your Walrus Sites.

We are committed to following [semantic versioning](https://semver.org/) conventions for all future releases, ensuring clarity and consistency in version updates.

#### Changes

- [site-builder: Added an expiration column for site resources when running the sitemap.](https://github.com/MystenLabs/walrus-sites/pull/490)
- [site-builder: Introduced `--end-epoch` and `--earliest-expiry-time` flags for defining resource end-epochs.](https://github.com/MystenLabs/walrus-sites/pull/491)
- [site-builder: Implemented a `deploy` command to consolidate the `publish` and `update` commands.](https://github.com/MystenLabs/walrus-sites/pull/487)
- [portal: Added a custom 404 fallback template and integrated it into the URL fetching logic.](https://github.com/MystenLabs/walrus-sites/pull/492)
- [site-builder: Old deletable blobs are now removed after updates.](https://github.com/MystenLabs/walrus-sites/pull/499)
- [site-builder: Updated browsing options based on network context.](https://github.com/MystenLabs/walrus-sites/pull/493)
- [site-builder: Ensured metadata updates when modifying an existing site.](https://github.com/MystenLabs/walrus-sites/pull/488)
- [site-builder: Enforced the `site_name` field and improved the default naming.](https://github.com/MystenLabs/walrus-sites/pull/489)
- [site-builder: Fixed issues with commented values in the configuration.](https://github.com/MystenLabs/walrus-sites/pull/484)
- [portal: Restructured portal logs for better organization.](https://github.com/MystenLabs/walrus-sites/pull/496)
- [contract: Added a README for MVR.](https://github.com/MystenLabs/walrus-sites/pull/498)
- [Added Sonar Analyzer to the CI pipeline for improved code quality checks.](https://github.com/MystenLabs/walrus-sites/pull/497)

---