Masamune logo

Masamune Model Firestore

Follow on GitHub Follow on X Follow on YouTube Maintained with Melos

GitHub Sponsor


[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

  1. 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

  1. Annotate your models with @CollectionModelPath and/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
}
  1. Run the code generator:
katana code generate

This generates:

  • firebase/firestore.rules - Security rules based on your model structure
  • firebase/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

  1. 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 generate after 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:rules for quick rule updates during development

GitHub Sponsors

Sponsors are always welcome. Thank you for your support!

https://github.com/sponsors/mathrunet

Libraries

masamune_model_firestore_builder
Define a builder to describe Firestore rules; build using the masamune_annotation annotation.