v2.16.0: Portable code library bundles, a session per region, and Webflow Cloud deploy updates
v2.16.0 adds portable bundles for code libraries, keeps a separate login session for each region, and updates Webflow Cloud deploys and the apps commands.
Portable code library bundles
Add --portable to webflow devlink bundle or webflow devlink import to produce a production client bundle that you can host at a different origin or path.
A portable bundle:
- Loads its assets relative to the bundle, so you can serve it from any origin or path.
- Lists every emitted client asset under
portable.filesinClient/wf-manifest.json, so a host knows which files to copy. - Keeps images, fonts, and other binary files intact. Before, binary files in a bundle could be corrupted.
Server-side rendering still uses absolute asset URLs. With devlink bundle --portable, pass --public-path with the URL prefix your host serves assets from. If you leave it out, server-rendered assets use http://localhost/ and the CLI prints a warning. With devlink import --portable, the CLI gets the prefix from Webflow.
--portable needs a production build, so it can’t be used with --dev. If your bundler configuration sets output.publicPath, remove it when you use --portable.
One login session per region
webflow auth login now keeps one session for each region. Logging in to the US region no longer signs you out of the EU region.
webflow auth logout clears only the active region. Use --region to choose a different one.
Webflow Cloud deploys
webflow apps deployaccepts--environment-idand reuses the environment linked inwebflow.json. A linked directory can deploy with--jsonwithout repeating--environmentand--mount. The success JSON now includesbranchandmount.webflow apps env-vars importaccepts--secret-env-file <path>, so you can import a file of secrets together with a plain.envfile in one request.- Deploys accept build output up to the limit that Webflow sends, currently 4 GiB. The limit used to be a fixed 100 MB. The CLI also streams the archive during upload instead of loading the whole file into memory.
Consistent JSON output for apps commands
apps commands that write data now include every --dry-run plan key in their success --json output, plus dryRun: false, so one parser handles both. Existing keys are unchanged.
apps deployments redeployreports the deployment it ran again assourceDeploymentId.apps init --dry-run --jsonalso reportsmanifestPathin its plan.
Other fixes
- Fixed the CLI printing “Command completed successfully” in verbose mode after a command failed.
- Fixed
apps deployments trigger --waitandapps deployments redeploy --waitnot following the requested deployment when other deployments run at the same time, or when you retry an identical request. - Upgraded Zod to 4.x. Validation errors for invalid configuration files and Sync API responses now use Zod 4’s wording. For example, a missing results array now reports
result.results: Invalid input: expected array, received undefinedinstead ofresult.results: Required. - Updated the
adm-zipdependency to 0.6.1 to address ZIP processing vulnerabilities.