> This page is for Home.

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://developers.webflow.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://developers.webflow.com/_mcp/server.

# v2.16.0: Portable code library bundles, a session per region, and Webflow Cloud deploy updates

> Bundle and import code libraries with --portable, stay signed in to more than one region, deploy larger Webflow Cloud apps, and get more consistent apps JSON output.

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.

```bash
webflow devlink bundle --portable --public-path https://example.com/assets/
```

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.files` in `Client/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 deploy` accepts `--environment-id` and reuses the environment linked in `webflow.json`. A linked directory can deploy with `--json` without repeating `--environment` and `--mount`. The success JSON now includes `branch` and `mount`.
* `webflow apps env-vars import` accepts `--secret-env-file <path>`, so you can import a file of secrets together with a plain `.env` file 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 redeploy` reports the deployment it ran again as `sourceDeploymentId`.
* `apps init --dry-run --json` also reports `manifestPath` in its plan.

### Other fixes

* Fixed the CLI printing "Command completed successfully" in verbose mode after a command failed.
* Fixed `apps deployments trigger --wait` and `apps deployments redeploy --wait` not 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 undefined` instead of `result.results: Required`.
* Updated the `adm-zip` dependency to 0.6.1 to address ZIP processing vulnerabilities.

## Upgrading

```bash
npm install -g @webflow/webflow-cli@latest
```