Flutter + Firebase rules for AI coding agents
Full stack: Flutter (Dart) + Firebase
Ready-to-commit rules for Flutter (Dart) + Firebase in every major format: AGENTS.md (Codex, Cursor, Copilot), CLAUDE.md (Claude Code), Cursor .mdc project rules, legacy .cursorrules, Copilot instructions, Windsurf rules and GEMINI.md. A Flutter app on Firebase.
Last reviewed 2026-10-21 · Customise in the generator · Raw: AGENTS.md, CLAUDE.md
Agents use BuildContext after await without checking `mounted`, and leave Firestore rules open.
Generated files
# AGENTS.md - this project
Instructions for AI coding agents working in this repository.
## Project
A Flutter (Dart) + Firebase project.
Stack: Flutter (Dart), Firebase.
## Commands
- Run: `flutter run`
- Analyze: `flutter analyze`
- Tests: `flutter test`
- Format: `dart format .`
- Local emulators: `firebase emulators:start`
- Deploy rules only: `firebase deploy --only firestore:rules`
## Project structure
- Feature folders under `lib/features/<name>/` with widgets, state and data layers.
## How to work in this repo
- Read the relevant files before editing. Follow the patterns already in the codebase over these generic rules.
- Make the smallest change that solves the task. Do not refactor or reformat unrelated code.
- Before saying a task is done, run the type-check, lint and tests listed under Commands and fix what you broke.
- If requirements are ambiguous, ask one clear question instead of guessing.
- Never commit secrets, API keys or `.env` files. Use env vars and keep `.env.example` up to date.
- Do not add a new dependency when the standard library or an existing dependency already covers it.
- Ask before adding, removing or upgrading any dependency.
- Ask before changing database schemas, auth, payments or CI configuration.
- Never delete files, drop data or run destructive commands (`rm -rf`, `git push --force`, `DROP TABLE`) without explicit approval.
- Keep each change under ~200 changed lines where possible; split larger work into steps.
## Flutter (Dart)
- Code must pass `flutter analyze` with no warnings.
- Use `const` constructors wherever possible.
- Split large `build` methods into small widgets, not helper methods returning widgets.
- Use the state management already in the project (Riverpod, Bloc, Provider). Do not introduce a second one.
- Check `mounted` before using `BuildContext` after an `await`.
- Add packages with `flutter pub add`; prefer well-maintained packages from pub.dev.
- Never hardcode API secrets in the app bundle.
## Firebase
- Firebase web config is public by design; security comes from Firestore/Storage Security Rules. Never ship `allow read, write: if true`.
- Every collection needs rules that check `request.auth` and validate the written fields.
- Admin SDK credentials are server-only (Cloud Functions or your backend).
- Model Firestore data for your queries: avoid deeply nested data and unbounded arrays; denormalize deliberately.
- Test rules and functions against the Emulator Suite, not production.
## Reference docs
- [Flutter docs](https://docs.flutter.dev)
- [Firebase docs](https://firebase.google.com/docs)
# CLAUDE.md - this project
Project instructions for Claude Code.
## Project
A Flutter (Dart) + Firebase project.
Stack: Flutter (Dart), Firebase.
## Commands
- Run: `flutter run`
- Analyze: `flutter analyze`
- Tests: `flutter test`
- Format: `dart format .`
- Local emulators: `firebase emulators:start`
- Deploy rules only: `firebase deploy --only firestore:rules`
## Project structure
- Feature folders under `lib/features/<name>/` with widgets, state and data layers.
## How to work in this repo
- Read the relevant files before editing. Follow the patterns already in the codebase over these generic rules.
- Make the smallest change that solves the task. Do not refactor or reformat unrelated code.
- Before saying a task is done, run the type-check, lint and tests listed under Commands and fix what you broke.
- If requirements are ambiguous, ask one clear question instead of guessing.
- Never commit secrets, API keys or `.env` files. Use env vars and keep `.env.example` up to date.
- Do not add a new dependency when the standard library or an existing dependency already covers it.
- Ask before adding, removing or upgrading any dependency.
- Ask before changing database schemas, auth, payments or CI configuration.
- Never delete files, drop data or run destructive commands (`rm -rf`, `git push --force`, `DROP TABLE`) without explicit approval.
- Keep each change under ~200 changed lines where possible; split larger work into steps.
## Flutter (Dart)
- Code must pass `flutter analyze` with no warnings.
- Use `const` constructors wherever possible.
- Split large `build` methods into small widgets, not helper methods returning widgets.
- Use the state management already in the project (Riverpod, Bloc, Provider). Do not introduce a second one.
- Check `mounted` before using `BuildContext` after an `await`.
- Add packages with `flutter pub add`; prefer well-maintained packages from pub.dev.
- Never hardcode API secrets in the app bundle.
## Firebase
- Firebase web config is public by design; security comes from Firestore/Storage Security Rules. Never ship `allow read, write: if true`.
- Every collection needs rules that check `request.auth` and validate the written fields.
- Admin SDK credentials are server-only (Cloud Functions or your backend).
- Model Firestore data for your queries: avoid deeply nested data and unbounded arrays; denormalize deliberately.
- Test rules and functions against the Emulator Suite, not production.
## Reference docs
- [Flutter docs](https://docs.flutter.dev)
- [Firebase docs](https://firebase.google.com/docs)
---
description: "Core rules for this project"
alwaysApply: true
---
# this project
A Flutter (Dart) + Firebase project.
Stack: Flutter (Dart), Firebase.
## Commands
- Run: `flutter run`
- Analyze: `flutter analyze`
- Tests: `flutter test`
- Format: `dart format .`
- Local emulators: `firebase emulators:start`
- Deploy rules only: `firebase deploy --only firestore:rules`
## How to work in this repo
- Read the relevant files before editing. Follow the patterns already in the codebase over these generic rules.
- Make the smallest change that solves the task. Do not refactor or reformat unrelated code.
- Before saying a task is done, run the type-check, lint and tests listed under Commands and fix what you broke.
- If requirements are ambiguous, ask one clear question instead of guessing.
- Never commit secrets, API keys or `.env` files. Use env vars and keep `.env.example` up to date.
- Do not add a new dependency when the standard library or an existing dependency already covers it.
- Ask before adding, removing or upgrading any dependency.
- Ask before changing database schemas, auth, payments or CI configuration.
- Never delete files, drop data or run destructive commands (`rm -rf`, `git push --force`, `DROP TABLE`) without explicit approval.
- Keep each change under ~200 changed lines where possible; split larger work into steps.
---
description: "Flutter (Dart) conventions: Cross-platform Flutter app in Dart 3."
globs: lib/**/*.dart, test/**/*.dart
alwaysApply: false
---
# Flutter (Dart)
- Code must pass `flutter analyze` with no warnings.
- Use `const` constructors wherever possible.
- Split large `build` methods into small widgets, not helper methods returning widgets.
- Use the state management already in the project (Riverpod, Bloc, Provider). Do not introduce a second one.
- Check `mounted` before using `BuildContext` after an `await`.
- Add packages with `flutter pub add`; prefer well-maintained packages from pub.dev.
- Never hardcode API secrets in the app bundle.
Docs: https://docs.flutter.dev
---
description: "Firebase conventions: Firebase Auth, Firestore and Cloud Functions."
globs: firestore.rules, functions/**, **/firebase/**
alwaysApply: false
---
# Firebase
- Firebase web config is public by design; security comes from Firestore/Storage Security Rules. Never ship `allow read, write: if true`.
- Every collection needs rules that check `request.auth` and validate the written fields.
- Admin SDK credentials are server-only (Cloud Functions or your backend).
- Model Firestore data for your queries: avoid deeply nested data and unbounded arrays; denormalize deliberately.
- Test rules and functions against the Emulator Suite, not production.
Docs: https://firebase.google.com/docs
# Cursor rules - this project
You are an expert Flutter (Dart), Firebase engineer working on this codebase. Follow these rules.
## Project
A Flutter (Dart) + Firebase project.
Stack: Flutter (Dart), Firebase.
## Commands
- Run: `flutter run`
- Analyze: `flutter analyze`
- Tests: `flutter test`
- Format: `dart format .`
- Local emulators: `firebase emulators:start`
- Deploy rules only: `firebase deploy --only firestore:rules`
## Project structure
- Feature folders under `lib/features/<name>/` with widgets, state and data layers.
## How to work in this repo
- Read the relevant files before editing. Follow the patterns already in the codebase over these generic rules.
- Make the smallest change that solves the task. Do not refactor or reformat unrelated code.
- Before saying a task is done, run the type-check, lint and tests listed under Commands and fix what you broke.
- If requirements are ambiguous, ask one clear question instead of guessing.
- Never commit secrets, API keys or `.env` files. Use env vars and keep `.env.example` up to date.
- Do not add a new dependency when the standard library or an existing dependency already covers it.
- Ask before adding, removing or upgrading any dependency.
- Ask before changing database schemas, auth, payments or CI configuration.
- Never delete files, drop data or run destructive commands (`rm -rf`, `git push --force`, `DROP TABLE`) without explicit approval.
- Keep each change under ~200 changed lines where possible; split larger work into steps.
## Flutter (Dart)
- Code must pass `flutter analyze` with no warnings.
- Use `const` constructors wherever possible.
- Split large `build` methods into small widgets, not helper methods returning widgets.
- Use the state management already in the project (Riverpod, Bloc, Provider). Do not introduce a second one.
- Check `mounted` before using `BuildContext` after an `await`.
- Add packages with `flutter pub add`; prefer well-maintained packages from pub.dev.
- Never hardcode API secrets in the app bundle.
## Firebase
- Firebase web config is public by design; security comes from Firestore/Storage Security Rules. Never ship `allow read, write: if true`.
- Every collection needs rules that check `request.auth` and validate the written fields.
- Admin SDK credentials are server-only (Cloud Functions or your backend).
- Model Firestore data for your queries: avoid deeply nested data and unbounded arrays; denormalize deliberately.
- Test rules and functions against the Emulator Suite, not production.
## Reference docs
- [Flutter docs](https://docs.flutter.dev)
- [Firebase docs](https://firebase.google.com/docs)
# Copilot instructions - this project
A Flutter (Dart) + Firebase project.
Stack: Flutter (Dart), Firebase.
## Commands
- Run: `flutter run`
- Analyze: `flutter analyze`
- Tests: `flutter test`
- Format: `dart format .`
- Local emulators: `firebase emulators:start`
- Deploy rules only: `firebase deploy --only firestore:rules`
## How to work in this repo
- Read the relevant files before editing. Follow the patterns already in the codebase over these generic rules.
- Make the smallest change that solves the task. Do not refactor or reformat unrelated code.
- Before saying a task is done, run the type-check, lint and tests listed under Commands and fix what you broke.
- If requirements are ambiguous, ask one clear question instead of guessing.
- Never commit secrets, API keys or `.env` files. Use env vars and keep `.env.example` up to date.
- Do not add a new dependency when the standard library or an existing dependency already covers it.
- Ask before adding, removing or upgrading any dependency.
- Ask before changing database schemas, auth, payments or CI configuration.
- Never delete files, drop data or run destructive commands (`rm -rf`, `git push --force`, `DROP TABLE`) without explicit approval.
- Keep each change under ~200 changed lines where possible; split larger work into steps.
---
applyTo: "lib/**/*.dart,test/**/*.dart"
---
# Flutter (Dart)
- Code must pass `flutter analyze` with no warnings.
- Use `const` constructors wherever possible.
- Split large `build` methods into small widgets, not helper methods returning widgets.
- Use the state management already in the project (Riverpod, Bloc, Provider). Do not introduce a second one.
- Check `mounted` before using `BuildContext` after an `await`.
- Add packages with `flutter pub add`; prefer well-maintained packages from pub.dev.
- Never hardcode API secrets in the app bundle.
---
applyTo: "firestore.rules,functions/**,**/firebase/**"
---
# Firebase
- Firebase web config is public by design; security comes from Firestore/Storage Security Rules. Never ship `allow read, write: if true`.
- Every collection needs rules that check `request.auth` and validate the written fields.
- Admin SDK credentials are server-only (Cloud Functions or your backend).
- Model Firestore data for your queries: avoid deeply nested data and unbounded arrays; denormalize deliberately.
- Test rules and functions against the Emulator Suite, not production.
---
trigger: always_on
---
# this project
A Flutter (Dart) + Firebase project.
Stack: Flutter (Dart), Firebase.
## Commands
- Run: `flutter run`
- Analyze: `flutter analyze`
- Tests: `flutter test`
- Format: `dart format .`
- Local emulators: `firebase emulators:start`
- Deploy rules only: `firebase deploy --only firestore:rules`
## How to work in this repo
- Read the relevant files before editing. Follow the patterns already in the codebase over these generic rules.
- Make the smallest change that solves the task. Do not refactor or reformat unrelated code.
- Before saying a task is done, run the type-check, lint and tests listed under Commands and fix what you broke.
- If requirements are ambiguous, ask one clear question instead of guessing.
- Never commit secrets, API keys or `.env` files. Use env vars and keep `.env.example` up to date.
- Do not add a new dependency when the standard library or an existing dependency already covers it.
- Ask before adding, removing or upgrading any dependency.
- Ask before changing database schemas, auth, payments or CI configuration.
- Never delete files, drop data or run destructive commands (`rm -rf`, `git push --force`, `DROP TABLE`) without explicit approval.
- Keep each change under ~200 changed lines where possible; split larger work into steps.
---
trigger: glob
globs: lib/**/*.dart, test/**/*.dart
---
# Flutter (Dart)
- Code must pass `flutter analyze` with no warnings.
- Use `const` constructors wherever possible.
- Split large `build` methods into small widgets, not helper methods returning widgets.
- Use the state management already in the project (Riverpod, Bloc, Provider). Do not introduce a second one.
- Check `mounted` before using `BuildContext` after an `await`.
- Add packages with `flutter pub add`; prefer well-maintained packages from pub.dev.
- Never hardcode API secrets in the app bundle.
---
trigger: glob
globs: firestore.rules, functions/**, **/firebase/**
---
# Firebase
- Firebase web config is public by design; security comes from Firestore/Storage Security Rules. Never ship `allow read, write: if true`.
- Every collection needs rules that check `request.auth` and validate the written fields.
- Admin SDK credentials are server-only (Cloud Functions or your backend).
- Model Firestore data for your queries: avoid deeply nested data and unbounded arrays; denormalize deliberately.
- Test rules and functions against the Emulator Suite, not production.
# GEMINI.md - this project
Project context for Gemini CLI.
## Project
A Flutter (Dart) + Firebase project.
Stack: Flutter (Dart), Firebase.
## Commands
- Run: `flutter run`
- Analyze: `flutter analyze`
- Tests: `flutter test`
- Format: `dart format .`
- Local emulators: `firebase emulators:start`
- Deploy rules only: `firebase deploy --only firestore:rules`
## Project structure
- Feature folders under `lib/features/<name>/` with widgets, state and data layers.
## How to work in this repo
- Read the relevant files before editing. Follow the patterns already in the codebase over these generic rules.
- Make the smallest change that solves the task. Do not refactor or reformat unrelated code.
- Before saying a task is done, run the type-check, lint and tests listed under Commands and fix what you broke.
- If requirements are ambiguous, ask one clear question instead of guessing.
- Never commit secrets, API keys or `.env` files. Use env vars and keep `.env.example` up to date.
- Do not add a new dependency when the standard library or an existing dependency already covers it.
- Ask before adding, removing or upgrading any dependency.
- Ask before changing database schemas, auth, payments or CI configuration.
- Never delete files, drop data or run destructive commands (`rm -rf`, `git push --force`, `DROP TABLE`) without explicit approval.
- Keep each change under ~200 changed lines where possible; split larger work into steps.
## Flutter (Dart)
- Code must pass `flutter analyze` with no warnings.
- Use `const` constructors wherever possible.
- Split large `build` methods into small widgets, not helper methods returning widgets.
- Use the state management already in the project (Riverpod, Bloc, Provider). Do not introduce a second one.
- Check `mounted` before using `BuildContext` after an `await`.
- Add packages with `flutter pub add`; prefer well-maintained packages from pub.dev.
- Never hardcode API secrets in the app bundle.
## Firebase
- Firebase web config is public by design; security comes from Firestore/Storage Security Rules. Never ship `allow read, write: if true`.
- Every collection needs rules that check `request.auth` and validate the written fields.
- Admin SDK credentials are server-only (Cloud Functions or your backend).
- Model Firestore data for your queries: avoid deeply nested data and unbounded arrays; denormalize deliberately.
- Test rules and functions against the Emulator Suite, not production.
## Reference docs
- [Flutter docs](https://docs.flutter.dev)
- [Firebase docs](https://firebase.google.com/docs)
Commands your agent should run
| Task | Command |
|---|---|
| Run | flutter run |
| Analyze | flutter analyze |
| Tests | flutter test |
| Format | dart format . |
| Local emulators | firebase emulators:start |
| Deploy rules only | firebase deploy --only firestore:rules |
What the rules cover
Flutter (Dart)
Cross-platform Flutter app in Dart 3. Scoped to lib/**/*.dart, test/**/*.dart in Cursor, Copilot and Windsurf.
- Code must pass
flutter analyzewith no warnings. - Use
constconstructors wherever possible. - Split large
buildmethods into small widgets, not helper methods returning widgets. - Use the state management already in the project (Riverpod, Bloc, Provider). Do not introduce a second one.
- Check
mountedbefore usingBuildContextafter anawait. - Add packages with
flutter pub add; prefer well-maintained packages from pub.dev. - Never hardcode API secrets in the app bundle.
Source docs: Flutter docs
Firebase
Firebase Auth, Firestore and Cloud Functions. Scoped to firestore.rules, functions/**, **/firebase/** in Cursor, Copilot and Windsurf.
- Firebase web config is public by design; security comes from Firestore/Storage Security Rules. Never ship
allow read, write: if true. - Every collection needs rules that check
request.authand validate the written fields. - Admin SDK credentials are server-only (Cloud Functions or your backend).
- Model Firestore data for your queries: avoid deeply nested data and unbounded arrays; denormalize deliberately.
- Test rules and functions against the Emulator Suite, not production.
Source docs: Firebase docs
How to install
- Copy
AGENTS.mdto your repo root. That covers Codex, Cursor, GitHub Copilot and most other agents. - Using Claude Code? Add a
CLAUDE.mdwith the single line@AGENTS.md, or use the standalone CLAUDE.md tab above. - Want rules that only load for certain files in Cursor? Add the
.cursor/rules/*.mdcfiles. - Commit the files so your whole team (and every agent) shares them.
FAQ
Where do I put the AGENTS.md for Flutter (Dart) + Firebase?
Save it as AGENTS.md in the root of your repository, next to your main config file. Codex, Cursor and GitHub Copilot pick it up automatically. For Claude Code, add a CLAUDE.md containing @AGENTS.md (or use the standalone CLAUDE.md on this page).
What is the most common mistake AI agents make with Flutter (Dart)?
Agents use BuildContext after await without checking mounted, and leave Firestore rules open.
Which commands should the agent run to check its work?
For this stack: flutter run, flutter analyze, flutter test, dart format .. They are listed in the generated files so the agent runs them before finishing a task.
Do these Flutter (Dart) + Firebase rules work with Cursor and Claude Code?
Yes. This page includes the same rules as AGENTS.md, CLAUDE.md, Cursor .mdc project rules, a legacy .cursorrules file, GitHub Copilot instructions, Windsurf rules and GEMINI.md.
Can I customise these rules?
Yes. Open this stack in the generator to add or remove libraries, set your project name and package manager, switch beginner explanations on, and download everything as a zip.
Related stacks
Flutter (Dart) + Supabase
A Flutter app with Supabase auth and database.
Next.js (App Router) + Tailwind CSS v4 + Firebase
Next.js with Firebase Auth and Firestore.
React + Vite + Tailwind CSS v4 + Firebase + Vitest
A React SPA on Firebase Auth and Firestore.
Next.js (App Router) + Tailwind CSS v4 + shadcn/ui + Supabase + Zod validation
The default vibe-coding SaaS stack: Next.js App Router, Supabase for auth and Postgres, Tailwind and shadcn/ui for the interface.
Next.js (App Router) + Tailwind CSS v4
A plain Next.js + TypeScript + Tailwind v4 starter, the most common front-end setup in 2026.
Next.js (App Router) + Tailwind CSS v4 + Prisma + Stripe payments + Zod validation
A paid SaaS on Next.js with Prisma and Stripe subscriptions.