Skip to content

Commit 718f330

Browse files
Merge pull request #1381 from firebase/feature/cprn-246-author-an-okf-bundle-agent-knowledge-base-for-firebaseui-ios
docs(okf): add agent knowledge bundle for FirebaseUI-iOS
2 parents 46d18fa + f686a37 commit 718f330

22 files changed

Lines changed: 1258 additions & 0 deletions

okf-bundle/ci-workflows/index.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# CI workflows
2+
3+
GitHub Actions job map for FirebaseUI-iOS. Local command ownership stays in [agent command policy](../testing/agent-command-policy.md) and [running tests](../testing/running-tests.md).
4+
5+
## Workflows
6+
7+
| Workflow | Path | Purpose |
8+
|----------|------|---------|
9+
| SwiftUI Auth | [`swiftui-auth.yml`](../../.github/workflows/swiftui-auth.yml) | SwiftFormat check, SPM package unit tests, integration + UI tests with Auth emulator |
10+
| Database | [`database.yml`](../../.github/workflows/database.yml) | CocoaPods `xcodebuild` test, SPM scheme build, `pod lib lint` |
11+
| Firestore | [`firestore.yml`](../../.github/workflows/firestore.yml) | Same shape as Database for Firestore UI |
12+
| Storage | [`storage.yml`](../../.github/workflows/storage.yml) | Same shape as Database for Storage UI |
13+
| Samples | [`sample.yml`](../../.github/workflows/sample.yml) | Build SwiftUI + UIKit sample apps |
14+
| Issue labels / stale | [`issue-labels.yml`](../../.github/workflows/issue-labels.yml), [`stale-issue.yml`](../../.github/workflows/stale-issue.yml) | Repo hygiene (not product validation) |
15+
16+
## Detail docs
17+
18+
* [SwiftUI Auth CI](swiftui-auth.md) — jobs, Xcode pin, emulator, artifacts
19+
* [UIKit modules CI](uikit-modules.md) — Database / Firestore / Storage job matrix
20+
* [Samples CI](samples.md) — sample build destinations
21+
22+
## Shared pins (as of authoring)
23+
24+
* **Xcode 26.2** selected in module/sample/SwiftUI workflows
25+
* **Simulator:** `iPhone 17 Pro` for most test jobs; SwiftUI sample build uses `iPhone 17`
26+
* **Simulator prep script:** [`.github/workflows/scripts/prepare-ios-simulator.sh`](../../.github/workflows/scripts/prepare-ios-simulator.sh)
27+
28+
When pins drift, update these OKF docs in the same change that updates CI — do not leave agents on stale device/Xcode names.

okf-bundle/ci-workflows/samples.md

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
---
2+
type: Reference
3+
title: Samples CI
4+
description: Job shape for .github/workflows/sample.yml.
5+
tags: [ci, samples]
6+
timestamp: 2026-07-31T00:00:00Z
7+
---
8+
9+
# Samples CI
10+
11+
Workflow: [`.github/workflows/sample.yml`](../../.github/workflows/sample.yml).
12+
13+
## Jobs
14+
15+
| Job | Area | Notes |
16+
|-----|------|-------|
17+
| `swiftui` | `samples/swiftui/FirebaseSwiftUISample` | `xcodebuild` **build**; destination `iPhone 17` |
18+
| `swift` | `samples/swift` (`FirebaseUI-demo-swift`) | CocoaPods install then `xcodebuild` **`clean build test`**; destination `iPhone 17 Pro` |
19+
| `objc` | `samples/objc` (`FirebaseUI-demo-objc`) | CocoaPods install then `xcodebuild` **`clean build`**; destination `iPhone 17 Pro` |
20+
21+
Copy **exact** `xcodebuild` / `pod` steps from the workflow when validating sample changes locally — [running tests § samples](../testing/running-tests.md#sample-builds).
22+
23+
Samples are CI smoke checks for the demo apps (the Swift UIKit sample also runs its test target). They are not a substitute for `./swiftui-tests.sh` or `./test.sh`.
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
---
2+
type: Reference
3+
title: SwiftUI Auth CI
4+
description: Job shape and triage notes for .github/workflows/swiftui-auth.yml.
5+
tags: [ci, swiftui, auth, emulator]
6+
timestamp: 2026-07-31T00:00:00Z
7+
---
8+
9+
# SwiftUI Auth CI
10+
11+
Workflow: [`.github/workflows/swiftui-auth.yml`](../../.github/workflows/swiftui-auth.yml).
12+
13+
Local mirror: [`./swiftui-tests.sh`](../../swiftui-tests.sh)[running tests](../testing/running-tests.md#swiftui-auth-tests). Emulator defaults: [firebase testing project](../testing/firebase-testing-project.md).
14+
15+
## Jobs
16+
17+
| Job | What | Notes |
18+
|-----|------|-------|
19+
| `format-check` | `brew install swiftformat` + `./lint-swift.sh` | Paths in `lint-swift.sh` |
20+
| `unit-tests` | `xcodebuild test -scheme FirebaseUI-Package` on prepared simulator | Coverage on; uploads log/xcresult on failure |
21+
| `integration-tests` | Auth emulator + `FirebaseSwiftUIExampleTests` | Node 20, Java 17, `firebase-tools`; `parallel-testing-enabled NO` |
22+
| `ui-tests` | Auth emulator + `build-for-testing` / `test-without-building` for `FirebaseSwiftUIExampleUITests` | Same emulator setup; uploads emulator debug log on failure |
23+
24+
## Environment
25+
26+
| Variable / pin | Value |
27+
|----------------|-------|
28+
| `XCODE_VERSION` | `26.2` |
29+
| `IOS_SIMULATOR_DEVICE` | `iPhone 17 Pro` |
30+
| Runner | `macos-26` |
31+
| Emulator project (script default) | `flutterfire-e2e-tests` |
32+
| Emulator port probe | `http://localhost:9099` |
33+
34+
## Path filters
35+
36+
PRs/pushes run when `FirebaseSwiftUI/**`, `samples/swiftui/**`, `e2eTest/**`, `Package.swift`, `Package.resolved`, Gemfile, or this workflow change.
37+
38+
## Triage
39+
40+
1. Prefer downloading failure artifacts (logs / `.xcresult` / `firebase-debug.log`) over re-running blind.
41+
2. Format failures → `./format-swift.sh` then `./lint-swift.sh`.
42+
3. Emulator failures → confirm Firebase CLI, port `9099`, and project id; locally use `./swiftui-tests.sh --integration`.
43+
4. Simulator resolution failures → inspect `prepare-ios-simulator.sh` output and `xcrun simctl list devices available`.
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
---
2+
type: Reference
3+
title: UIKit modules CI
4+
description: Job shape for Database, Firestore, and Storage UI GitHub Actions workflows.
5+
tags: [ci, database, firestore, storage, cocoapods, spm]
6+
timestamp: 2026-07-31T00:00:00Z
7+
---
8+
9+
# UIKit modules CI
10+
11+
Workflows (same job shape):
12+
13+
* [`.github/workflows/database.yml`](../../.github/workflows/database.yml)
14+
* [`.github/workflows/firestore.yml`](../../.github/workflows/firestore.yml)
15+
* [`.github/workflows/storage.yml`](../../.github/workflows/storage.yml)
16+
17+
Local mirror for the CocoaPods test job: [`./test.sh <Module>`](../../test.sh) after `bundle exec pod install` in the module directory — [running tests](../testing/running-tests.md#uikit-module-tests).
18+
19+
## Jobs (per module)
20+
21+
| Job | What |
22+
|-----|------|
23+
| `xcodebuild` | In module dir: Bundler + `pod install --repo-update`, then repo-root `./test.sh <Module>` |
24+
| `spm` | Repo-root `xcodebuild -scheme <Module> -sdk iphonesimulator` with CI destination |
25+
| `pod` | `bundle exec pod lib lint <Module>.podspec` |
26+
27+
## Environment
28+
29+
| Pin | Value |
30+
|-----|-------|
31+
| Runner | `macos-15` |
32+
| Xcode | `/Applications/Xcode_26.2.app` via `xcode-select` |
33+
| Destination (spm / test.sh) | `iPhone 17 Pro` (see scripts/workflows for exact string) |
34+
35+
## Path filters
36+
37+
Each workflow watches its `Firebase<Module>UI/**`, podspec, `test.sh`, `Package.swift` / `Package.resolved`, Gemfile, and its workflow file.
38+
39+
## Dual-path reminder
40+
41+
A green `xcodebuild` CocoaPods job does **not** prove the SPM product compiles (and vice versa). Agents must satisfy the [distribution path gate](../testing/running-tests.md#distribution-path-gate-blocking) when shared sources change.

okf-bundle/documentation-policy.md

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
---
2+
type: Reference
3+
title: OKF documentation and commit policy
4+
description: Canonical rules for durable vs ephemeral knowledge, commit messages, and post-update bundle consistency.
5+
tags: [okf, documentation, policy, commits, work-queue]
6+
timestamp: 2026-07-31T00:00:00Z
7+
---
8+
9+
# OKF documentation and commit policy
10+
11+
Single source of truth for OKF knowledge and commit wording. Other OKF docs/work queues link here; do not restate.
12+
13+
## Durable vs ephemeral
14+
15+
| Kind | Where it lives | What it contains |
16+
|------|----------------|------------------|
17+
| **Durable** | OKF reference docs (design, runbooks, registries, workflows) | Stable API names, module boundaries, SDK/tooling versions, verification **methods**, architecture, canonical commands |
18+
| **Ephemeral** | Explicit **work-queue** docs only | Session phase/probe IDs, **planned commit subjects** (`commit_subject`), gate state, `next_work_type`, snapshot labels, dated banners, run counts |
19+
20+
**Rules**
21+
22+
1. General OKF docs get **durable only** updates: no phase IDs, **commit subjects**, session test counts, or gate snapshots.
23+
2. Ephemeral state lives **only** in work queues. When an item closes, durable outcomes move to reference docs; queue rows may archive/delete.
24+
3. Durable docs may link to a work queue for current status; do not duplicate ephemeral fields.
25+
26+
## Commits as documentation
27+
28+
We treat **git commits** as durable documentation: they are the canonical record of what changed, when, and why — for humans and agents reviewing history later, not only for the current PR thread.
29+
30+
Commit messages use [Conventional Commits](https://www.conventionalcommits.org/) and describe durable product/process deliverables: what changed and why, not probe IDs, gates, test counts, or "phase X complete".
31+
32+
Common scopes in this repo (non-exhaustive): `auth`, `database`, `firestore`, `storage`, `swiftui`, `ci`, `sample`, `docs`, `okf`.
33+
34+
## Pull requests
35+
36+
When a PR contains **exactly one commit**, the **PR title must match that commit's subject line exactly** (character-for-character). Multi-commit PRs use a summary title that describes the overall change set.
37+
38+
Also follow [`PULL_REQUEST_TEMPLATE.md`](../PULL_REQUEST_TEMPLATE.md) and [`CONTRIBUTING.md`](../CONTRIBUTING.md) (CLA, feature parity with FirebaseUI-Android where the change is user-facing).
39+
40+
## OKF update contract
41+
42+
OKF markdown edits require an **independent bundle consistency pass**. Use a fresh context with:
43+
44+
1. A short summary of what changed and which files were touched.
45+
2. Instruction to scan the **entire** `okf-bundle/` tree.
46+
47+
Confirm:
48+
49+
| Check | Requirement |
50+
|-------|-------------|
51+
| **Canonical location** | Each topic has one owning doc; others link to it ([agent command policy](testing/agent-command-policy.md) for **all** agent shell commands; [change authoring](testing/change-authoring-workflow.md) for workflow/gates/frozen tree; [change authoring § validation evidence (blocking)](testing/change-authoring-workflow.md#validation-evidence-blocking); [running tests](testing/running-tests.md) for test command detail; [iteration vocabulary](testing/iteration-vocabulary.md) for term ids only; [change authoring § quality standards](testing/change-authoring-workflow.md#quality-standards) for review-findings resolution; [coverage design](testing/coverage-design.md) for coverage expectations; [SPM and CocoaPods workflow](packaging/spm-and-cocoapods-workflow.md) for distribution; [firebase testing project](testing/firebase-testing-project.md) for Auth emulator defaults; this file for doc/commit policy) |
52+
| **DRY** | No duplicated procedures, policy paragraphs, or ephemeral snapshots outside work queues |
53+
| **Link hygiene** | Cross-links resolve; indexes list canonical entry points |
54+
| **Durability** | No ephemeral fields leaked into general reference docs |
55+
56+
Fix violations before handoff/merge. Work-queue edits still follow this split.
57+
58+
## Work-queue documents
59+
60+
Work queues are **intentionally ephemeral**: phases, **commit subjects**, gates, active coordination. They are not policy or finalized registry/design homes.
61+
62+
Work queues record **gates**, **`next_work_type`**, **`validation_tier`**, and **`commit_subject`** using field names and allowed values from [iteration vocabulary](testing/iteration-vocabulary.md). Gate semantics and workflow rules: [change authoring workflow](testing/change-authoring-workflow.md). They do **not** name agent roles, dispatch instructions, or session choreography — those are out of scope for the public repo.
63+
64+
Record **`commit_subject`** (the planned Conventional Commit subject line) **before** `git commit`, in the same staged changeset as the item being memorialized. Do not record SHAs — they are unstable under history rewrite. After commit, the subject in git and in the queue must match character-for-character ([PR title rule](#pull-requests) for single-commit PRs).
65+
66+
New work queues link here in frontmatter/opening section; do not copy policy inline.

okf-bundle/index.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
---
2+
okf_version: '0.1'
3+
---
4+
5+
# FirebaseUI-iOS knowledge bundle
6+
7+
Agent-oriented knowledge for this repository. Prefer these docs over improvised shell diagnostics or copying patterns from other FirebaseUI / React Native Firebase repos without re-deriving commands from this tree.
8+
9+
- [Documentation/commit policy](documentation-policy.md) — durable vs ephemeral, commits as documentation, PR titles, OKF consistency
10+
11+
# Testing
12+
13+
- [Agent command policy](testing/agent-command-policy.md) — allowlisted shell commands (install, lint, unit, integration, UI, CocoaPods)
14+
- [Change authoring workflow](testing/change-authoring-workflow.md) — verified change loop (unit-focused → area-focused review → commit); [§ validation evidence (blocking)](testing/change-authoring-workflow.md#validation-evidence-blocking)
15+
- [Iteration vocabulary](testing/iteration-vocabulary.md) — work type, tier, and queue field identifiers
16+
- [Running tests](testing/running-tests.md) — canonical SwiftUI and UIKit test commands, narrowing, emulator
17+
- [Validation checklist](testing/validation-checklist.md) — lint, SPM package tests, CocoaPods module tests, samples, pod lint
18+
- [Coverage design](testing/coverage-design.md) — where coverage is produced and how to treat it
19+
- [Firebase testing project](testing/firebase-testing-project.md) — Auth emulator project id, ports, local vs CI
20+
21+
# CI workflows
22+
23+
- [CI workflows](ci-workflows/index.md) — GitHub Actions job map, Xcode/simulator pins, artifact triage
24+
25+
# Packaging
26+
27+
- [SPM and CocoaPods workflow](packaging/spm-and-cocoapods-workflow.md) — dual distribution rules, product matrix, release scripts
28+
- [SPM / CocoaPods work queue](packaging/spm-cocoapods-work-queue.md) — ephemeral dual-distribution tracker
29+
30+
# Packages
31+
32+
- [Packages index](packages/index.md) — Auth SwiftUI, Database UI, Firestore UI, Storage UI
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
---
2+
type: Reference
3+
title: FirebaseAuthSwiftUI package notes
4+
description: Agent reference for SwiftUI Auth core and provider packages.
5+
tags: [auth, swiftui, spm]
6+
timestamp: 2026-07-31T00:00:00Z
7+
---
8+
9+
# Auth SwiftUI
10+
11+
SPM products: `FirebaseAuthSwiftUI`, `FirebaseAuthUIComponents`, `FirebaseGoogleSwiftUI`, `FirebaseFacebookSwiftUI`, `FirebasePhoneAuthSwiftUI`, `FirebaseAppleSwiftUI`, `FirebaseTwitterSwiftUI`, `FirebaseOAuthSwiftUI`.
12+
13+
## Layout
14+
15+
| Path | Role |
16+
|------|------|
17+
| `FirebaseSwiftUI/FirebaseAuthSwiftUI/` | Core Auth UI (`AuthService`, flows, strings); package unit tests under `Tests/` |
18+
| `FirebaseSwiftUI/FirebaseAuthUIComponents/` | Shared UI components/resources |
19+
| `FirebaseSwiftUI/Firebase*SwiftUI/` | Provider packages + their `Tests/` |
20+
| `e2eTest/FirebaseSwiftUIExample/` | Integration + UI test host app |
21+
| `samples/swiftui/FirebaseSwiftUISample/` | Manual/sample app |
22+
| `GETTING_STARTED.md` / `FirebaseSwiftUI/README.md` | User-facing docs |
23+
24+
## Validation
25+
26+
| Intent | Command |
27+
|--------|---------|
28+
| Lint | `./lint-swift.sh` |
29+
| Package unit | `./swiftui-tests.sh --unit` |
30+
| Integration / UI | `./swiftui-tests.sh --integration` / `--ui` |
31+
| Area / pre-merge | `./swiftui-tests.sh --lint --all` |
32+
33+
Allowlist: [agent command policy](../../testing/agent-command-policy.md). Detail: [running tests](../../testing/running-tests.md#swiftui-auth-tests). Emulator project: [firebase testing project](../../testing/firebase-testing-project.md). CI: [swiftui-auth CI](../../ci-workflows/swiftui-auth.md).
34+
35+
## Agent notes
36+
37+
* Swift 6 language mode is set on these targets in `Package.swift` — treat concurrency/isolation errors as product issues.
38+
* Provider packages depend on `FirebaseAuthSwiftUI` + `FirebaseAuthUIComponents`; keep public Auth configuration APIs stable unless versioning intentionally.
39+
* Version stamp for Swift releases: `FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Version.swift` via [`release-swift.sh`](../../../release-swift.sh) (human release process).
40+
* Feature parity with FirebaseUI-Android Auth UI where applicable ([`CONTRIBUTING.md`](../../../CONTRIBUTING.md)).
41+
* Emulator-backed tests use project `flutterfire-e2e-tests` by default.
42+
43+
## Related
44+
45+
* [SPM and CocoaPods workflow](../../packaging/spm-and-cocoapods-workflow.md) — Auth is SPM-only for consumers
46+
* [`.agents/skills/firebaseui-ios-getting-started/SKILL.md`](../../../.agents/skills/firebaseui-ios-getting-started/SKILL.md) — getting-started skill (user docs adjacent)
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
---
2+
type: Reference
3+
title: FirebaseDatabaseUI package notes
4+
description: Agent reference for Realtime Database UIKit bindings.
5+
tags: [database, uikit, cocoapods, spm]
6+
timestamp: 2026-07-31T00:00:00Z
7+
---
8+
9+
# Database UI
10+
11+
CocoaPods: `FirebaseDatabaseUI` / `FirebaseUI/Database`. SPM product: `FirebaseDatabaseUI`.
12+
13+
## Layout
14+
15+
| Path | Role |
16+
|------|------|
17+
| `FirebaseDatabaseUI/Sources/` | ObjC implementation + public headers |
18+
| `FirebaseDatabaseUI/FirebaseDatabaseUITests/` | XCTest (array/data source behavior) |
19+
| `FirebaseDatabaseUI/Podfile` | Local workspace deps (`Firebase/Database`) |
20+
| `FirebaseDatabaseUI.podspec` | CocoaPods publish metadata |
21+
| `FirebaseDatabaseUI/README.md` | User-facing API overview |
22+
23+
Key types: `FUIArray`, `FUISortedArray`, `FUIIndexArray`, `FUITableViewDataSource`, `FUICollectionViewDataSource`, index variants — see module README.
24+
25+
## Validation
26+
27+
```bash
28+
cd FirebaseDatabaseUI && bundle exec pod install && cd ..
29+
./test.sh FirebaseDatabaseUI
30+
xcodebuild -scheme FirebaseDatabaseUI -sdk iphonesimulator \
31+
-destination 'platform=iOS Simulator,OS=latest,name=iPhone 17 Pro'
32+
bundle exec pod lib lint FirebaseDatabaseUI.podspec # when podspec/packaging changes
33+
```
34+
35+
CI: [uikit-modules CI](../../ci-workflows/uikit-modules.md). Distribution: [SPM and CocoaPods workflow](../../packaging/spm-and-cocoapods-workflow.md).
36+
37+
## Agent notes
38+
39+
* Array/data-source updates are concurrency-sensitive (batch updates vs Firebase child events). Prefer regression tests in `FirebaseDatabaseUITests` when touching `FUIArray` / collection data sources.
40+
* Keep SPM header search paths / `publicHeadersPath` intact when moving headers (`Package.swift` target settings).
41+
* Do not "fix" desyncs by skipping UI updates without tests — recent history includes desync crash fixes that require lockstep item/UI updates.
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
---
2+
type: Reference
3+
title: FirebaseFirestoreUI package notes
4+
description: Agent reference for Firestore UIKit bindings.
5+
tags: [firestore, uikit, cocoapods, spm]
6+
timestamp: 2026-07-31T00:00:00Z
7+
---
8+
9+
# Firestore UI
10+
11+
CocoaPods: `FirebaseFirestoreUI` / `FirebaseUI/Firestore`. SPM product: `FirebaseFirestoreUI`.
12+
13+
## Layout
14+
15+
| Path | Role |
16+
|------|------|
17+
| `FirebaseFirestoreUI/Sources/` | ObjC implementation + public headers |
18+
| `FirebaseFirestoreUI/FirebaseFirestoreUITests/` | XCTest |
19+
| `FirebaseFirestoreUI/Podfile` | Local workspace deps |
20+
| `FirebaseFirestoreUI.podspec` | CocoaPods publish metadata |
21+
| `FirebaseFirestoreUI/README.md` | User-facing API overview |
22+
23+
## Validation
24+
25+
```bash
26+
cd FirebaseFirestoreUI && bundle exec pod install && cd ..
27+
./test.sh FirebaseFirestoreUI
28+
xcodebuild -scheme FirebaseFirestoreUI -sdk iphonesimulator \
29+
-destination 'platform=iOS Simulator,OS=latest,name=iPhone 17 Pro'
30+
bundle exec pod lib lint FirebaseFirestoreUI.podspec # when podspec/packaging changes
31+
```
32+
33+
CI: [uikit-modules CI](../../ci-workflows/uikit-modules.md). Distribution: [SPM and CocoaPods workflow](../../packaging/spm-and-cocoapods-workflow.md).
34+
35+
## Agent notes
36+
37+
* Same dual-distribution rules as Database UI — CocoaPods test path + SPM scheme when shared sources change.
38+
* Preserve public header layout for both podspec `source_files` / header maps and SPM `publicHeadersPath`.

okf-bundle/packages/index.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# Packages
2+
3+
Durable, topic-owned notes for FirebaseUI-iOS libraries (RNFB-equivalent of `okf-bundle/packages/`). User-facing guides remain in module READMEs / `GETTING_STARTED.md`; OKF pages capture **agent** constraints, test entrypoints, and sharp edges.
4+
5+
| Package | Doc | Tree |
6+
|---------|-----|------|
7+
| Auth SwiftUI (+ providers) | [auth-swiftui](auth-swiftui/index.md) | `FirebaseSwiftUI/**` |
8+
| Database UI | [database-ui](database-ui/index.md) | `FirebaseDatabaseUI/**` |
9+
| Firestore UI | [firestore-ui](firestore-ui/index.md) | `FirebaseFirestoreUI/**` |
10+
| Storage UI | [storage-ui](storage-ui/index.md) | `FirebaseStorageUI/**` |

0 commit comments

Comments
 (0)