A Chrome DevTools extension for real-time Firestore monitoring and debugging
Visualize queries โข Export code โข Track collections โข Debug in real-time
Traditional Firestore debugging means digging through network tabs and deciphering cryptic request payloads. FireScope transforms this experience into something actually enjoyable.
The Problem: Firestore's document-based queries live in the stone age of browser debugging tools.
The Solution: A dedicated DevTools panel that speaks Firestore natively.
- Captures Firestore network calls as you develop.
- Groups multiple queries in a single request under one card (Listen/channel).
- Shared stats per request: method, duration, status, count.
- Badges for FETCH, LOOKUP, WRITE, and AGG (aggregations).
- Collection Group (CG) badge when applicable.
- Doc lookups show paths like
Users/user_1right in the summary.
- Angular (AngularFire), Node.js (Admin SDK), Flutter (cloud_firestore), and JSON.
- Works per request and per subโquery in grouped requests.
- Compact, readable JSON with collapsible sections.
- Aggregation summaries (COUNT/SUM/AVG) rendered per query.
- Filter by collection via search (Ctrl/Cmd+F) or the Collections menu.
- Export all visible requests, or clear the list quickly.
- Light/Dark/System themes (More menu).
- Nonโclipping dropdowns (portal) and keyboard-friendly search.
- Pro (optional): โView in Consoleโ deepโlinks queries/documents to Firebase Console.
| Main Interface | Filtering โ Part 1 | Filtering โ Part 2 |
|---|---|---|
![]() |
![]() |
![]() |
| Details View | Code Export | More Menu |
|---|---|---|
![]() |
![]() |
![]() |
| Themes | Grouped Requests | โ |
|---|---|---|
![]() |
![]() |
More screenshots coming soon |
- Click the badge above or Install FireScope from Chrome Web Store
- Follow Chrome prompts to add the extension
- Download the latest release ZIP from GitHub Releases
- Unzip the file
- Go to
chrome://extensionsand enable Developer Mode - Click "Load unpacked" and select the unzipped folder
Note: Release ZIPs will always contain the latest built extension files for easy installation.
- Adds a โView in Consoleโ button to open the current query or document directly in Firebase Console.
- Requires an API key and a small backend that builds the console URL from minimal query info.
- Privacy: Only normalized query metadata is sent (collection path, filters/order, flags, project ID). No raw document data.
- Fast: Successful URLs are cached locally for 24h.
Setup (Pro)
- Install the Pro build (ZIP) or build locally.
- Open the extension Options page and paste your API key (stored in Chrome sync).
- Click โView in Consoleโ in the panel to jump to Firebase Console.
Build
pnpm build:freeโ Free build (no Console button).pnpm build:proโ Pro build. Optional:VITE_PRO_API_BASE=https://your-backend.pnpm build:bothโ Producesfirescope.zipandfirescope-pro.zip.
Permissions (Pro)
storagefor key + cache.- Host permission for your backend (configured in the Pro manifest).
Notes
- The server builds Console URLs so logic stays private and can evolve without client updates.
- To purchase a Pro API key, please contact me: https://github.com/omar-dulaimi
sequenceDiagram
participant DevTools as DevTools Panel
participant Ext as Extension (Pro)
participant API as Pro Backend (/link)
participant Console as Firebase Console
DevTools->>Ext: Click "View in Console"
Ext->>API: POST /link { firebaseUrl, collectionPath, filters, orderBy, limit, type, documentId? }
API->>API: Build project + query string
API-->>Ext: 200 { url }
Note over Ext: Cache URL for 24h (chrome.storage.local)
Ext->>Console: window.open(url)
Behavior
- Document lookup (LOOKUP): opens the exact document page in Firebase Console.
- Structured / collection(-group) queries: opens the Console query builder with filters, ordering, and limit prefilled.
sequenceDiagram
participant DevTools as DevTools Panel
participant Ext as Extension (Pro)
participant API as Pro Backend (/link)
DevTools->>Ext: Click "View in Console"
alt Missing API key
Ext-->>DevTools: Show prompt to add API key (Options)
else With API key
Ext->>API: POST /link { ... }
alt Backend error
API-->>Ext: 4xx/5xx { error }
Ext-->>DevTools: Show error toast
else OK
API-->>Ext: 200 { url }
Ext-->>DevTools: Open Console URL
end
end
# Clone and setup
git clone https://github.com/omar-dulaimi/firescope.git
cd firescope
pnpm install
# Build for production
pnpm run build
# Or start development
pnpm run build:dev # Quick development build
pnpm run build:watch # Auto-rebuild on changes- After building, load the
distfolder in Chrome via Developer Mode (chrome://extensions โ Load unpacked)
- Open DevTools โ Press
F12or right-click โ Inspect Element - Find FireScope โ Look for the "FireScope" tab in DevTools
- Visit your app โ Navigate to any page with Firestore queries
- Watch magic happen โ Requests appear in real-time!
- Click any request โ Export โพ โ choose your target.
Angular (AngularFire)
// AngularFire example
import {
Firestore,
collection,
query,
where,
orderBy,
getDocs,
} from '@angular/fire/firestore';
const ref = collection(firestore, 'Users');
let qRef = ref;
qRef = query(qRef, where('status', '==', 'active'));
qRef = query(qRef, orderBy('createdAt', 'asc'));
const snap = await getDocs(qRef);
console.log(snap.docs.map(d => ({ id: d.id, ...d.data() })));Node.js (Admin SDK)
// Node.js Admin SDK example
const db = admin.firestore();
let ref = db.collection('Users');
const queryRef = ref
.where('status', '==', 'active')
.orderBy('createdAt', 'asc');
const snap = await queryRef.get();
console.log(snap.docs.map(d => ({ id: d.id, ...d.data() })));Flutter (cloud_firestore)
// Flutter Firestore example
final ref = FirebaseFirestore.instance.collection('Users');
var queryRef = ref
.where('status', isEqualTo: 'active')
.orderBy('createdAt', descending: false);
final snap = await queryRef.get();
print(snap.docs.map((d) => d.data()));- Click "Collections" to see your database access patterns
- Discover which collections are hit most frequently
- Identify potential optimization opportunities
Built with cutting-edge tools for the best developer experience:
| Technology | Purpose | Why We Use It |
|---|---|---|
| โก Vite | Build System | Lightning-fast HMR and optimized builds |
| ๐ ESLint | Code Quality | Modern config with automatic error detection |
| ๐ Prettier | Code Formatting | Consistent, beautiful code across the project |
| ๐ฆ Manifest V3 | Extension Platform | Latest Chrome extension standards |
| ๐งช Modular Design | Architecture | Clean separation of concerns |
- Node.js 20+ with pnpm
- Chrome 88+ (Manifest V3 support)
- Git for version control
# ๐ง Development
pnpm run dev # Start dev server (port 8080)
pnpm test # Run tests in browser
pnpm run lint # Check code quality
pnpm run format # Format with Prettier
# ๐๏ธ Building
pnpm run build # Production build (lint + validate + build)
pnpm run build:dev # Fast development build
pnpm run build:watch # Auto-rebuild on file changes
pnpm run build:clean # Clean dist/ directory
# ๐ฎ Demo & Testing
pnpm run demo:website # Start demo site (port 3000)
pnpm run demo:seed # Populate demo database-
Document Lookup
- Open a specific document by path (e.g.,
Users/user_1). - Shows as LOOKUP; in Pro, deep-link to Console for that doc.
- Open a specific document by path (e.g.,
-
Structured Query (Collection)
- Filters:
==,!=,<,<=,>,>=,in,not-in,array-contains,array-contains-any. - Ordering: multiple
orderByclauses. - Limit: supports numeric
limit.
- Filters:
-
Collection Group Query
- Same operators as structured queries, across subcollections (
collectionGroup).
- Same operators as structured queries, across subcollections (
-
Aggregation Query
- COUNT, SUM(field), AVG(field).
- Displays an aggregation summary and exports to code.
-
Batched in One Request
- Multiple queries can arrive in the same Listen request; FireScope groups them under one card with per-query chips and actions.
graph LR
A[Edit Source] --> B[Auto Lint]
B --> C[Auto Format]
C --> D[Vite Build]
D --> E[Reload Extension]
E --> F[Test Changes]
- Edit files in
src/directory - Build with
pnpm run build(includes linting & validation) - Reload extension at
chrome://extensions/ - Test on any Firestore-enabled website
- webRequest: Monitor Firestore API calls (
firestore.googleapis.com) - Host permissions: Access to your domains for request interception
| โ We DON'T | โ We DO |
|---|---|
| Send data to external servers | Process everything locally |
| Store personal information | Respect your privacy |
| Track your usage | Keep data in your browser |
| Access unrelated browser data | Only monitor Firestore requests |
| Modify your Firestore data | Read-only monitoring |
100% Local Processing - All monitoring happens in your browser. Zero data leaves your machine.
๐จ Extension not appearing in DevTools
- Ensure extension is enabled at
chrome://extensions/ - Developer mode must be enabled
- Refresh the page and reopen DevTools
- Check Chrome version (need 88+ for Manifest V3)
๐ญ No requests showing up
- Verify the website uses Firestore (check Network tab for
firestore.googleapis.com) - Check browser console for extension errors
- Ensure you're on the correct tab
- Try the demo:
pnpm run demo:website
๐ Performance issues
- Clear old requests using the clear button
- Adjust max requests in Settings (default: 50)
- Use filtering to reduce visible requests
- Close unused DevTools tabs
๐ ๏ธ Development issues
- Build errors: Run
pnpm run lintto check syntax - Tests failing: Use
pnpm testfor browser test runner - Demo not working: Configure
.envwith Firebase credentials - Vite issues: Clear
node_modulesand reinstall
We welcome contributions! Here's how to get started:
# 1. Fork the repository
# 2. Clone your fork
# 3. Create a feature branch
git checkout -b feature/amazing-feature
# 4. Make changes and test
pnpm run lint # Check code quality
pnpm run format # Format code
pnpm test # Run tests
# 5. Commit and push
git commit -m "Add amazing feature"
git push origin feature/amazing-feature
# 6. Open a Pull RequestThis project is licensed under the GNU General Public License v3.0 (GPL-3.0). Any derivative work or redistribution must also be licensed under GPL-3.0. See LICENSE for details.
๐ฅ Made with โค๏ธ for the Firebase community
Star this repo if FireScope helps you debug faster! โญ








