Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion public/conformance/firestore-rules.json

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions src/content/docs/docs/contribute/build.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ project, and which tests a change must pass.
## What you need

- **Rust**, the toolchain `rust-toolchain.toml` names: the stable channel with
`clippy` and `rustfmt`. The workspace needs Rust 1.98 or later, and 0.2.4
`clippy` and `rustfmt`. The workspace needs Rust 1.98 or later, and 0.2.5
was built with 1.100.0, the toolchain the release records.
- **Node 24.20.0 and npm 12.0.2**, the versions `CONTRIBUTING.md` names and
the repository's checks pin: `console/` and `conformance/` declare
Expand Down Expand Up @@ -86,7 +86,7 @@ what they lack.
To run a change in your own app through the npm launcher, build a local
candidate. It is a pair of private tarballs, the launcher and your machine's
engine, with a version of their own that names the commit, such as
`0.2.4-local.g1a2b3c4d5e6f`. Nothing is published.
`0.2.5-local.g1a2b3c4d5e6f`. Nothing is published.

1. Commit your change. The build refuses uncommitted tracked changes, so
every candidate names the exact source it came from.
Expand Down
6 changes: 3 additions & 3 deletions src/content/docs/docs/data/keep-data.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ npx firenook emulators:start --keep-data
The first start begins empty and says where the data goes:

```text
firenook 0.2.4
firenook 0.2.5
demo-shop · a fresh start
Node 24.20.0 · data in .firenook/state
```
Expand All @@ -34,7 +34,7 @@ Every later start picks the data up, says when it was saved, and counts what
it holds:

```text
firenook 0.2.4
firenook 0.2.5
demo-shop · picking up the data saved just now
Node 24.20.0 · data in .firenook/state

Expand All @@ -52,7 +52,7 @@ Each start gets a new, empty working directory,
`.firenook/runs/session-<id>/state`, and says so:

```text
firenook 0.2.4
firenook 0.2.5
demo-shop · a fresh start
Node 24.20.0 · data in .firenook/runs/session-VLd3PD, for this run
```
Expand Down
2 changes: 1 addition & 1 deletion src/content/docs/docs/data/seeds.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ npx firenook emulators:start --import ./data --keep-data
The first start imports it into `.firenook/state`:

```text
firenook 0.2.4
firenook 0.2.5
demo-shop · first start, importing the seed "data"
Node 24.20.0 · data in .firenook/state

Expand Down
2 changes: 1 addition & 1 deletion src/content/docs/docs/get-started/ci.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ looks like this, trimmed:

```text
Firenook: running the script through the shell as the official CLI does; use -- for an argv command without shell interpretation
Firenook 0.2.4; engine 4be26bedd0ce6124c3267d6936ec6d9b539a2bc9; disk/WAL state <project>/.firenook/runs/session-Syhid2/state
Firenook 0.2.5; engine 6683b3edb53941a8e7fd34b89a45855b9fff0b50; disk/WAL state <project>/.firenook/runs/session-Syhid2/state
Services: firestore, auth, storage, functions, pubsub; Emulator UI on; host localhost
Demo project demo-shop: no cloud service is contacted, but user Functions can still reach external providers; this CLI is not a network sandbox.
Working data and launch receipt are preserved in <project>/.firenook/runs/session-Syhid2. No automatic deletion.
Expand Down
6 changes: 3 additions & 3 deletions src/content/docs/docs/get-started/docker.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ data you want to keep.

## Use the release image

`ghcr.io/firenook-dev/firenook:0.2.4` holds Node 24 and the `firenook` npm
`ghcr.io/firenook-dev/firenook:0.2.5` holds Node 24 and the `firenook` npm
package of that version, nothing else, for linux/amd64 and linux/arm64.
`latest` is the newest release. Mount the project, with its `firebase.json`,
rules and functions, at `/project`, publish the ports you use, and start the
Expand All @@ -21,7 +21,7 @@ emulators on every address in the container:
```sh
docker run --rm -v "$PWD:/project" \
-p 4000:4000 -p 8080:8080 -p 9099:9099 -p 9199:9199 \
ghcr.io/firenook-dev/firenook:0.2.4 \
ghcr.io/firenook-dev/firenook:0.2.5 \
emulators:start --project demo-shop --host 0.0.0.0
```

Expand All @@ -40,7 +40,7 @@ In Compose, or as a CI service container:
```yaml title="compose.yaml"
services:
firebase:
image: ghcr.io/firenook-dev/firenook:0.2.4
image: ghcr.io/firenook-dev/firenook:0.2.5
command: emulators:start --project demo-shop --host 0.0.0.0
volumes:
- ./:/project
Expand Down
8 changes: 4 additions & 4 deletions src/content/docs/docs/get-started/install.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ stops:

```console
$ npx firenook binary-path
Firenook: Missing @firenook/cli-darwin-arm64@0.2.4. Install with optional dependencies enabled. No postinstall script is needed.
Firenook: Missing @firenook/cli-darwin-arm64@0.2.5. Install with optional dependencies enabled. No postinstall script is needed.
```

:::note
Expand Down Expand Up @@ -152,7 +152,7 @@ published with, and prints where it is:

```console
$ npx firenook --version
0.2.4 (engine source 4be26bedd0ce6124c3267d6936ec6d9b539a2bc9)
0.2.5 (engine source 6683b3edb53941a8e7fd34b89a45855b9fff0b50)
$ npx firenook binary-path
~/demo-shop/node_modules/@firenook/cli-darwin-arm64/bin/firenook
```
Expand Down Expand Up @@ -188,8 +188,8 @@ $ npx firenook doctor
},
"warnings": [],
"problems": [],
"version": "0.2.4",
"engineRevision": "4be26bedd0ce6124c3267d6936ec6d9b539a2bc9"
"version": "0.2.5",
"engineRevision": "6683b3edb53941a8e7fd34b89a45855b9fff0b50"
}
```

Expand Down
8 changes: 4 additions & 4 deletions src/content/docs/docs/get-started/new-project.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ Enter takes them all:
╭──────────────────────────────────────────────────────────────────────────╮
│ │
│ ▄█ │
│ ▄███▀ ▄ firenook 0.2.4 │
│ ▄███▀ ▄ firenook 0.2.5 │
│ ▄███▀ ███▄ a new project in ~/my-app │
│ ▀██▀ ███▀ Node 24.20.0 · Claude Code found │
│ █▀▀ │
Expand Down Expand Up @@ -113,7 +113,7 @@ once. Each step gets a line with its time:
│ │
│ Files ✓ 4 ms firebase.json, .firebaserc, rules, functions/, … │
│ Agents ✓ 0 ms .mcp.json for Claude Code │
│ Firenook ✓ 517 ms 0.2.4 in package.json │
│ Firenook ✓ 517 ms 0.2.5 in package.json │
│ Packages ✓ 14.1 s npm install in functions/, 241 packages │
│ Build ✓ 1.1 s tsc, into functions/lib │
│ │
Expand Down Expand Up @@ -208,7 +208,7 @@ The scripts, as `init` writes them for TypeScript:
"emulators": "firenook emulators:start --keep-data --build"
},
"devDependencies": {
"firenook": "0.2.4"
"firenook": "0.2.5"
}
}
```
Expand Down Expand Up @@ -289,7 +289,7 @@ Firenook init: project demo-my-app in ~/my-app
wrote ~/my-app/functions/.gitignore
wrote ~/my-app/.gitignore
done Agents: .mcp.json for Claude Code (0.0 s)
done Firenook: 0.2.4 in package.json (0.4 s)
done Firenook: 0.2.5 in package.json (0.4 s)
done Packages: npm install in functions/, 241 packages (2.3 s)
done Build: tsc, into functions/lib (0.8 s)
Next steps:
Expand Down
2 changes: 1 addition & 1 deletion src/content/docs/docs/get-started/tests.md
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ builds the functions and starts the emulators around it. Trimmed:
```console
$ npm run test:integration
Firenook: running the script through the shell as the official CLI does; use -- for an argv command without shell interpretation
Firenook 0.2.4; engine 4be26bedd0ce6124c3267d6936ec6d9b539a2bc9; disk/WAL state ~/demo-shop/.firenook/runs/session-Syhid2/state
Firenook 0.2.5; engine 6683b3edb53941a8e7fd34b89a45855b9fff0b50; disk/WAL state ~/demo-shop/.firenook/runs/session-Syhid2/state
Services: firestore, auth, storage, functions, pubsub; Emulator UI on; host localhost
Build: functions runs its build script before the emulators start
firenook functions: Loaded functions definitions from source: helloWorld, orderTotal.
Expand Down
2 changes: 1 addition & 1 deletion src/content/docs/docs/help/former-name.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ where Fireside left it. Start with the same `--state-dir`, and the same

```console
$ npx firenook emulators:start --keep-data --state-dir ./local-state --import ./seed
Firenook 0.2.4; engine 4be26bedd0ce6124c3267d6936ec6d9b539a2bc9; disk/WAL state ~/demo-shop/local-state
Firenook 0.2.5; engine 6683b3edb53941a8e7fd34b89a45855b9fff0b50; disk/WAL state ~/demo-shop/local-state
firenook resuming validated native state (seed import skipped)
firenook: indexed the top-level fields of 5 Firestore documents in 0.0 s
All emulators ready
Expand Down
4 changes: 2 additions & 2 deletions src/content/docs/docs/help/report.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ Search the open and closed issues first: someone may have reported it, and

```console
$ npx firenook --version
0.2.4 (engine source 4be26bedd0ce6124c3267d6936ec6d9b539a2bc9)
0.2.5 (engine source 6683b3edb53941a8e7fd34b89a45855b9fff0b50)
```

Include the whole line: the engine revision says exactly which engine you
Expand Down Expand Up @@ -51,7 +51,7 @@ log to the run's folder and prints where:

```console
$ npx firenook emulators:start --plain --debug --only firestore
Firenook 0.2.4; engine 4be26bedd0ce6124c3267d6936ec6d9b539a2bc9; disk/WAL state ~/demo-shop/.firenook/runs/session-12IyTo/state
Firenook 0.2.5; engine 6683b3edb53941a8e7fd34b89a45855b9fff0b50; disk/WAL state ~/demo-shop/.firenook/runs/session-12IyTo/state
Services: firestore; Emulator UI on; host localhost
Demo project demo-shop: no cloud service is contacted, but user Functions can still reach external providers; this CLI is not a network sandbox.
Debug log: ~/demo-shop/.firenook/runs/session-12IyTo/firenook-debug.log
Expand Down
2 changes: 1 addition & 1 deletion src/content/docs/docs/help/troubleshooting.md
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ it where your app connects too. Every emulator needs its own port; see

```console
$ npx firenook emulators:start
Firenook: Missing @firenook/cli-darwin-arm64@0.2.4. Install with optional dependencies enabled. No postinstall script is needed.
Firenook: Missing @firenook/cli-darwin-arm64@0.2.5. Install with optional dependencies enabled. No postinstall script is needed.
```

The native engine for your machine comes in an optional dependency, one
Expand Down
26 changes: 13 additions & 13 deletions src/content/docs/docs/help/versions.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ install one on purpose, and how to check the package and the engine you have.

## Releases

The current release is `0.2.4`. The first for public use was `0.2.0`, and
The current release is `0.2.5`. The first for public use was `0.2.0`, and
before it came the previews, `0.2.0-next.1` to `0.2.0-next.8`. Each release is listed, with what
it changed and what it passed, on the
[releases page](https://github.com/firenook-dev/firenook/releases) and in the
Expand All @@ -20,7 +20,7 @@ only held the name before the first release and contains no emulator.

## Channels

npm has two tags for Firenook. `latest` is the release to install, `0.2.4`
npm has two tags for Firenook. `latest` is the release to install, `0.2.5`
today; `npm install firenook` and a bare `npx firenook` get it on any Node
from 20 up. `next` carries previews, which keep their own `-next` versions.
`npm view firenook dist-tags` shows where each tag points.
Expand All @@ -34,9 +34,9 @@ and every CI run gets the same release until you upgrade:
npm install --save-dev firenook
```

npm records it as `^0.2.4`: an update can take a later `0.2` release, never
npm records it as `^0.2.5`: an update can take a later `0.2` release, never
`0.3` or a preview. To install one release in particular, name it, as in
`npm install --save-dev firenook@0.2.4`.
`npm install --save-dev firenook@0.2.5`.

Firenook never upgrades itself. In a terminal, it asks for the version tags
(from firenook.dev from 0.2.5, the npm registry before) at most once a day, in the background, and the next start
Expand All @@ -51,8 +51,8 @@ say whether it changes how data is stored.

## Data between releases

Data kept with `--keep-data` moves between `0.2.4`, `0.2.3`, `0.2.2`, `0.2.1`
and `0.2.0` as it is. It also moves between `0.2.0` and the last preview, in
Data kept with `--keep-data` moves between `0.2.5`, `0.2.4`, `0.2.3`,
`0.2.2`, `0.2.1` and `0.2.0` as it is. It also moves between `0.2.0` and the last preview, in
both directions:

- The first `0.2.0` start of data an earlier release saved builds the
Expand All @@ -78,14 +78,14 @@ both:

```console
$ npx firenook --version
0.2.4 (engine source 4be26bedd0ce6124c3267d6936ec6d9b539a2bc9)
0.2.5 (engine source 6683b3edb53941a8e7fd34b89a45855b9fff0b50)
```

The launcher records the engine it expects in `release.json`:

```json title="node_modules/firenook/release.json"
{
"engineRevision": "4be26bedd0ce6124c3267d6936ec6d9b539a2bc9",
"engineRevision": "6683b3edb53941a8e7fd34b89a45855b9fff0b50",
"rustToolchain": "1.100.0",
"platforms": {
"darwin-arm64": "aarch64-apple-darwin",
Expand All @@ -102,10 +102,10 @@ cut short:

```json title="node_modules/@firenook/cli-darwin-arm64/receipt.json"
{
"version": "0.2.4",
"version": "0.2.5",
"platform": "darwin-arm64",
"target": "aarch64-apple-darwin",
"engineRevision": "4be26bedd0ce6124c3267d6936ec6d9b539a2bc9",
"engineRevision": "6683b3edb53941a8e7fd34b89a45855b9fff0b50",
"sha256": "…"
}
```
Expand Down Expand Up @@ -153,7 +153,7 @@ They do not replace npm's provenance or your lockfile.

## What a release has passed

Each release on GitHub, tagged `npm-v0.2.4` and so on, names its
Each release on GitHub, tagged `npm-v0.2.5` and so on, names its
engine revision and the CI runs it passed, and carries:

- the published tarballs, the launcher's and each platform's;
Expand All @@ -166,8 +166,8 @@ You can compare what npm serves with the manifest. `npm pack` downloads the
tarball, and its SHA-256 must match the manifest's:

```sh
npm pack firenook@0.2.4
shasum -a 256 firenook-0.2.4.tgz
npm pack firenook@0.2.5
shasum -a 256 firenook-0.2.5.tgz
```

A platform is supported for a release only when that release's run passed on
Expand Down
2 changes: 1 addition & 1 deletion src/content/docs/docs/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ Java and nothing else to download.

## Status

These docs describe Firenook `0.2.4`. It
These docs describe Firenook `0.2.5`. It
runs on Node 22, 24 or 26, on macOS (Apple silicon and Intel), Linux x64 and
arm64 with glibc 2.28 or newer, and Windows x64. Every release passes
conformance replays against the official emulator and packed installs on all
Expand Down
8 changes: 4 additions & 4 deletions src/content/docs/docs/reference/cli.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: CLI commands
description: Every firenook command and flag in 0.2.4, grouped as firenook --help groups them, with what each does and its default.
description: Every firenook command and flag in 0.2.5, grouped as firenook --help groups them, with what each does and its default.
---

Every command the `firenook` executable takes, grouped as `firenook --help`
Expand All @@ -9,7 +9,7 @@ groups them. Run them through your package manager (`npx firenook ...`,

```console
$ npx firenook --version
0.2.4 (engine source 4be26bedd0ce6124c3267d6936ec6d9b539a2bc9)
0.2.5 (engine source 6683b3edb53941a8e7fd34b89a45855b9fff0b50)
```

`firenook --help`, `-h` or `help` prints one help text for every command,
Expand Down Expand Up @@ -293,8 +293,8 @@ $ npx firenook doctor
...
"warnings": [],
"problems": [],
"version": "0.2.4",
"engineRevision": "4be26bedd0ce6124c3267d6936ec6d9b539a2bc9"
"version": "0.2.5",
"engineRevision": "6683b3edb53941a8e7fd34b89a45855b9fff0b50"
}
```

Expand Down
2 changes: 1 addition & 1 deletion src/content/docs/docs/reference/mcp-tools.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ description: All 55 tools firenook mcp gives a coding agent, by group, with what
import McpTools from '../../../../components/docs/McpTools.astro';

`firenook mcp` serves these 55 tools to a coding agent, in this order. The
list is what the server answers to `tools/list` in 0.2.4. To connect
list is what the server answers to `tools/list` in 0.2.5. To connect
an agent, see [Connect your coding agent](/docs/tools/mcp).

Two marks recur below:
Expand Down
4 changes: 3 additions & 1 deletion src/content/docs/docs/services/firestore.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -354,7 +354,9 @@ curl -X PATCH -H 'Authorization: Bearer owner' -H 'Content-Type: application/jso

- **Transactions are optimistic.** A write that conflicts with a read-write
transaction succeeds, and the transaction's commit then fails with
`ABORTED`, so the SDK runs it again. The official emulator holds a lock
`ABORTED`, so the SDK runs it again. A write conflicts when it changes a
document the transaction read, or the results of a query it ran, including
a query that found nothing. The official emulator holds a lock
instead and aborts the write. A test that races a write against a
transaction sees a different side fail.
- **REST follows production** where the official emulator's REST adapter
Expand Down
12 changes: 12 additions & 0 deletions src/content/docs/docs/services/rules.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,18 @@ says where it went wrong:
firenook storage: rules for every bucket in ~/demo-shop/storage.rules did not compile; the rules in force are unchanged: 9:1: Unexpected '}'.
```

A file that compiles but names a method, service or variable the rules
language does not have, such as `allow writes`, is installed with the
official compiler's warnings, at start-up and on each reload. The misspelled
part allows nothing:

```text
firenook firestore: firestore.rules:5:19 - WARNING Invalid method name: writes.
firenook firestore: database "(default)" rules reloaded from ~/demo-shop/firestore.rules
```

The official emulator prints these warnings on a reload only.

Tests can also replace the rules over HTTP. On the Firestore port,
`PUT /emulator/v1/projects/<project>:securityRules` replaces the rules of
every database of the project, as on the official emulator. It reads the body
Expand Down
4 changes: 3 additions & 1 deletion src/content/docs/docs/services/storage.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,9 @@ The `storage` section takes the same three forms as the official CLI:

- **Both APIs:** uploads (simple, multipart and resumable), downloads,
metadata and custom metadata, download tokens, listing with pagination,
copies and deletes, and gzip.
copies and deletes, and gzip. A token the Admin SDK sets in the
`firebaseStorageDownloadTokens` metadata becomes the file's download token,
as on the official emulator.
- **Security Rules, evaluated in the engine.** No Java and no rules runtime to
download. Version 1 and `rules_version = '2'` files are compiled natively,
including `firestore.get()` and `firestore.exists()` against the local
Expand Down
2 changes: 1 addition & 1 deletion src/content/docs/docs/tools/mcp.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ agent starts it in, and takes the project id from there. Its first line, on
stderr, says what it found:

```text
firenook mcp 0.2.4: 55 tools over stdio for project demo-shop (from ~/demo-shop/firebase.json); local emulators only
firenook mcp 0.2.5: 55 tools over stdio for project demo-shop (from ~/demo-shop/firebase.json); local emulators only
```

`--project <id>` picks the project, and `--config <path>` reads a
Expand Down
Loading
Loading