Firebase's Extensions Off-Ramp Can Now Run Unattended
Firebase adds a force flag to its Extensions migration command, letting teams script the move off Extensions ahead of the March 2027 shutdown.

Firebase CLI 15.29.0, out Sept 2, adds a -f, --force flag to firebase ext:migrate, the command that converts an installed Extension into a self-owned Cloud Functions package Firebase calls a function kit (firebase-tools v15.29.0 release notes, GitHub, Sept 2, 2026). It’s the first piece of tooling to ship from the migration path Firebase promised when it announced Extensions was shutting down.
What the flag actually does
ext:migrate already handled the mechanics: it checks a project’s permissions, builds a migration plan, exports an extension instance’s configuration and secrets, installs the equivalent function kit package, deploys it, and can uninstall the original extension once the new version is live. Each of those steps used to pause for a confirmation prompt. The new --force option skips them, so a team can run the command unattended across every extension instance in a project instead of clicking through one at a time.
That matters because of the timeline it sits inside. Firebase’s extensions FAQ set March 31, 2027 as the date console and CLI support for installing, updating or uninstalling an Extension disappears, and said migration documentation and tooling would arrive in September 2026 (Firebase Extensions Deprecation FAQ). That’s the commitment Firerun covered when the shutdown was first announced (Firerun, Aug. 4, 2026), and this release lands two days into the promised window.
The same build also adds a humanReadableDescription field to Firebase’s MCP tools, surfaced in --generate-tool-list output. It’s a small change, but it’s aimed at the AI agents now calling the CLI directly rather than a human reading a terminal, a sign Firebase is tuning one release for both audiences at once.
Why script it instead of clicking through
A project running a handful of extensions can migrate them one at a time through the confirmation prompts without much cost. A project running dozens, or one being migrated by a CI job or a coding agent rather than a person watching each step, cannot. --force is built for the second case. Firebase’s own command flow shows why that’s a deliberate trade: the uninstall of the original extension only happens after the new function kit deploys successfully, so a scripted run doesn’t get to double-check that step by eye either.
The take
Extensions’ last comparable deprecation was messier than this one. In 2023, Google pulled the Firebase Stripe extension with what developers on Hacker News called zero warning, breaking billing flows without notice (Hacker News, August 2023). This wind-down has kept eight months of published notice, extensions that keep running past the deadline, and now a working command for the migration it asked developers to make. That’s a better process. It doesn’t make --force free. The flag is built to skip the checkpoints Firebase itself put in the migration flow, and a batch run across a project’s extensions deserves a dry run against a staging project before it touches anything in production.
What to do
If Extensions are still running in production, don’t reach for --force first. Run ext:migrate on one low-risk instance without it, confirm the resulting function kit behaves like the original, then script the rest. Anything already flagged for removal ahead of the March 2027 deadline should go through the plain uninstall path instead. Migration tooling is for extensions a team is keeping, not the ones already on their way out.


