mcpField
S
sqlite-data

sqlite-data

github.com/johnrogersData & databases233186 installsUpdated 40w ago
Repository

About sqlite-data

A skill guide for using SQLiteData to build type-safe SQLite data layers in Swift. It covers table models, queries, writes, migrations, SwiftUI integration, and CloudKit sync patterns.

Key features

  1. 01Type-safe table models with Swift macros
  2. 02Fetch wrappers and query patterns
  3. 03Transactional writes and schema migrations
  4. 04SwiftUI and UIKit integration guidance
  5. 05CloudKit sync and testing references

Use cases

  1. 01Modeling SQLite tables in a Swift app
  2. 02Adding queries and transactional database writes
  3. 03Planning schema changes with migrations
  4. 04Connecting database data to SwiftUI views

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/johnrogers/claude-swift-engineering --skill sqlite-data

After installing, type/sqlite-datain Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

references/
advanced-optimization.md
advanced-queries.md
cloudkit.md
dependencies.md
migrations.md
models.md
queries-advanced.md
queries-basics.md
schema-composition.md
testing.md
views-integration.md
views-swiftui.md
writes.md

Details

From the project README

SQLite Data

SQLiteData provides type-safe SQLite access through Swift macros, simplifying database modeling and queries while handling CloudKit sync, migrations, and async patterns automatically.

Reference Loading Guide

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.

ReferenceLoad When
Table ModelsDefining tables with @Table, setting up primary keys, columns, or enums
Queries - BasicsUsing @FetchAll, @FetchOne, @Selection, filtering, ordering, or joins
Queries - AdvancedUsing @Fetch with FetchKeyRequest, dynamic queries, recursive CTEs, or direct reads
WritesInserting, updating, upserting, deleting records, or managing transactions
Views - SwiftUIUsing @FetchAll/@FetchOne in SwiftUI views, @Observable models, or animations
Views - IntegrationUIKit integration, dynamic query loading, TCA integration, or observe {}
MigrationsCreating database migrations with DatabaseMigrator or #sql() macro
CloudKit SyncSetting up CloudKit private database sync, sharing, or sync delegates
DependenciesInjecting database/sync engine via @Dependency, bootstrap patterns, or TCA integration
TestingSetting up test databases, seeding data, or writing assertions for SQLite code
Advanced - QueriesImplementing triggers, custom database functions, or full-text search (FTS5)
Advanced - OptimizationPerformance tuning, indexes, custom aggregates, JSON aggregation, or self-joins
Schema CompositionUsing @Selection column groups, single-table inheritance, or database views

Core Workflow

When working with SQLiteData:

  1. Define table models with @Table macro
  2. Use @FetchAll/@FetchOne property wrappers in views or @Observable models
  3. Access database via @Dependency(\.defaultDatabase)
  4. Perform writes in database.write { } transactions
  5. Set up migrations before first use

Common Mistakes

  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.

  2. Missing migrations on schema changes — Modifying @Table without creating a migration causes crashes at runtime. Always create migrations for schema changes before deploying.

  3. Improper transaction handling — Long-running transactions outside of database.write { } block can cause deadlocks or data loss. Keep write blocks short and focused.

  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.

  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.

Comments

Markdown supported