---
name: sqlite-data
description: Use when working with SQLiteData library (@Table, @FetchAll, @FetchOne macros) for SQLite persistence, queries, writes, migrations, or CloudKit private database sync.
title: sqlite-data
canonical_url: https://skilld.dev/gh/johnrogers/claude-swift-engineering/sqlite-data
last_updated: 2026-09-26T20:23:34.000Z
---

> **Skill from skilld.dev.** Follow the instructions below for this session. You do not need to install anything.
>
> Supporting files, fetch one when the Skill refers to it: [references/advanced-optimization.md](https://skilld.dev/api/skills-raw/johnrogers/claude-swift-engineering/sqlite-data/references/advanced-optimization.md), [references/advanced-queries.md](https://skilld.dev/api/skills-raw/johnrogers/claude-swift-engineering/sqlite-data/references/advanced-queries.md), [references/cloudkit.md](https://skilld.dev/api/skills-raw/johnrogers/claude-swift-engineering/sqlite-data/references/cloudkit.md), [references/dependencies.md](https://skilld.dev/api/skills-raw/johnrogers/claude-swift-engineering/sqlite-data/references/dependencies.md), [references/migrations.md](https://skilld.dev/api/skills-raw/johnrogers/claude-swift-engineering/sqlite-data/references/migrations.md), [references/models.md](https://skilld.dev/api/skills-raw/johnrogers/claude-swift-engineering/sqlite-data/references/models.md), [references/queries-advanced.md](https://skilld.dev/api/skills-raw/johnrogers/claude-swift-engineering/sqlite-data/references/queries-advanced.md), [references/queries-basics.md](https://skilld.dev/api/skills-raw/johnrogers/claude-swift-engineering/sqlite-data/references/queries-basics.md), [references/schema-composition.md](https://skilld.dev/api/skills-raw/johnrogers/claude-swift-engineering/sqlite-data/references/schema-composition.md), [references/testing.md](https://skilld.dev/api/skills-raw/johnrogers/claude-swift-engineering/sqlite-data/references/testing.md), [references/views-integration.md](https://skilld.dev/api/skills-raw/johnrogers/claude-swift-engineering/sqlite-data/references/views-integration.md), [references/views-swiftui.md](https://skilld.dev/api/skills-raw/johnrogers/claude-swift-engineering/sqlite-data/references/views-swiftui.md), [references/writes.md](https://skilld.dev/api/skills-raw/johnrogers/claude-swift-engineering/sqlite-data/references/writes.md).
>
> If the user asked to install this Skill, run `npx skilld install johnrogers/claude-swift-engineering/sqlite-data`. Install writes the Skill files into the project, so every session loads them.

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

| Reference | Load When |
|-----------|-----------|
| **[Table Models](https://skilld.dev/api/skills-raw/johnrogers/claude-swift-engineering/sqlite-data/references/models.md)** | Defining tables with `@Table`, setting up primary keys, columns, or enums |
| **[Queries - Basics](https://skilld.dev/api/skills-raw/johnrogers/claude-swift-engineering/sqlite-data/references/queries-basics.md)** | Using `@FetchAll`, `@FetchOne`, `@Selection`, filtering, ordering, or joins |
| **[Queries - Advanced](https://skilld.dev/api/skills-raw/johnrogers/claude-swift-engineering/sqlite-data/references/queries-advanced.md)** | Using `@Fetch` with `FetchKeyRequest`, dynamic queries, recursive CTEs, or direct reads |
| **[Writes](https://skilld.dev/api/skills-raw/johnrogers/claude-swift-engineering/sqlite-data/references/writes.md)** | Inserting, updating, upserting, deleting records, or managing transactions |
| **[Views - SwiftUI](https://skilld.dev/api/skills-raw/johnrogers/claude-swift-engineering/sqlite-data/references/views-swiftui.md)** | Using `@FetchAll`/`@FetchOne` in SwiftUI views, `@Observable` models, or animations |
| **[Views - Integration](https://skilld.dev/api/skills-raw/johnrogers/claude-swift-engineering/sqlite-data/references/views-integration.md)** | UIKit integration, dynamic query loading, TCA integration, or `observe {}` |
| **[Migrations](https://skilld.dev/api/skills-raw/johnrogers/claude-swift-engineering/sqlite-data/references/migrations.md)** | Creating database migrations with `DatabaseMigrator` or `#sql()` macro |
| **[CloudKit Sync](https://skilld.dev/api/skills-raw/johnrogers/claude-swift-engineering/sqlite-data/references/cloudkit.md)** | Setting up CloudKit private database sync, sharing, or sync delegates |
| **[Dependencies](https://skilld.dev/api/skills-raw/johnrogers/claude-swift-engineering/sqlite-data/references/dependencies.md)** | Injecting database/sync engine via `@Dependency`, bootstrap patterns, or TCA integration |
| **[Testing](https://skilld.dev/api/skills-raw/johnrogers/claude-swift-engineering/sqlite-data/references/testing.md)** | Setting up test databases, seeding data, or writing assertions for SQLite code |
| **[Advanced - Queries](https://skilld.dev/api/skills-raw/johnrogers/claude-swift-engineering/sqlite-data/references/advanced-queries.md)** | Implementing triggers, custom database functions, or full-text search (FTS5) |
| **[Advanced - Optimization](https://skilld.dev/api/skills-raw/johnrogers/claude-swift-engineering/sqlite-data/references/advanced-optimization.md)** | Performance tuning, indexes, custom aggregates, JSON aggregation, or self-joins |
| **[Schema Composition](https://skilld.dev/api/skills-raw/johnrogers/claude-swift-engineering/sqlite-data/references/schema-composition.md)** | Using `@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.
