$npx -y skills add johnrogers/claude-swift-engineering --skill sqlite-dataUse when working with SQLiteData library (@Table, @FetchAll, @FetchOne macros) for SQLite persistence, queries, writes, migrations, or CloudKit private database sync.
| 1 | # SQLite Data |
| 2 | |
| 3 | SQLiteData provides type-safe SQLite access through Swift macros, simplifying database modeling and queries while handling CloudKit sync, migrations, and async patterns automatically. |
| 4 | |
| 5 | ## Reference Loading Guide |
| 6 | |
| 7 | **ALWAYS load reference files if there is even a small chance the content may be required.** It's better to have the context than to miss a pattern or make a mistake. |
| 8 | |
| 9 | | Reference | Load When | |
| 10 | |-----------|-----------| |
| 11 | | **[Table Models](references/models.md)** | Defining tables with `@Table`, setting up primary keys, columns, or enums | |
| 12 | | **[Queries - Basics](references/queries-basics.md)** | Using `@FetchAll`, `@FetchOne`, `@Selection`, filtering, ordering, or joins | |
| 13 | | **[Queries - Advanced](references/queries-advanced.md)** | Using `@Fetch` with `FetchKeyRequest`, dynamic queries, recursive CTEs, or direct reads | |
| 14 | | **[Writes](references/writes.md)** | Inserting, updating, upserting, deleting records, or managing transactions | |
| 15 | | **[Views - SwiftUI](references/views-swiftui.md)** | Using `@FetchAll`/`@FetchOne` in SwiftUI views, `@Observable` models, or animations | |
| 16 | | **[Views - Integration](references/views-integration.md)** | UIKit integration, dynamic query loading, TCA integration, or `observe {}` | |
| 17 | | **[Migrations](references/migrations.md)** | Creating database migrations with `DatabaseMigrator` or `#sql()` macro | |
| 18 | | **[CloudKit Sync](references/cloudkit.md)** | Setting up CloudKit private database sync, sharing, or sync delegates | |
| 19 | | **[Dependencies](references/dependencies.md)** | Injecting database/sync engine via `@Dependency`, bootstrap patterns, or TCA integration | |
| 20 | | **[Testing](references/testing.md)** | Setting up test databases, seeding data, or writing assertions for SQLite code | |
| 21 | | **[Advanced - Queries](references/advanced-queries.md)** | Implementing triggers, custom database functions, or full-text search (FTS5) | |
| 22 | | **[Advanced - Optimization](references/advanced-optimization.md)** | Performance tuning, indexes, custom aggregates, JSON aggregation, or self-joins | |
| 23 | | **[Schema Composition](references/schema-composition.md)** | Using `@Selection` column groups, single-table inheritance, or database views | |
| 24 | |
| 25 | ## Core Workflow |
| 26 | |
| 27 | When working with SQLiteData: |
| 28 | 1. Define table models with `@Table` macro |
| 29 | 2. Use `@FetchAll`/`@FetchOne` property wrappers in views or `@Observable` models |
| 30 | 3. Access database via `@Dependency(\.defaultDatabase)` |
| 31 | 4. Perform writes in `database.write { }` transactions |
| 32 | 5. Set up migrations before first use |
| 33 | |
| 34 | ## Common Mistakes |
| 35 | |
| 36 | 1. **N+1 query patterns** — Loading records one-by-one in a loop (e.g., fetching user then fetching all their posts separately) kills performance. Use joins or batch fetches instead. |
| 37 | |
| 38 | 2. **Missing migrations on schema changes** — Modifying `@Table` without creating a migration causes crashes at runtime. Always create migrations for schema changes before deploying. |
| 39 | |
| 40 | 3. **Improper transaction handling** — Long-running transactions outside of `database.write { }` block can cause deadlocks or data loss. Keep write blocks short and focused. |
| 41 | |
| 42 | 4. **Ignoring CloudKit sync delegates** — Setting up CloudKit sync without implementing `SyncDelegate` means you miss error handling and conflict resolution. Implement all delegate methods for production. |
| 43 | |
| 44 | 5. **Over-fetching in SwiftUI views** — Using `@FetchAll` without filtering/limiting can load thousands of records, freezing the UI. Use predicates, limits, and sorting to keep in-memory footprint small. |