Masamune Model Firestore
[GitHub](https://github.com/mathrunet) | [YouTube](https://www.youtube.com/c/mathrunetchannel) | [Packages](https://pub.dev/publishers/mathru.net/packages) | [X](https://x.com/mathru) | [LinkedIn](https://www.linkedin.com/in/mathrunet/) | [mathru.net](https://mathru.net)
Masamune Model Firestore Builder
Usage
Installation
- Add the builder as a development dependency alongside the runtime package.
flutter pub add katana_model_firestore
flutter pub add --dev masamune_model_firestore_builder
flutter pub add --dev build_runner
Generate Firestore Rules and Indexes
- Annotate your models with
@CollectionModelPathand/or@DocumentModelPath:
// lib/models/user.dart
@freezed
@formValue
@immutable
@CollectionModelPath('user')
class UserModel with _$UserModel {
const factory UserModel({
required String name,
@Default('') String email,
@Default(ModelTimestamp.now()) ModelTimestamp createdAt,
}) = _UserModel;
// ... rest of the model
}
- Run the code generator:
katana code generate
This generates:
firebase/firestore.rules- Security rules based on your model structurefirebase/firestore.indexes.json- Composite indexes for your queries
Generated Files
firestore.rules: Contains security rules like:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /user/{userId} {
allow read, write: if request.auth != null;
}
}
}
firestore.indexes.json: Contains index definitions for complex queries:
{
"indexes": [
{
"collectionGroup": "user",
"queryScope": "COLLECTION",
"fields": [
{"fieldPath": "createdAt", "order": "DESCENDING"},
{"fieldPath": "name", "order": "ASCENDING"}
]
}
]
}
Deploy to Firebase
- Deploy the generated rules and indexes to your Firebase project:
# Deploy both rules and indexes
firebase deploy --only firestore:rules,firestore:indexes
# Or deploy individually
firebase deploy --only firestore:rules
firebase deploy --only firestore:indexes
Customize Generation
Configure output paths in build.yaml:
targets:
$default:
builders:
masamune_model_firestore_builder:
options:
output_dir: "firebase" # Default output directory
Tips
- Run
katana code generateafter any model changes to keep rules synchronized - Review generated rules before deploying to production
- Add custom rules in the Firebase Console if needed (they won't be overwritten)
- Use
firebase deploy --only firestore:rulesfor quick rule updates during development
GitHub Sponsors
Sponsors are always welcome. Thank you for your support!
Libraries
- masamune_model_firestore_builder
- Define a builder to describe Firestore rules; build using the masamune_annotation annotation.