# firebase-tools-with-isolate

> Command-Line Interface for Firebase with monorepo support

Latest version **15.31.0** (published 2026-09-24) · MIT license · 0 weekly downloads

## Install

```sh
npm install firebase-tools-with-isolate
pnpm add firebase-tools-with-isolate
yarn add firebase-tools-with-isolate
bun add firebase-tools-with-isolate
```

Provides the command `firebase`.

## Health

**Score 60/100 (C)** — status: active.

Positive: no vulnerabilities; has provenance; recently updated; high maintenance score.

Warnings: low downloads; no types; no esm support.

## Facts

| | |
|---|---|
| Version | 15.31.0 |
| Published | 2026-09-24 |
| First published | 2023-11-26 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Node | >=20.0.0 \|\| >=22.0.0 \|\| >=24.0.0 |
| Dependencies | 72 |
| Unpacked size | 5.3 MB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 52 |
| Author | Firebase |
| Maintainers | thijskoerselman |
| Keywords | cdn, cli, ssl, cloud, hosting, firebase, monorepo, isolate, realtime, websockets, synchronization |

## Links

- npm: https://www.npmjs.com/package/firebase-tools-with-isolate
- Repository: https://github.com/0x80/firebase-tools-with-isolate
- Homepage: https://github.com/firebase/firebase-tools
- Issues: https://github.com/firebase/firebase-tools/issues
- npm.io page: https://npm.io/package/firebase-tools-with-isolate

## Dependencies (72)

- [pg](https://npm.io/package/pg.md) ^8.11.3
- [ws](https://npm.io/package/ws.md) ^8.21.1
- [ajv](https://npm.io/package/ajv.md) ^8.17.1
- [ora](https://npm.io/package/ora.md) ^5.4.1
- [tar](https://npm.io/package/tar.md) ^7.5.11
- [tmp](https://npm.io/package/tmp.md) ^0.2.3
- [zod](https://npm.io/package/zod.md) ^4.0.0
- [cors](https://npm.io/package/cors.md) ^2.8.5
- [glob](https://npm.io/package/glob.md) ^10.5.0
- [mime](https://npm.io/package/mime.md) ^2.5.2
- [open](https://npm.io/package/open.md) ^6.3.0
- [yaml](https://npm.io/package/yaml.md) ^2.8.3
- [cjson](https://npm.io/package/cjson.md) ^0.3.1
- [fuzzy](https://npm.io/package/fuzzy.md) ^0.1.3
- [lsofi](https://npm.io/package/lsofi.md) ^2.0.0
- [retry](https://npm.io/package/retry.md) ^0.13.1
- [gaxios](https://npm.io/package/gaxios.md) ^6.7.0
- [ignore](https://npm.io/package/ignore.md) ^7.0.4
- [lodash](https://npm.io/package/lodash.md) ^4.18.0
- [marked](https://npm.io/package/marked.md) ^13.0.2
- [morgan](https://npm.io/package/morgan.md) ^1.10.0
- [semver](https://npm.io/package/semver.md) ^7.5.2
- [undici](https://npm.io/package/undici.md) ^6.19.0
- [express](https://npm.io/package/express.md) ^4.16.4
- [js-yaml](https://npm.io/package/js-yaml.md) ^4.2.0
- [winston](https://npm.io/package/winston.md) ^3.0.0
- [archiver](https://npm.io/package/archiver.md) ^7.0.0
- [chokidar](https://npm.io/package/chokidar.md) ^3.6.0
- [exegesis](https://npm.io/package/exegesis.md) ^4.2.0
- [fs-extra](https://npm.io/package/fs-extra.md) ^10.1.0
- [pglite-2](https://npm.io/package/pglite-2.md) npm:@electric-sql/pglite@0.2.17
- [progress](https://npm.io/package/progress.md) ^2.0.3
- [colorette](https://npm.io/package/colorette.md) ^2.0.19
- [commander](https://npm.io/package/commander.md) ^5.1.0
- [cross-env](https://npm.io/package/cross-env.md) ^7.0.3
- [csv-parse](https://npm.io/package/csv-parse.md) ^7.0.2
- [form-data](https://npm.io/package/form-data.md) ^4.0.1
- [minimatch](https://npm.io/package/minimatch.md) ^3.0.4
- [async-lock](https://npm.io/package/async-lock.md) 1.4.1
- [cli-table3](https://npm.io/package/cli-table3.md) 0.6.5
- [node-fetch](https://npm.io/package/node-fetch.md) ^2.6.7
- [pg-gateway](https://npm.io/package/pg-gateway.md) ^0.3.0-beta.4
- [portfinder](https://npm.io/package/portfinder.md) ^1.0.32
- [ajv-formats](https://npm.io/package/ajv-formats.md) 3.0.1
- [body-parser](https://npm.io/package/body-parser.md) ^1.19.0
- [configstore](https://npm.io/package/configstore.md) ^5.0.1
- [cross-spawn](https://npm.io/package/cross-spawn.md) ^7.0.5
- [proxy-agent](https://npm.io/package/proxy-agent.md) ^6.3.0
- [stream-json](https://npm.io/package/stream-json.md) ^3.6.0
- [superstatic](https://npm.io/package/superstatic.md) ^10.0.0
- [triple-beam](https://npm.io/package/triple-beam.md) ^1.3.0
- [jsonwebtoken](https://npm.io/package/jsonwebtoken.md) ^9.0.2
- [stream-chain](https://npm.io/package/stream-chain.md) ^4.2.5
- [sql-formatter](https://npm.io/package/sql-formatter.md) ^15.3.0
- [tcp-port-used](https://npm.io/package/tcp-port-used.md) ^1.0.2
- [detect-monorepo](https://npm.io/package/detect-monorepo.md) ^1.2.0
- [isolate-package](https://npm.io/package/isolate-package.md) 1.37.0
- [marked-terminal](https://npm.io/package/marked-terminal.md) ^7.0.0
- [abort-controller](https://npm.io/package/abort-controller.md) ^3.0.0
- [exegesis-express](https://npm.io/package/exegesis-express.md) ^4.0.0
- [@inquirer/prompts](https://npm.io/package/@inquirer/prompts.md) ^7.10.1
- [winston-transport](https://npm.io/package/winston-transport.md) ^4.4.0
- [@apphosting/common](https://npm.io/package/@apphosting/common.md) ^0.0.8
- [libsodium-wrappers](https://npm.io/package/libsodium-wrappers.md) ^0.7.10
- [google-auth-library](https://npm.io/package/google-auth-library.md) ^9.11.0
- [universal-analytics](https://npm.io/package/universal-analytics.md) ^0.5.3
- [update-notifier-cjs](https://npm.io/package/update-notifier-cjs.md) ^5.1.6
- [@electric-sql/pglite](https://npm.io/package/@electric-sql/pglite.md) ^0.3.3
- [@google-cloud/pubsub](https://npm.io/package/@google-cloud/pubsub.md) ^5.2.0
- [@modelcontextprotocol/sdk](https://npm.io/package/@modelcontextprotocol/sdk.md) ^1.24.0
- [@electric-sql/pglite-tools](https://npm.io/package/@electric-sql/pglite-tools.md) ^0.2.8
- [@google-cloud/cloud-sql-connector](https://npm.io/package/@google-cloud/cloud-sql-connector.md) ^1.3.3

## Alternatives

- [@opentelemetry/exporter-zipkin](https://npm.io/package/@opentelemetry/exporter-zipkin.md) — 14.8M weekly downloads
- [pusher-js](https://npm.io/package/pusher-js.md) — 2.0M weekly downloads
- [browserify](https://npm.io/package/browserify.md) — 1.7M weekly downloads
- [sqs-consumer](https://npm.io/package/sqs-consumer.md) — 1.7M weekly downloads
- [@sanity/eventsource](https://npm.io/package/@sanity/eventsource.md) — 930.8K weekly downloads

## Recent versions

- 15.31.0 (latest) — 2026-09-24
- 15.28.2-1 (next) — 2026-08-29
- 15.30.2 — 2026-09-18
- 15.30.1 — 2026-09-15
- 15.30.0 — 2026-09-10
- 15.29.0 — 2026-09-03
- 15.28.2 — 2026-08-27
- 15.28.1 — 2026-08-20
- 15.27.0 — 2026-08-14
- 15.26.0 — 2026-08-06
- 15.25.1 — 2026-07-31
- 15.25.0 — 2026-07-30
- 15.24.0 — 2026-07-16
- 15.23.0 — 2026-07-10
- 15.22.4 — 2026-07-01
- … 66 more at https://npm.io/package/firebase-tools-with-isolate/versions

## README

# Firebase CLI with monorepo support

This is a fork of [firebase-tools](https://github.com/firebase/firebase-tools) that integrates [isolate-package](https://github.com/0x80/isolate-package/) into the functions `deploy` command to [support monorepo setups](https://thijs-koerselman.medium.com/deploy-to-firebase-without-the-hacks-e685de39025e). Whether to run isolation is decided by [detect-monorepo](https://github.com/0x80/detect-monorepo), so standalone projects are untouched.

The integration is minimal — roughly 50 lines of code across 3 files — and does not affect any existing functionality. Isolation runs **automatically** whenever your functions source directory sits inside a detected monorepo (pnpm / npm / yarn / bun workspaces, or Rush). Standalone projects are left untouched and behave exactly like upstream.

## Installation

Add this dependency to the root of your monorepo:

```bash
pnpm add firebase-tools-with-isolate -D -w
```

Or the equivalent for NPM or Yarn. I encourage using `pnpm` — apart from being fast and efficient, it has better monorepo support, and the lockfile isolation code is solid and works in parallel for multiple packages, [unlike NPM](https://github.com/0x80/isolate-package/README.md#npm).

> **Important:** Remove/uninstall the original `firebase-tools` package if you have it installed, because otherwise that binary might get precedence over the forked one and `npx firebase deploy` will execute the wrong one.

## Usage

Installing the fork provides you with the same `firebase` command. On the command line, prefix it with `npx`:

```bash
npx firebase deploy
```

In package.json scripts, `npx` is not required — scripts already prefer locally installed binaries.

## Configuration

No configuration is required. When you run `firebase deploy`, the fork calls `detectMonorepo` from `detect-monorepo` on the functions source directory. If a workspace root is found (pnpm-workspace.yaml, a parent `package.json` with a `workspaces` field, or `rush.json`), isolation runs automatically. Otherwise the deploy proceeds exactly as in upstream firebase-tools.

```json
{
  "functions": {
    "source": ".",
    "runtime": "nodejs22",
    "predeploy": ["turbo build"]
  }
}
```

For a monorepo with multiple function packages, place `firebase.json` at the root:

```json
{
  "functions": [
    {
      "source": "services/api",
      "predeploy": ["pnpm build:api"],
      "runtime": "nodejs22",
      "codebase": "api"
    },
    {
      "source": "services/fns",
      "predeploy": ["pnpm build:fns"],
      "runtime": "nodejs22",
      "codebase": "fns"
    }
  ]
}
```

> **Note:** firebase-tools has a limitation that prevents running predeploy commands containing `=`. So `"turbo build --filter=@repo/api"` won't work. Use `"pnpm build:api"` instead, with `"build:api": "turbo build --filter=@repo/api"` in your root package.json.

For a complete working example of a modern monorepo setup, check out [mono-ts](https://github.com/0x80/mono-ts).

## How this fork stays in sync

Fork versions match upstream firebase-tools versions (e.g. `15.13.0` corresponds to upstream `v15.13.0`). The fork is kept in sync using automated tooling:

### Scripts (`scripts/sync/`)

- **`apply-isolate-changes.mjs`** — Applies the isolate integration on top of any clean upstream release. Patches 2 source files plus `package.json` and the README, using anchor-based string matching verified to be stable across upstream releases from v15.4.0 through v15.13.0.

- **`sync-upstream.sh`** — Orchestrates the full sync: fetches upstream, merges a release tag, re-applies the isolate changes, installs dependencies, and verifies the build compiles.

The sync can also be triggered manually:

```bash
# Sync to the latest upstream release
./scripts/sync/sync-upstream.sh

# Sync to a specific version
./scripts/sync/sync-upstream.sh --target v15.13.0

# Dry run (no push)
./scripts/sync/sync-upstream.sh --no-push --no-build
```

### GitHub Actions (`.github/workflows/`)

All workflows use Node 24 and npm OIDC trusted publishing (provenance).

- **[`sync-upstream.yml`](.github/workflows/sync-upstream.yml)** — Runs daily (09:00 UTC) and on manual dispatch. Checks for new upstream firebase-tools releases, merges to main, and triggers the publish workflow automatically. Can target a specific version.

- **[`update-isolate.yml`](.github/workflows/update-isolate.yml)** — Updates the `isolate-package` dependency to a given version, bumps the fork's pre-release number (e.g. `15.13.0` → `15.13.0-1`), and opens a PR targeting `main`. Follow up with the publish workflow to release to npm.

- **[`publish.yml`](.github/workflows/publish.yml)** — Publishes the fork to npm. Called automatically by the sync workflow, or can be triggered manually. Creates a git tag and GitHub release.

### Versioning

- The daily sync automatically publishes version `X.Y.Z` matching upstream `vX.Y.Z`
- Isolate-package updates use pre-release versions (`X.Y.Z-1`, `X.Y.Z-2`, ...) published under the `next` dist-tag

## Issues

Issues on this repository are disabled. For problems with the isolation step itself, submit them at [isolate-package](https://github.com/0x80/isolate-package/issues). For problems with how the fork decides whether a project is a monorepo, submit them at [detect-monorepo](https://github.com/0x80/detect-monorepo/issues). For anything unrelated to the isolate integration, refer to the upstream [firebase-tools](https://github.com/firebase/firebase-tools/issues).

## Documentation

For all other documentation see the [official firebase-tools](https://github.com/firebase/firebase-tools).

---
_Source: https://npm.io/package/firebase-tools-with-isolate · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
