Skip to content
Merged
Binary file removed src/assets/access_org_settings.png
Binary file not shown.
Binary file removed src/assets/create_org.png
Binary file not shown.
25 changes: 25 additions & 0 deletions src/content/changelog/api-command.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
---
title: Call the Shorebird API from the CLI
date: 2026-10-16
version: 1.6.129
area: CLI
type: New
docLink:
label: Calling the API from the command line
href: /account/api/#calling-the-api-from-the-command-line
---

`shorebird api` sends an authenticated request to the Shorebird API and prints
the response. `--jq` filters a successful response before it's printed.

- Endpoints are relative to `https://api.shorebird.dev/api/v1`, and `{appId}` is
filled in from `shorebird.yaml`.
- `-X` or `--method` sets the method. It defaults to GET, or POST when you pass
fields with `-f` or `-F`, or a body with `--input`.
- A response outside the 2xx range still prints its body. The error goes to
stderr and the command exits with status 1.
- Requests that change data are never retried.

```sh
shorebird api /apps --jq '.apps[].app_id'
```
19 changes: 19 additions & 0 deletions src/content/changelog/api-errors-and-paging.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
---
title: API errors link to the docs, and lists can be paged
date: 2026-10-15
area: API
type: New
docLink:
label: Common patterns
href: /account/api/#common-patterns
---

Every JSON error from the API now carries a `documentation_url`, and the lists
of apps, releases, and patches can be read a page at a time.

- Those lists accept `per_page` and `cursor` and return `next_cursor`. Without
them, they still return everything.
- Lists of invitations and audit log events are always paged. An invalid
`cursor` returns 400 with the code `invalid_cursor`.
- A 401 response to a bearer token, or a 403 because the token's scope doesn't
allow the request, includes a `WWW-Authenticate` header that says why.
9 changes: 8 additions & 1 deletion src/content/changelog/api-method-and-paginate.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,21 @@ docLink:
---

`shorebird api` accepts the HTTP method before the endpoint, and `--paginate`
reads a whole paged list in one call.
reads a whole paged list in one call. `--jq` also takes slices, and the command
now handles a repeated `/api/v1` and explains a 405 after fields made a POST.

- The method can be GET, POST, PUT, PATCH, DELETE, or HEAD, in any case. If you
also pass `-X`, it must name the same method.
- `--paginate` follows `next_cursor` and prints the pages as one JSON object,
with list fields joined. `--jq` runs on the joined result.
- `--paginate` works only with GET. A failed page stops the command with exit
status 1 instead of printing part of the list.
- `--jq` supports array and string slices, such as `.[1:3]`, `.[2:]`, and
`.[:-1]`.
- An endpoint that repeats `/api/v1` is treated as the route under it, with a
note on stderr.
- When `-f` or `-F` turns a request into a POST and the server answers 405, the
CLI suggests adding `--method GET`.

```sh
shorebird api GET /apps
Expand Down
19 changes: 19 additions & 0 deletions src/content/changelog/api-plan-limits.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
---
title: The API refuses what the Console refuses
date: 2026-10-15
area: API
type: Changed
docLink:
label: Member roles
href: /account/orgs/#member-roles
---

Some requests the Console refuses are now refused by the API too, so scripts and
the CLI meet the same rules.

- Setting a spending limit other than 0 on the Free plan returns 403 with the
code `shorebird_plan_insufficient_tier`.
- Inviting someone with, or changing a member to, a role the organization's plan
doesn't offer returns the same error. Developer is always allowed.
- Creating or renaming an organization with a blank name returns 400 with the
code `organization_name_blank`.
13 changes: 13 additions & 0 deletions src/content/changelog/apple-builds-keep-dart-tool.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
---
title: Apple builds keep your .dart_tool caches
date: 2026-10-16
version: 1.6.129
area: CLI
type: Fixed
---

iOS, iOS framework, and macOS builds no longer delete the project's whole
`.dart_tool` directory, so `build_runner` caches and native asset outputs
survive a Shorebird build.

- Only `.dart_tool/flutter_build` and `.dart_tool/version` are cleared.
19 changes: 19 additions & 0 deletions src/content/changelog/audit-log-actor-details.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
---
title: Audit log entries say which key or session acted
date: 2026-10-16
area: Console
type: New
docLink:
label: Event format
href: /enterprise/audit-logs/#event-format
---

Audit log entries now name the API key or sign-in session behind each action,
and say whether the sign-in used multi-factor authentication when the sign-in
provider reports it.

- Creating an app and editing a patch's notes are now recorded.
- Changes Shorebird staff make to your organization appear in its audit log as
`Shorebird staff`.
- Reading the log oldest first leaves out the most recent minute, so a later
read doesn't skip an event that was still being written.
16 changes: 16 additions & 0 deletions src/content/changelog/audit-log-roles.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
---
title: Only Owners, Admins, and Auditors can read the audit log
date: 2026-10-15
area: Console
type: Changed
docLink:
label: Audit logs
href: /enterprise/audit-logs/
---

Viewers, Developers, and App Managers can no longer read an Enterprise
organization's audit log, in the Console or through the API. Before, every
member could.

- Owners and Admins keep access, as does a service account with the Auditor
role.
20 changes: 20 additions & 0 deletions src/content/changelog/audit-log-siem-export.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
---
title: Export the audit log to a SIEM
date: 2026-10-15
area: API
type: New
docLink:
label: Export the audit log to a SIEM
href: /enterprise/audit-logs/#export-the-audit-log-to-a-siem
---

Enterprise organizations can read the audit log through the API oldest first and
forward each event to a SIEM, using a service account with the Auditor role.

- Events are OCSF 1.9.0 API Activity events. Filter by event name with
`operation`, such as `patch.rollback`.
- `order=asc` returns the oldest events first. Pages use `per_page` (30 by
default, at most 100), `cursor`, and `next_cursor`.
- The endpoint's earlier, undocumented `limit`, `resourceType`, and `action`
parameters and its `nextCursor` field were replaced.
- The Console's audit log shows and filters by event name.
34 changes: 34 additions & 0 deletions src/content/changelog/cli-fixes-1-6-129.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
---
title: More CLI fixes in 1.6.129
date: 2026-10-16
version: 1.6.129
area: CLI
type: Fixed
---

CLI 1.6.129 also fixes these issues.

- iOS, iOS framework, and macOS patches no longer leave copies of the app's
binaries in the system temp directory.
- AAR releases and patches skip architectures that have no `libapp.so`, as
Android releases do, and warn when a patch covers only some of them.
- iOS framework, Linux, and Windows patches check the release's minimum Flutter
version before downloading the release's artifacts. On every platform that has
a minimum, the message names the command that creates a new release.
- Commands run at the same time from one login no longer refresh with a stale
token. A refresh uses the newest credentials on disk.
- Piping output into a command that exits early, such as `head -1`, exits with
status 141 instead of crashing.
- Error and progress messages no longer name temporary paths that are deleted
before the command finishes.
- The release picker shows one hint, and `shorebird patches promote --help`
describes `--flavor` correctly.
- `shorebird account orgs --help` lists every role, including `none` for an
organization where you only collaborate on apps.
- When a login can't be refreshed, the CLI says why. An OAuth error from the
auth service asks you to run `shorebird login`. A network or server error
leaves your login as it was and exits with status 75 instead of 70.
- iOS and iOS framework patches no longer read `SHOREBIRD_PATCH_DD_MAX_BYTES`.
Pass `--dd-max-bytes` to `shorebird patch` instead.
- The error for an `--org-id` that isn't a number lists your organizations and
their ids.
22 changes: 22 additions & 0 deletions src/content/changelog/cli-fixes-1-6-130.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
---
title: More CLI fixes in 1.6.130
date: 2026-10-17
version: 1.6.130
area: CLI
type: Fixed
---

CLI 1.6.130 also fixes these issues.

- Prompts no longer crash with `No terminal attached to stdout` when stdout
can't show a prompt, such as when it's redirected to `/dev/null`. The command
runs as non-interactive and, when it needs a confirmation, asks for `--yes` or
`--confirm-name`.
- Declining a prompt no longer prints the generic advice to re-run with
`--verbose`.
- `shorebird doctor` and `shorebird upgrade` on a Shorebird checkout at a
commit, a tag, or a branch with no upstream explain how to get back to
`stable`.
- Every request the CLI makes identifies it with a
`User-Agent: shorebird-cli/<version> (<os>; dart <version>)` header, which
audit log entries record.
15 changes: 15 additions & 0 deletions src/content/changelog/console-fixes-2026-10-18.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
---
title: Console fixes for yearly plans, account deletion, and app transfers
date: 2026-10-18
area: Console
type: Fixed
---

The Console fixes three issues.

- Yearly plans show their price per year, `/yr`, instead of `/mo`.
- Deleting an account that has many apps no longer times out. Through the API,
`DELETE /api/v1/users/me` now answers 202 with `remaining_app_count` while
apps are left to delete. Repeat the request until it answers 204.
- When you transfer an app, organizations where you aren't an Admin or Owner are
listed but can't be chosen. Before, choosing one failed after you submitted.
23 changes: 23 additions & 0 deletions src/content/changelog/delete-confirm-yes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
---
title: Confirm deletes with --yes
date: 2026-10-16
version: 1.6.129
area: CLI
type: Changed
docLink:
label: Destructive commands
href: /code-push/ci/scripting/#destructive-commands
---

`shorebird channels delete` and `shorebird releases delete` ask you to confirm
in a terminal, and `--yes` skips the question. Without a terminal, in CI, or
with `--json`, `--yes` is required.

- `--confirm-name` is deprecated for these two commands and prints a warning.
- Before deleting, each command says what the delete removes, such as a
release's patches.
- `shorebird apps delete` now asks you to type the app's display name in a
terminal. Scripts still pass it with `--confirm-name`, and there's no `--yes`.
- Declining a prompt now exits with status 1 instead of 0. This covers
`shorebird patches set-track`, the native and asset change prompts of
`shorebird patch`, and the new delete prompts.
15 changes: 15 additions & 0 deletions src/content/changelog/delete-tracks-hide-rolled-back.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
---
title: Delete a track, and hide rolled-back patches
date: 2026-10-18
area: Console
type: New
docLink:
label: Delete a track
href: /code-push/tracks/#delete-a-track
---

The Tracks page can delete tracks you added, and a release's patch list hides
rolled-back and deactivated patches unless you ask to see them.

- `stable`, `beta`, `staging`, and `deactivated` have no delete button.
- A switch shows the hidden patches and how many there are.
12 changes: 12 additions & 0 deletions src/content/changelog/failed-payment-invoices-voided.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
title: Canceled plans void their open invoices
date: 2026-10-14
area: Console
type: Fixed
---

When a plan is canceled because a payment failed, its open invoices are now
voided.

- The payment link in the billing email can no longer take a payment for a plan
that has ended.
17 changes: 17 additions & 0 deletions src/content/changelog/json-envelope-every-command.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
---
title: Every --json command prints one JSON object
date: 2026-10-16
version: 1.6.129
area: CLI
type: Changed
docLink:
label: Errors
href: /code-push/ci/scripting/#errors
---

With `--json`, every command writes exactly one JSON object to stdout, including
`--help` and commands that have no data to return.

- A command with no data prints `"data": {}` in its success object.
- When an API call fails, the error includes the server's `api_code` and
`details`. Without `--json`, the CLI prints the code as `Error code: <code>`.
20 changes: 20 additions & 0 deletions src/content/changelog/metrics-commands.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
---
title: See app metrics from the CLI
date: 2026-10-16
version: 1.6.129
area: CLI
type: New
docLink:
label: Metrics commands
href: /account/cli/#metrics-commands
---

`shorebird metrics` shows the metrics the Console shows under Insights, such as
patch installs, downloads, adoption, and active devices.

- The subcommands are `active-hours`, `adoption`, `downloads`, `heatmap`,
`installs`, `new-devices`, `users`, and `versions`.
- Pick the app with `--app-id` or `--flavor`. Depending on the metric,
`--start`, `--end`, and `--release-version` narrow the results, and
`--granularity` and `--group-by` break them down.
- With `--json`, `data` holds the API's response.
15 changes: 15 additions & 0 deletions src/content/changelog/name-new-organizations.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
---
title: Name an organization when you create it
date: 2026-10-20
area: Console
type: Changed
docLink:
label: Creating an organization
href: /account/orgs/#creating-an-organization
---

Creating an organization now asks for its name. New organizations are no longer
called "My Organization".

- Inviting someone to an organization that's still called "My Organization"
suggests renaming it first.
17 changes: 17 additions & 0 deletions src/content/changelog/org-switcher.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
---
title: Switch organizations from the sidebar
date: 2026-10-14
area: Console
type: New
docLink:
label: Creating an organization
href: /account/orgs/#creating-an-organization
---

The top of the Console's sidebar names the organization you're in and opens a
switcher with its plan, your role, its install usage, and your other
organizations.

- Your account links and Log out moved to a menu in the header.
- On 2026-10-15, the theme toggle left the header. Choose a theme under
Appearance on your account page.
22 changes: 22 additions & 0 deletions src/content/changelog/patch-cache-cleared-on-delete.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
---
title: Patch checks catch up with deletes and rollbacks
date: 2026-10-15
area: Code Push
type: Fixed
docLink:
label: Delete a track
href: /code-push/tracks/#delete-a-track
---

Deleting a track now takes effect on the next patch check, and deleting a
release can no longer leave its patches cached. Running a rollback or roll
forward again now clears the cache if the first run couldn't.

- Devices on a deleted track could keep receiving its last patch. That cached
answer is now cleared.
- If clearing the cache fails during a rollback or roll forward, the request
returns `patch_rollback_cache_error` or `patch_rollforward_cache_error`.
Running it again clears the cache.
- After you delete one platform of a release, devices on that platform are no
longer offered its patches. Before, they were, and the download failed because
the patch files had been deleted with the platform.
15 changes: 15 additions & 0 deletions src/content/changelog/patch-check-publish-race.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
---
title: Patch checks keep up with new patches and app transfers
date: 2026-10-20
area: Code Push
type: Fixed
docLink:
label: Transfer an app
href: /account/orgs/#transfer-an-app
---

A patch check that ran while a patch was being published could leave "no patch"
cached until the next change. The next check now sees the new patch.

- An app transferred to another organization follows the new organization's
patch limit right away, instead of the old one's for up to an hour.
Loading
Loading