Dependency Majors Migration
EdgeZero moved several dependencies across major versions at once. An application generated before that change keeps its own pins, and those pins have to move together with EdgeZero's — the adapters hand provider-owned types (fastly::Request, spin_sdk::http::Request) straight through, and typed config derives validator::Validate.
A crate resolved at two majors produces two unrelated types with the same name, so the mismatch surfaces as a trait or type error pointing at your own code:
error[E0277]: the trait bound `MyAppConfig: validator::traits::Validate`
is not satisfiedNothing in that message names the real cause, which is why this page exists.
What to change
Update these in your application's workspace Cargo.toml at the same time as the EdgeZero dependency:
| Crate | Old | New | Applies to |
|---|---|---|---|
fastly | 0.12 | 0.13 | Fastly adapter |
log-fastly | 0.12 | 0.13 | Fastly adapter |
spin-sdk | 6 | 7 | Spin adapter |
validator | 0.20 | 0.21 | Any typed app config |
rusqlite | 0.32 | 0.40 | Only if you use it directly |
Then refresh the lockfile:
cargo update
cargo test --workspace --all-targetsRuntime requirement: Spin 4.1
spin-sdk 7 imports wasi:http/types@0.3.0, which Spin 4.0.x does not provide. This one does not fail at build time — the component compiles, its tests pass under wasmtime, and only spin up reports:
Error: component imports instance `wasi:http/types@0.3.0`, but a
matching implementation was not found in the linkerInstall Spin 4.1 or newer (install) before upgrading the SDK. cargo check cannot detect this.
Toolchain
The workspace builds on Rust 1.98.1. If your application pins a toolchain in .tool-versions, move it up with the dependencies; the edition = "2024" crates in EdgeZero need 1.85 or newer regardless.
A scaffolded app's .tool-versions also pins the provider CLIs, and those moved too:
| Tool | Old | New | Applies to |
|---|---|---|---|
rust | 1.95.0 | 1.98.1 | every app |
fastly | 15.1.0 | 16.0.0 | Fastly adapter |
viceroy | 0.17.0 | 0.21.0 | Fastly local testing |
nodejs | 24.12.0 | 24.20.0 | Cloudflare (wrangler), docs |
The fastly line is operational rather than cosmetic: the deploy action's install-fastly.sh fails closed when .tool-versions and its own versions.json disagree, so an app that moves the Rust pin and leaves the Fastly one behind gets a red deploy rather than a warning.
Verifying
The mismatch this page describes is a compile error, so a clean build is the check:
cargo build --workspace
cargo test --workspace --all-targetsFor the Spin runtime requirement, build is not enough — run the app:
spin --version # expect 4.1.0 or newer
spin up --from crates/<your-app>-adapter-spin