Skip to main content

Runtime versions

Each Zavu Function is built against a specific runtime version — a sealed bundle containing @zavudev/functions, our SDK, and a small set of curated libraries. Runtime versions are immutable: once a function is deployed against runtime v7, it keeps using that exact version forever, even if we publish newer ones. This means your function is stable. We can iterate the runtime without breaking what’s already live.

How pinning works

  • First deploy: function is pinned to whatever the latest runtime version was at deploy time.
  • Subsequent deploys (npx zavudev deploy): keep the same pin. The runtime doesn’t change even if newer versions are available.
  • Opt-in upgrade (npx zavudev deploy --update-runtime): bump to the latest.

Checking your pin

Same version across deploys means same runtime.

Auditing per-deployment

Every deployment record stores which runtime ran:
Useful for “which deploy was on which runtime when the bug happened?”.

Upgrading

This deploys the current source code AGAINST the latest runtime version. If the latest is v8 and you were pinned to v7:
  • The function’s runtime pin moves to v8.
  • All subsequent npx zavudev deploy (without the flag) keep you on v8.

When you should upgrade

Most of the time, never. Stay pinned. Upgrade only when:

When you should NOT upgrade

  • Breaking change in the framework that touches a method you use. Read the changelog first. Upgrade after fixing your code.
  • Dependency bump in a curated lib (zod, hono, etc) — if your code depends on specific behavior, test first.

Support policy

When a version moves to deprecated or eol, we email project owners 60 days before the transition with the affected function list.
“EOL” never means the runtime disappears. Deployed functions keep their pinned runtime indefinitely — EOL only blocks new deploys against that version.

Bulk upgrade

When a security patch lands, you can sweep all your functions:
For programmatic bulk migration:

What’s actually in a runtime version

The current runtime (~3 MB) contains: If you import one of these in your function source code, esbuild marks it as external and the runtime resolves it at execution time — no npm install needed, no bundle bloat. To use a package NOT in the bundled set, declare it in package.json and the build worker installs it during npx zavudev deploy:

CPU architecture

Each function runs on arm64 by default (AWS Graviton). You can opt into x86_64 when an npm dependency requires it:

Setting it

Pick whichever fits your workflow — they compose, with CLI flag > package.json > server default.
The change applies on the next npx zavudev deploy — Lambda doesn’t allow swapping architecture in-place, so a new function deployment is required.

Pricing impact

The architecture multiplier compounds with the memory multiplier. Examples: If you’re approaching your plan’s monthly quota, prefer arm64 first — switch to x86 only when you’ve confirmed a specific dep needs it. See Pricing model for plan quotas.

When you actually need x86

Modern packages (most of npm) ship arm64 prebuilts. You generally only need x86 for:
  • Older versions of native libs (bcrypt < 5, very old sharp, canvas)
  • Wasm-wrapped tools without arm64 bindings
  • Code that uses process.arch === "x64" assumptions
A npx zavudev deploy on arm64 with an incompatible package usually fails with a clear “Could not find prebuild for … arm64” error — that’s your cue to switch.

Rolling back

We don’t have a --runtime <version> flag yet for explicit version pinning. If an upgrade breaks you and the previous runtime is still active/deprecated (not yet EOL), the workaround is to deploy from a previous source commit without --update-runtime:
If the pin is already on the broken version, the most reliable rollback is to delete and recreate the function with the previous runtime explicitly provisioned by Zavu support.
This is rare in practice — runtime upgrades are tested in our staging environment before public release. But if you hit it, contact support and we’ll help with the manual repin.