---
title: "Changelog"
description: "New features, fixes, and supported Flutter versions in Shorebird, newest first."
---

Each entry names the Shorebird CLI release that shipped it, if any; compare it with `shorebird --version`, and run `shorebird upgrade` to get newer changes. RSS feed: [/changelog.xml](/changelog.xml)

## October 2026

### The CLI refuses to delete built-in tracks

**Changed** in CLI, 2026-10-11, Shorebird CLI 1.6.128 ([release notes](https://github.com/shorebirdtech/shorebird/blob/v1.6.128/RELEASE_NOTES.md)). Permalink: [/changelog/#channels-delete-built-in](/changelog/#channels-delete-built-in)

`shorebird channels delete` now refuses `stable`, `beta`, and `staging` with a usage error before contacting the server, which already refuses them.

- With `--json`, the success object no longer includes `is_default_track`, since a successful delete can no longer involve a built-in track.

Docs: [Delete a track](/code-push/tracks/#delete-a-track)

### More CLI fixes in 1.6.128

**Fixed** in CLI, 2026-10-11, Shorebird CLI 1.6.128 ([release notes](https://github.com/shorebirdtech/shorebird/blob/v1.6.128/RELEASE_NOTES.md)). Permalink: [/changelog/#cli-fixes-1-6-128](/changelog/#cli-fixes-1-6-128)

CLI 1.6.128 also fixes these issues.

- Flavored macOS patches run without `--release-version` read the release version from the flavor's build.
- iOS framework patches honor `SHOREBIRD_PATCH_DD_MAX_BYTES`.
- Releases on iOS, iOS framework, macOS, and Linux continue when an artifact already exists, as Android and Windows did.
- `shorebird release`, `shorebird patch`, and `shorebird preview` no longer leave copies of the app in the system temp directory.
- A rate limit or other refusal from the auth service no longer counts as being logged out. Only expired or revoked credentials do.
- A malformed credentials file no longer crashes every command, and on macOS and Linux the file is now readable only by you.
- `shorebird doctor --fix` shows every issue a fix leaves, and the count of fixable issues is accurate. `--fix` with `--json` is now a usage error.
- The Android INTERNET permission check finds the permission when `android:name` isn't its first attribute, and reports a permission removed with `tools:node="remove"` instead of offering a fix that conflicts with it.
- `shorebird patch aar` without `--release-version` in a non-interactive shell fails before building instead of crashing after it.
- `shorebird patch ios-framework` without `--release-version` now lets you pick the release in an interactive terminal, like other platforms.
- After `shorebird preview` launches an app on a device running iOS 16 or earlier, Ctrl-C works normally for the rest of the run.

### Consistent flag names for set-track and init

**Changed** in CLI, 2026-10-11, Shorebird CLI 1.6.128 ([release notes](https://github.com/shorebirdtech/shorebird/blob/v1.6.128/RELEASE_NOTES.md)). Permalink: [/changelog/#consistent-flag-names](/changelog/#consistent-flag-names)

`shorebird patches set-track` and `shorebird init` now use the same flag names as the commands next to them. The old names still work, but no longer appear in `--help`.

- `shorebird patches set-track` takes `--release-version` and `--patch-number`, like the other `patches` commands, in place of `--release` and `--patch`.
- `shorebird init` takes `--org-id`, like `shorebird apps transfer`, in place of `--organization-id`.
- Names that are only whitespace are now rejected by `shorebird init`, `shorebird channels create`, and `shorebird patches set-track`, as `shorebird apps rename` already did. `shorebird patch` now also rejects a `--track` that is empty, only whitespace, or longer than 128 characters.

```sh
shorebird init --org-id 42
```

### JSON errors explain failed checks

**Changed** in CLI, 2026-10-11, Shorebird CLI 1.6.128 ([release notes](https://github.com/shorebirdtech/shorebird/blob/v1.6.128/RELEASE_NOTES.md)). Permalink: [/changelog/#json-precondition-failed](/changelog/#json-precondition-failed)

With `--json`, every failing command now prints an error object on stdout, and a failed check before the command runs reports `precondition_failed` with a message and, when there's a known fix, a hint.

- Checks that report `precondition_failed` include not being logged in and not being in a Shorebird project.
- Previously some of these failures left stdout empty, and the reason was only on stderr.
- `shorebird patches set-track` now reports `changed` and the patch, as `rollback` and `rollforward` already did, so a script can tell whether the run did anything.

### macOS patches install on re-signed apps

**Fixed** in Code Push, 2026-10-11, Shorebird CLI 1.6.128 ([release notes](https://github.com/shorebirdtech/shorebird/blob/v1.6.128/RELEASE_NOTES.md)). Permalink: [/changelog/#macos-patches-resigned-apps](/changelog/#macos-patches-resigned-apps)

macOS patches now install on apps that were re-signed after release, such as for Developer ID notarization or the Mac App Store.

- Previously, re-signing changed the binary that patches were built against, so every patch failed the device's check that the app matches its release.
- Patches are now built against only the app's Dart code, which re-signing doesn't change.
- The fix ships in the engine with CLI 1.6.128. Create a new macOS release with CLI 1.6.128 or later to pick it up. Releases built earlier, or with an older `--flutter-version`, keep the old behavior.

### Signed patches honor --public-key-cmd

**Fixed** in CLI, 2026-10-11, Shorebird CLI 1.6.128 ([release notes](https://github.com/shorebirdtech/shorebird/blob/v1.6.128/RELEASE_NOTES.md)). Permalink: [/changelog/#patch-public-key-cmd](/changelog/#patch-public-key-cmd)

`shorebird patch` now embeds the public key from `--public-key-cmd` in the patch build, as `shorebird release` already did.

- Previously only `--public-key-path` reached the patch build. Signing itself still worked.
- The `--public-key-cmd` command now runs once per `shorebird patch` or `shorebird release` run, instead of once per architecture or platform, so a command that prompts, such as for two-factor authentication, prompts once.

Docs: [Create a signed patch](/code-push/guides/patch-signing/#create-a-signed-patch)

### The patches promote command is hidden from help

**Deprecated** in CLI, 2026-10-11, Shorebird CLI 1.6.128 ([release notes](https://github.com/shorebirdtech/shorebird/blob/v1.6.128/RELEASE_NOTES.md)). Permalink: [/changelog/#patches-promote-hidden](/changelog/#patches-promote-hidden)

`shorebird patches promote` no longer appears in `shorebird patches --help`. Use `shorebird patches set-track` instead.

- `promote` has been deprecated since December 2025. It still runs, so existing scripts keep working until it's removed.

```sh
shorebird patches set-track --release-version 1.0.0+1 --patch-number 1 --track stable
```

Docs: [Set patch track](/code-push/patch/#set-patch-track)

### Preview a flavor without a prompt

**New** in CLI, 2026-10-11, Shorebird CLI 1.6.128 ([release notes](https://github.com/shorebirdtech/shorebird/blob/v1.6.128/RELEASE_NOTES.md)). Permalink: [/changelog/#preview-flavor](/changelog/#preview-flavor)

`shorebird preview` now takes `--flavor`, like other commands that act on an app, so it can pick the flavor's app without asking.

- An unknown flavor fails with the same error as other commands.
- `shorebird releases get-apks` now takes `--app-id`, and with it no longer needs to run in a Shorebird project. Pass `--out` in that case.

```sh
shorebird preview --flavor internal --release-version 1.0.0+1
```

Docs: [Preview options](/code-push/preview/#options)

### Releases no longer upload files from an earlier build

**Fixed** in CLI, 2026-10-11, Shorebird CLI 1.6.128 ([release notes](https://github.com/shorebirdtech/shorebird/blob/v1.6.128/RELEASE_NOTES.md)). Permalink: [/changelog/#release-clears-build-output](/changelog/#release-clears-build-output)

`shorebird release` now clears `build/<platform>/shorebird/` before building on every platform, so files left by an earlier build aren't uploaded with a new release.

- Previously only iOS and iOS framework releases cleared it.
- Nothing else in `build/` is touched.

### Setting a patch's track again succeeds

**Changed** in CLI, 2026-10-11, Shorebird CLI 1.6.128 ([release notes](https://github.com/shorebirdtech/shorebird/blob/v1.6.128/RELEASE_NOTES.md)). Permalink: [/changelog/#set-track-already-on-track](/changelog/#set-track-already-on-track)

`shorebird patches set-track` now succeeds when the patch is already on the requested track, instead of failing with a usage error.

- It says the patch is already on that track and doesn't promote it again.
- This matches `shorebird patches rollback` and `rollforward`, so a retried CI job doesn't fail.
- With `--json`, `changed` is `false` when nothing changed.

Docs: [Set patch track](/code-push/patch/#set-patch-track)

### An unknown flavor is an error

**Changed** in CLI, 2026-10-11, Shorebird CLI 1.6.128 ([release notes](https://github.com/shorebirdtech/shorebird/blob/v1.6.128/RELEASE_NOTES.md)). Permalink: [/changelog/#unknown-flavor-error](/changelog/#unknown-flavor-error)

Commands that act on an existing app now fail when `--flavor` names a flavor that `shorebird.yaml` doesn't define, instead of silently using the default app.

- For example, a mistyped `shorebird patches rollback --flavor` previously rolled back a patch on the default app.
- This covers the `patches`, `releases`, `channels`, and `apps` commands. The error lists the flavors that `shorebird.yaml` defines.
- `--app-id` still takes precedence over `--flavor`.

### Crash fixes for login, doctor, and set-track

**Fixed** in CLI, 2026-10-10, Shorebird CLI 1.6.127 ([release notes](https://github.com/shorebirdtech/shorebird/blob/v1.6.127/RELEASE_NOTES.md)). Permalink: [/changelog/#cli-crash-fixes-1-6-127](/changelog/#cli-crash-fixes-1-6-127)

Four commands that could crash now work or fail with a clear message.

- `shorebird login` no longer crashes with `Bad state: read(ScopedRef<Browser>)`, a bug introduced in 1.6.126.
- `shorebird doctor --verbose` shows Gradle as not detected when the Gradle version lookup fails, instead of crashing.
- `shorebird patches set-track` and `shorebird patches promote` report a patch number that isn't a number as a usage error instead of crashing.

### Linux patches build like Linux releases

**Fixed** in CLI, 2026-10-10, Shorebird CLI 1.6.127 ([release notes](https://github.com/shorebirdtech/shorebird/blob/v1.6.127/RELEASE_NOTES.md)). Permalink: [/changelog/#linux-patches-match-releases](/changelog/#linux-patches-match-releases)

`shorebird patch linux` now builds with `--target` and the arguments passed after `--`, so the patch matches the release it targets.

- Previously the patch was built from the default entrypoint and without the arguments after `--`, such as `--dart-define` values, so it could differ from its release.
- Before building, it now checks that you're logged in, that the project is initialized, and that the host is Linux, as `shorebird release linux` does.

### API keys hold exactly their permission level

**Changed** in API, 2026-10-10. Permalink: [/changelog/#personal-access-token-limits](/changelog/#personal-access-token-limits)

API keys now hold exactly what their permission level grants. A full access key can do everything your role allows, except delete your account, change your billing limits, or manage your sessions and API keys. Sign in to the Console to do these.

- Deleting the account or changing billing limits with a key returns 403 with the code `personal_access_token_forbidden`. Keys were already refused both, with other error codes.
- Full access keys gained what their old fixed permission list left out, such as reading audit logs and managing invitations.
- Release and patch only keys can no longer update your account details, create organizations, or accept or decline invitations.

Docs: [API key permissions](/account/api-keys/#permissions)

### Apps are listed once

**Fixed** in API, 2026-10-09. Permalink: [/changelog/#apps-listed-once](/changelog/#apps-listed-once)

The app list no longer shows an app twice when you have both a role in its organization and a role granted on the app itself.

- This affected `GET /api/v1/apps`, `shorebird account apps`, `shorebird apps list`, and the app picker in `shorebird preview`.
- The Console's app list wasn't affected.

Docs: [List apps](/account/cli/#list-apps)

### The Shorebird cache cleans up after itself

**New** in CLI, 2026-10-09, Shorebird CLI 1.6.126 ([release notes](https://github.com/shorebirdtech/shorebird/blob/v1.6.126/RELEASE_NOTES.md)). Permalink: [/changelog/#cache-prunes-unused](/changelog/#cache-prunes-unused)

Flutter installs, engine artifacts, and downloaded previews that you no longer use are now removed automatically, so they stop piling up across upgrades and `--flutter-version` builds.

- Flutter installs and engine artifacts are removed after 30 days without use.
- Only the 10 most recently used previews are kept, and each is removed after 30 days without use.
- The Flutter version your CLI is pinned to is never removed.
- `shorebird cache clean --unused` removes unused items right away, without clearing the rest of the cache.

```sh
shorebird cache clean --unused
```

### Flutter 3.47.7 support

**New** in Flutter, 2026-10-09, Shorebird CLI 1.6.126 ([release notes](https://github.com/shorebirdtech/shorebird/blob/v1.6.126/RELEASE_NOTES.md)). Permalink: [/changelog/#flutter-3-47-7](/changelog/#flutter-3-47-7)

Shorebird now supports Flutter 3.47.7 and Dart 3.13.5.

- iOS: fixes accessibility frames for `OverlayPortal`, which were shrunk and anchored top-left, so VoiceOver focus and XCUITest taps missed the visible controls.
- iOS: fixes VoiceOver focus jumping to the top left of the screen in a `ReorderableListView`.

```sh
shorebird release ios --flutter-version=3.47.7
```

Docs: [Flutter versions](/getting-started/flutter-version/)

### iOS previews show your app's logs again

**Fixed** in CLI, 2026-10-09, Shorebird CLI 1.6.126 ([release notes](https://github.com/shorebirdtech/shorebird/blob/v1.6.126/RELEASE_NOTES.md)). Permalink: [/changelog/#ios-preview-logs](/changelog/#ios-preview-logs)

With Xcode 26 or later, `shorebird preview` on an iOS device now shows the app's `print` output and `[shorebird]` updater lines, as Android and macOS previews do.

- Previously the app launched but none of its output appeared.
- The command stays attached until the app exits.

Docs: [Preview a release](/code-push/preview/)

### Sign in from any machine

**New** in CLI, 2026-10-09, Shorebird CLI 1.6.126 ([release notes](https://github.com/shorebirdtech/shorebird/blob/v1.6.126/RELEASE_NOTES.md)). Permalink: [/changelog/#login-browser-and-device-code](/changelog/#login-browser-and-device-code)

`shorebird login` now opens your browser, and when no browser can open, such as over SSH, in CI, or on Linux without a display, it shows a code to enter in a browser on any device.

- The login URL is still printed, in case the browser doesn't open.
- Pass `--device` to use a code even when a browser is available.
- On 1.6.126, `shorebird login` without `--device` crashes with `Bad state: read(ScopedRef<Browser>)`. Upgrade to 1.6.127 or later.

```sh
shorebird login --device
```

Docs: [Login](/account/cli/#login)

### Patch obfuscated Android releases built with older Flutter

**Fixed** in CLI, 2026-10-08, Shorebird CLI 1.6.125 ([release notes](https://github.com/shorebirdtech/shorebird/blob/v1.6.125/RELEASE_NOTES.md)). Permalink: [/changelog/#android-obfuscated-patches-older-flutter](/changelog/#android-obfuscated-patches-older-flutter)

Patching an Android release built with `--obfuscate` on a Flutter version older than 3.41.2 no longer fails with `Unrecognized flags: load_obfuscation_map`.

- Upgrade the CLI and patch as usual. Existing obfuscated releases become patchable without a new release.
- iOS patches still need the release to use Flutter 3.41.2 or later for obfuscation, and now fail up front with a clear error instead of a `gen_snapshot` failure.
- For an obfuscated iOS release, `shorebird release ios` and `shorebird release ios-framework` now check the Flutter version they actually build with, including `--flutter-version`.

### Errors say what to do next

**Changed** in CLI, 2026-10-08, Shorebird CLI 1.6.125 ([release notes](https://github.com/shorebirdtech/shorebird/blob/v1.6.125/RELEASE_NOTES.md)). Permalink: [/changelog/#cli-errors-name-next-step](/changelog/#cli-errors-name-next-step)

Errors from `shorebird init`, `shorebird patch`, `shorebird preview`, and the checks that run before a command now name the step that fixes them.

- `shorebird patch --force` explains that there's no `--force` flag and points to `--allow-native-diffs` and `--allow-asset-diffs`.
- With `--json`, the `--force` advice is in the error's `hint`.

### Warning for app extension versions that don't match the app

**New** in CLI, 2026-10-08, Shorebird CLI 1.6.125 ([release notes](https://github.com/shorebirdtech/shorebird/blob/v1.6.125/RELEASE_NOTES.md)). Permalink: [/changelog/#ios-extension-version-warning](/changelog/#ios-extension-version-warning)

`shorebird release ios` now warns when an app extension's version or build number differs from the app's, which App Store Connect rejects with ITMS-90473.

- The warning names each extension and the mismatched value, like `NotificationService.appex: CFBundleShortVersionString is "1.15.32", the app is "1.15.67"`.
- Shorebird doesn't change the versions for you. Update the extension targets in Xcode so they match the app.

### More secure CLI sign-in

**Changed** in CLI, 2026-10-08, Shorebird CLI 1.6.125 ([release notes](https://github.com/shorebirdtech/shorebird/blob/v1.6.125/RELEASE_NOTES.md)). Permalink: [/changelog/#login-oauth-pkce](/changelog/#login-oauth-pkce)

`shorebird login` now uses standard OAuth with PKCE and `state`, and `shorebird logout` now warns when the auth server can't confirm that your session was revoked.

- Google and Microsoft sign-in, and tokens from `shorebird login:ci`, are no longer supported. The server stopped accepting them on October 1, 2026. Run `shorebird login` to sign in again, and use an API key in `SHOREBIRD_TOKEN` for CI.
- If your stored credentials have expired, `shorebird login` signs you in again instead of reporting that you're already logged in.

Docs: [Authentication commands](/account/cli/#authentication-commands)

### Script releases and patches with JSON output

**New** in CLI, 2026-10-08, Shorebird CLI 1.6.125 ([release notes](https://github.com/shorebirdtech/shorebird/blob/v1.6.125/RELEASE_NOTES.md)). Permalink: [/changelog/#release-patch-json](/changelog/#release-patch-json)

`shorebird release` and `shorebird patch` now support `--json`, so a script gets the new release or patch as data instead of parsing log lines.

- `shorebird release --json` reports the app ID, the platforms, and each release with its version, Flutter version, and per-platform status.
- `shorebird patch --json` reports the app ID, the track, and each patch with its platform, release version, patch number, and link percentage.
- With `--dry-run`, both report what would have been published, with `dry_run` set to `true`.
- With `--json`, stdout holds only the JSON object. Progress and logs go to stderr.

```sh
shorebird patch android --release-version=latest --json
```

### Sign-ins last as long as you use them

**Changed** in Console, 2026-10-05. Permalink: [/changelog/#console-sessions-expire-when-unused](/changelog/#console-sessions-expire-when-unused)

Sign-ins no longer end at a fixed 90 days. A sign-in now lasts until it goes 30 days without use, so you stay signed in as long as you keep using Shorebird.

- Previously, a sign-in also ended 90 days after it began, even in daily use.
- You can still revoke any session from your Account page.

### The API now reports rate limits

**New** in API, 2026-10-04. Permalink: [/changelog/#api-rate-limits](/changelog/#api-rate-limits)

API responses now carry `RateLimit` and `RateLimit-Policy` headers, so scripts can see their limit and how close they are to it.

- Going over the limit returns 429 with a `Retry-After` header and the code `rate_limited`.
- Limits are counted per caller: per API key or token, or per IP address for unauthenticated requests.
- Patch checks from your app aren't rate limited.

Docs: [Shorebird API](/account/api/)

### Flutter 3.47.6 support

**New** in Flutter, 2026-10-02, Shorebird CLI 1.6.124 ([release notes](https://github.com/shorebirdtech/shorebird/blob/v1.6.124/RELEASE_NOTES.md)). Permalink: [/changelog/#flutter-3-47-6](/changelog/#flutter-3-47-6)

Shorebird now supports Flutter 3.47.6 and Dart 3.13.5.

- Windows: fixes a hang in production apps. The fix ships in the engine, so a Windows app picks it up only from a new release built with Flutter 3.47.6 or later.

```sh
shorebird release windows --flutter-version=3.47.6
```

Docs: [Flutter versions](/getting-started/flutter-version/)

### Android patches name the dependency changes behind DEX diffs

**New** in CLI, 2026-10-02, Shorebird CLI 1.6.124 ([release notes](https://github.com/shorebirdtech/shorebird/blob/v1.6.124/RELEASE_NOTES.md)). Permalink: [/changelog/#patch-dex-dependency-changes](/changelog/#patch-dex-dependency-changes)

When `shorebird patch android` finds DEX changes, it now lists the Android libraries whose versions differ from the release, which usually explains a native change you didn't make.

- Each changed library is shown with its release and patch versions, like `io.branch.sdk.android:library 5.21.2 -> 5.21.3`, along with added and removed libraries.
- The list comes from dependency metadata in both app bundles. If either bundle was built without it, nothing is listed.
- Pin dependency versions, or use Gradle dependency locking, so patch builds resolve the same versions as the release. If the listed changes explain every difference and your Dart code doesn't rely on them, `--allow-native-diffs` is safe for that patch.
- In CI and other non-interactive runs, the `--allow-native-diffs` and `--allow-asset-diffs` hints are now printed before the command fails.

Docs: [Native changes warning](/code-push/troubleshooting/#your-app-contains-native-changes-warning-when-creating-a-patch-even-though-you-havent-changed-swiftobjective-ckotlinjava-code)

### Legacy login tokens no longer work

**Changed** in API, 2026-10-01. Permalink: [/changelog/#legacy-login-tokens-retired](/changelog/#legacy-login-tokens-retired)

Since October 1, 2026, tokens from `shorebird login:ci` and logins from CLI versions older than 1.6.87 are rejected.

- Requests with a legacy token get a 401 with the code `legacy_auth_retired`.
- In CI, create an API key in the Console and set it as `SHOREBIRD_TOKEN`.
- On your own machine, run `shorebird upgrade`, then `shorebird logout` and `shorebird login`.

Docs: [Migrate from shorebird login:ci](/account/api-keys/#migrating-from-shorebird-loginci)

## September 2026

### Find apps faster in the Console

**New** in Console, 2026-09-24. Permalink: [/changelog/#console-app-list](/changelog/#console-app-list)

The sidebar now lists the active organization's apps, and the organization's app list can now be filtered, sorted, and paged.

- The sidebar shows up to 10 apps with their icons, with the open app and the ones you visited recently first.
- On the app list, filter by platform and sort by last updated, created date, or name. Long lists are split into pages.

### Pick a role when inviting a member

**New** in Console, 2026-09-24. Permalink: [/changelog/#console-invite-role](/changelog/#console-invite-role)

The invite dialog now has a role picker, so a new member joins with any role your plan offers instead of always as a Developer.

- The dialog lists what the selected role can do.
- Owner can't be picked. Ownership changes only through an ownership transfer.

Docs: [Member roles](/account/orgs/#member-roles)

### Move an older patch to another track

**Fixed** in Console, 2026-09-23. Permalink: [/changelog/#console-change-track-superseded-patch](/changelog/#console-change-track-superseded-patch)

Change Track is now offered on a patch that a newer patch has superseded on its track, so an older `staging` patch can still be promoted to `stable`.

- Previously the action was hidden on any patch with a newer patch on its track that wasn't rolled back.
- The dialog now explains what moving the patch will do.

Docs: [Promote a patch in the Console](/code-push/tracks/#via-the-shorebird-console)

### Copy a pending invitation's link

**New** in Console, 2026-09-21. Permalink: [/changelog/#console-copy-invitation-link](/changelog/#console-copy-invitation-link)

Each pending invitation in an organization's members list now has a button that shows its link, so you can send it yourself.

- Only the invited email address can accept the link, after signing in with it.

Docs: [Add a member](/account/orgs/#add-a-member)

### Flutter 3.47.5 support

**New** in Flutter, 2026-09-21, Shorebird CLI 1.6.123 ([release notes](https://github.com/shorebirdtech/shorebird/blob/v1.6.123/RELEASE_NOTES.md)). Permalink: [/changelog/#flutter-3-47-5](/changelog/#flutter-3-47-5)

Shorebird now supports Flutter 3.47.5 and Dart 3.13.4.

- iOS: fixes an occasional crash when debugging on physical iOS 27 devices.
- Widget Previewer: fixes a crash when re-expanding a preview group.
- A Dart Development Service startup failure is now handled instead of crashing.

```sh
shorebird release ios --flutter-version=3.47.5
```

Docs: [Flutter versions](/getting-started/flutter-version/)

### Release with the Flutter version you already use

**New** in CLI, 2026-09-21, Shorebird CLI 1.6.123 ([release notes](https://github.com/shorebirdtech/shorebird/blob/v1.6.123/RELEASE_NOTES.md)). Permalink: [/changelog/#flutter-version-fvm-and-system](/changelog/#flutter-version-fvm-and-system)

`--flutter-version` now accepts `fvm` and `system`, so you no longer have to look up and repeat your Flutter version number.

- `--flutter-version=fvm` uses the version fvm resolves for your project from its `.fvmrc`. It requires `fvm` on your `PATH`.
- `--flutter-version=system` uses the version reported by the `flutter` on your `PATH`.
- Shorebird still builds with its own fork of Flutter at that version, not with your fvm or system install. A version Shorebird doesn't support fails the same way as one you name explicitly.

```sh
shorebird release android --flutter-version=fvm
```

Docs: [Match the Flutter version you already use](/getting-started/flutter-version/#match-the-flutter-version-you-already-use)

### iOS debug symbols now upload to symbol servers

**Fixed** in CLI, 2026-09-21, Shorebird CLI 1.6.123 ([release notes](https://github.com/shorebirdtech/shorebird/blob/v1.6.123/RELEASE_NOTES.md)). Permalink: [/changelog/#ios-split-debug-info-dsym](/changelog/#ios-split-debug-info-dsym)

On iOS, `--split-debug-info` now writes a Mach-O dSYM, so symbol servers ingest it and Dart stack traces from production become readable.

- Previously the file was an ELF with no debug ID. Uploads reported finding nothing, while still exiting cleanly.
- The fix is in Shorebird's Flutter 3.47.5, the default in CLI 1.6.123. A release built with an older `--flutter-version` still gets the old file.

Docs: [Dart symbols for obfuscated builds](/code-push/crash-reporting/uploading-symbols/#dart-symbols-for-obfuscated-builds)

### See whose plan each organization runs on

**New** in Console, 2026-09-17. Permalink: [/changelog/#console-whose-plan](/changelog/#console-whose-plan)

The organizations list is split into Owned by you and Member of, and each organization shows its plan tier.

- Organization settings say whose plan the organization runs on, with a Manage link for the owner.

Docs: [Plans and upgrading](/account/plans/)

### Patch checks report the patch the device is running

**Fixed** in Code Push, 2026-09-16, Shorebird CLI 1.6.122 ([release notes](https://github.com/shorebirdtech/shorebird/blob/v1.6.122/RELEASE_NOTES.md)). Permalink: [/changelog/#failed-patch-checks-for-replacement](/changelog/#failed-patch-checks-for-replacement)

The automatic patch check now starts after the patch the device boots has loaded, instead of before, so it reports the patch the device is actually running. With `auto_update: false`, your app's own updater call decides when to check.

- Each device is now attributed to the patch it is running. Update delivery is unchanged.
- Installing a new patch can no longer retire a patch that is still booting for the first time.
- When a patch fails to load, the device still checks for a replacement patch on that same launch.
- These fixes are in the updater built into Shorebird's Flutter engine, so they apply to releases built with Shorebird's Flutter 3.47.4 or later, the default in CLI 1.6.122.

Docs: [Patch integrity and automatic rollback](/code-push/rollback/#patch-integrity-and-automatic-rollback)

### Flutter 3.47.4 support

**New** in Flutter, 2026-09-16, Shorebird CLI 1.6.122 ([release notes](https://github.com/shorebirdtech/shorebird/blob/v1.6.122/RELEASE_NOTES.md)). Permalink: [/changelog/#flutter-3-47-4](/changelog/#flutter-3-47-4)

Shorebird now supports Flutter 3.47.4 and Dart 3.13.3.

- iOS: native assets now require iOS 15, raised from iOS 13.
- iOS: when debugging with Xcode 27, a newly paired or upgraded device no longer hangs on a white screen for minutes. Flutter now prepares missing Device Support Symbols first, or warns with the steps to do it yourself.
- Windows: when Smart App Control or another security policy blocks Flutter's binaries, the tool now exits with an actionable error instead of crashing.

```sh
shorebird release ios --flutter-version=3.47.4
```

Docs: [Flutter versions](/getting-started/flutter-version/)

### Clear error when an Android build drops libapp.so

**Fixed** in CLI, 2026-09-14, Shorebird CLI 1.6.121 ([release notes](https://github.com/shorebirdtech/shorebird/blob/v1.6.121/RELEASE_NOTES.md)). Permalink: [/changelog/#android-missing-libapp](/changelog/#android-missing-libapp)

`shorebird release android` and `shorebird patch android` now stop with an explanation when the built app bundle has no `libapp.so`, your compiled Dart code, for any architecture.

- Previously this failed with a generic error about missing artifacts, which for `shorebird release android` pointed at ABI filters.
- The usual cause is a custom Gradle setup that relocates build directories, so the bundle is packaged before `libapp.so` is written.
- A patch that covers only some of the release's architectures now warns and lists the skipped ones, since devices on those architectures won't get it.

### More CLI fixes in 1.6.121

**Fixed** in CLI, 2026-09-14, Shorebird CLI 1.6.121 ([release notes](https://github.com/shorebirdtech/shorebird/blob/v1.6.121/RELEASE_NOTES.md)). Permalink: [/changelog/#cli-fixes-1-6-121](/changelog/#cli-fixes-1-6-121)

CLI 1.6.121 also fixes these issues.

- After an Xcode upgrade, iOS and macOS patches no longer report every asset catalog as changed when no asset changed.
- When an Android build fails and a plugin still references the legacy `flutter.jar`, the error names the plugin to upgrade.
- `shorebird init` no longer separates a comment in your pubspec's `flutter:` section from the key it describes when it adds the `assets:` entry.
- Mistakes in the signing flags of `shorebird release` and `shorebird patch` now name the flag to fix. For example, a key file that doesn't exist names the flag it was passed to, and `shorebird patch` with only one of `--public-key-path` and `--private-key-path` names the one that's missing.
- iOS patch errors, like a missing `.xcarchive` or a release built with Flutter older than 3.22.2, now say what to do next.
- An interrupted Flutter install, such as for `--flutter-version`, now resumes on the next run instead of needing `shorebird cache clean`.

### Flutter 3.47.3 support

**New** in Flutter, 2026-09-14, Shorebird CLI 1.6.121 ([release notes](https://github.com/shorebirdtech/shorebird/blob/v1.6.121/RELEASE_NOTES.md)). Permalink: [/changelog/#flutter-3-47-3](/changelog/#flutter-3-47-3)

Shorebird now supports Flutter 3.47.3 and Dart 3.13.3.

- Android: fixes license detection for cmdline-tools 23.0 and newer.
- iOS and macOS: a missing Xcode is now handled instead of failing hard.
- Dart: fixes Windows-to-Linux cross-compilation producing incorrect executables when build hooks link native code.
- Android: B-series PowerVR GPUs no longer use Vulkan.

```sh
shorebird release android --flutter-version=3.47.3
```

Docs: [Flutter versions](/getting-started/flutter-version/)

### Manage apps from the CLI

**New** in CLI, 2026-09-14, Shorebird CLI 1.6.121 ([release notes](https://github.com/shorebirdtech/shorebird/blob/v1.6.121/RELEASE_NOTES.md)). Permalink: [/changelog/#shorebird-apps-commands](/changelog/#shorebird-apps-commands)

New `shorebird apps` commands list, rename, delete, and transfer apps without opening the Console.

- `shorebird apps transfer --org-id <id>` moves an app into another organization. Run `shorebird account orgs` to find the id.
- `shorebird apps rename --name <name>` changes the display name.
- `shorebird apps delete` has no prompt. Pass `--confirm-name` with the app's current display name to confirm.

```sh
shorebird apps transfer --app-id <id> --org-id 42
```

Docs: [App management commands](/account/cli/#app-management-commands)

### Manage channels from the CLI

**New** in CLI, 2026-09-14, Shorebird CLI 1.6.121 ([release notes](https://github.com/shorebirdtech/shorebird/blob/v1.6.121/RELEASE_NOTES.md)). Permalink: [/changelog/#shorebird-channels-commands](/changelog/#shorebird-channels-commands)

New `shorebird channels` commands create, list, and delete the channels (tracks) an app can publish to.

- Publishing a patch with `--track=<name>` still creates that channel automatically.
- `shorebird channels delete` has no prompt. Pass `--confirm-name` with the channel name to confirm. Devices on a deleted channel stop receiving patches.
- The built-in `stable`, `beta`, and `staging` channels can't be deleted.

```sh
shorebird channels create --app-id <id> --name qa
```

Docs: [Manage tracks from the CLI](/code-push/tracks/#managing-tracks-from-the-cli)

### See your plan from the CLI

**New** in CLI, 2026-09-14, Shorebird CLI 1.6.121 ([release notes](https://github.com/shorebirdtech/shorebird/blob/v1.6.121/RELEASE_NOTES.md)). Permalink: [/changelog/#whoami-plan-level](/changelog/#whoami-plan-level)

`shorebird account whoami` now shows your plan level and whether you have an active subscription.

- The plan level is `free`, `pro`, `business`, or `enterprise`.
- With `--json`, the level is in a new `plan_level` field. The existing `plan` field still reads `paid` or `free`, so scripts that use it keep working.

```sh
shorebird account whoami
```

Docs: [Current account](/account/cli/#current-account)

### Manage your plan and billing in one place

**New** in Console, 2026-09-10. Permalink: [/changelog/#console-plan-page](/changelog/#console-plan-page)

The new Plan page under Account replaces the Plan tab in each organization's settings, since a plan belongs to your account and covers every organization you own.

- Change plan shows the prorated amount before you confirm. Upgrades take effect immediately, and downgrades are scheduled for the end of the billing period.
- Cancel plan keeps your plan until the period ends, and Resume plan undoes a scheduled cancellation.
- Set a monthly spending limit on overage installs, see past overage charges, and open or pay invoices from the same page.
- A past-due payment shows a banner that links to the Plan page.

Docs: [Plans and upgrading](/account/plans/)

### Size analysis is free on every plan during rollout

**Changed** in Console, 2026-09-02. Permalink: [/changelog/#size-analysis-free](/changelog/#size-analysis-free)

The Size tab is now available on every plan, including Free, and releases are analyzed whatever plan they're on. Pricing will come later.

- The upgrade prompt on the Size tab is replaced by a banner you can dismiss.
- The Size tab has a link for sending feedback.

### The built-in channels can't be deleted

**Changed** in API, 2026-09-01. Permalink: [/changelog/#default-channels-protected](/changelog/#default-channels-protected)

Deleting the `stable`, `beta`, or `staging` channel is now refused, since it would unpublish every patch on that track.

- The API returns 403 with the code `channels_delete_default_channel`.
- Channels you create yourself can still be deleted.

Docs: [Delete a track](/code-push/tracks/#delete-a-track)

## August 2026

### Layered app icons no longer count as asset changes

**Fixed** in CLI, 2026-08-28, Shorebird CLI 1.6.120 ([release notes](https://github.com/shorebirdtech/shorebird/blob/v1.6.120/RELEASE_NOTES.md)). Permalink: [/changelog/#apple-layered-icons-asset-changes](/changelog/#apple-layered-icons-asset-changes)

On iOS and macOS, `shorebird patch` no longer reports an asset change for a layered app icon (`.icon`) that you didn't change.

- Xcode gives a layered icon's images new generated names on every build, so every patch looked like it changed the app's asset catalog.

### Flutter 3.47.2 support

**New** in Flutter, 2026-08-28, Shorebird CLI 1.6.120 ([release notes](https://github.com/shorebirdtech/shorebird/blob/v1.6.120/RELEASE_NOTES.md)). Permalink: [/changelog/#flutter-3-47-2](/changelog/#flutter-3-47-2)

Shorebird now supports Flutter 3.47.2 and Dart 3.13.2.

- iOS and macOS: Swift package dependencies are always updated.
- Windows: fixes hot reload ignoring file edits made within the same second.
- Desktop: `--build-name` and `--build-number` are now forwarded to `version.json`.

```sh
shorebird release android --flutter-version=3.47.2
```

Docs: [Flutter versions](/getting-started/flutter-version/)

### Roll patches back and forward from the CLI

**New** in CLI, 2026-08-28, Shorebird CLI 1.6.120 ([release notes](https://github.com/shorebirdtech/shorebird/blob/v1.6.120/RELEASE_NOTES.md)). Permalink: [/changelog/#patches-rollback-and-rollforward](/changelog/#patches-rollback-and-rollforward)

`shorebird patches rollback` and `shorebird patches rollforward` do the same as the Rollback and Roll Forward actions in the Console.

- Both take `--release-version` and `--patch-number`.
- By default, a patch that is already in the requested state is reported and the command succeeds. Add `--require-change` to exit with an error instead.

```sh
shorebird patches rollback --release-version 1.0.0+1 --patch-number 1
```

Docs: [Roll back from the CLI](/code-push/rollback/#roll-back-from-the-cli)
