Purpose
Project Registry stores every Firebase target Firestruct can operate on. The GUI uses it for project linking, selection, emulator configuration, account metadata, read-only mode, color tags, Firestore database selection, and module-specific configuration.
Project Linking
Users can link projects through the project sheet from the sidebar.
Supported project sources:
- Google OAuth account discovery
- Service Account JSON
- Firebase CLI credentials detected on the machine
- Local emulator manual setup
- Local emulator discovery after app startup
Stored project fields include:
- display name
- Firebase project ID
- environment (
emulator,development,production) - read-only flag
- emulator host and ports for Firestore/Auth/Storage
- selected Firestore database ID
- project color tag
- optional local workspace path
- module-specific settings such as Auth user collection mapping, push token mapping, and migration collection
Sidebar Behavior
- The selected project row is highlighted.
- Rows show name, Firebase project ID, selected Firestore database, environment, emulator endpoint when present, and read-only status.
- The project color tag helps distinguish multiple connected projects.
- Removing a linked project only removes local metadata; it does not delete Firebase data.
Multiple Firestore Databases
The registry can discover, persist, select, and refresh Firestore database IDs for a linked project. Module queries and writes use the selected database.
Safety
- Read-only projects block writes and destructive workflows across modules.
- Environment is shown in module headers and mutation dialogs.
- Production targets require explicit confirmation for mutations and deploys.
Source Anchors
Sources/FirestructCore/ProjectRegistry.swiftSources/FirestructCore/ProjectRegistry+Stores.swiftSources/FirestructCore/ProjectRegistry+WorkspaceServices.swiftSources/FirestructCore/ProjectRegistry+Migrations.swiftSources/FirestructCore/SQLiteProjectStore.swiftSources/FirestructCore/FirestoreDatabaseDiscoveryService.swiftSources/FirestructApp/App/UI/ProjectLinkSheetView.swiftSources/FirestructApp/App/UI/SidebarView.swift