npx skills add ...
npx skills add powersync-ja/agent-skills --skill powersync
Best practices for building and maintaining applications with PowerSync: Cloud and self-hosted setup, sync configuration, client SDK usage, backend integration (Supabase, custom Postgres, MongoDB, Azure DocumentDB, MySQL, MSSQL), schema changes, watch and reactive queries (useQuery), attachments, the upload queue, and debugging. Use this skill whenever the user mentions PowerSync, a @powersync/* package (@powersync/web, @powersync/react-native, @powersync/node), the powersync Flutter/Dart package, wa-sqlite, offline-first sync, local-first architecture, sync rules, sync streams, uploadData, fetchCredentials, disconnectAndClear, logout or user switching in a synced app, real-time data replication, Electric Cloud migration, Electric Shapes, an app stuck on Syncing, data not syncing, or wants to add offline-capable sync to a mobile or web app, even if they do not explicitly name PowerSync.
npx skills add powersync-ja/agent-skills --skill powersync
Use this skill to onboard a project onto PowerSync and to keep it healthy afterwards, without trial-and-error. Treat this as a guided workflow first and a reference library second.
Agents: Read AGENTS.md before proceeding. It contains the mandatory compliance rules and onboarding playbook. The Quick Rules below are a reminder, not a substitute. powersync login is PowerSync Cloud only (PAT); self-hosted does not use it.
disconnectAndClear()).If a sentence is ambiguous, default to the operator interpretation. Full legend in AGENTS.md.
references/powersync-cli.md..env, never hardcoded. Record URLs and keys in .env as they become available; config (!env) and app code read from there.service.yaml or cli.yaml unless the operator explicitly authorized service/infra changes in this conversation.deploy, destroy, stop, link --create, pull instance). Never deploy to an instance not authorized by the operator. Treat production as off-limits unless explicitly approved.AGENTS.md § "Continuous Use & Guardrails".This copy ships reference files for every PowerSync platform. On your first use of this skill in a repo, check for .trim-state.json next to this file. If it exists, the operator already decided; skip this section.
Otherwise run node scripts/trim.mjs from this skill's directory. The default run is a read-only report: it detects which PowerSync platforms this repo uses and lists the reference files this copy does not need. It works on this installed copy only, makes no network requests, and is reversible by reinstalling the skill. If it refuses (shared or source install) or detects no PowerSync usage yet, skip this section silently. Otherwise show the report to the operator and ask whether to trim this installed copy. Never trim without explicit operator approval.
node scripts/trim.mjs --apply (add --keep <platforms> for platforms the operator wants to keep anyway).node scripts/trim.mjs --decline so the operator is not asked again.Reinstalling or npx skills update restores the full copy and clears the recorded decision; offering again after an update is expected.
| Task | Start with | Load on demand |
|---|---|---|
| Supabase + PowerSync | references/onboarding-supabase.md | references/supabase-auth.md, references/sync-config.md, SDK files |
| Custom backend (non-Supabase) | references/onboarding-custom.md | references/custom-backend.md, references/sync-config.md, SDK files |
| New project setup | references/powersync-cli.md + references/powersync-service.md | references/sync-config.md, SDK files |
| Migrating from Electric Cloud | references/migration-from-electric.md | references/sync-config.md, SDK files |
| Self-hosting / service config | references/powersync-service.md + references/powersync-cli.md | references/sync-config.md |
| Terraform / IaC provisioning | references/terraform.md | references/sync-config.md, references/supabase-auth.md (if Supabase source) |
| Writing sync config | references/sync-config.md | — |
| Debugging sync issues | references/powersync-debug.md | — |
| Raw Tables (advanced) | references/raw-tables.md | — |
| Attachments | references/attachments.md | — |
| Architecture overview | references/powersync-overview.md | — |
| SQLite extensions (vector search, FTS5, custom tokenizers) | references/sqlite-extensions.md | — |
Always load references/sdks/powersync-js.md for any JS/TS project, then load the applicable framework file.
| Framework | File | Load early if… |
|---|---|---|
| React / Next.js | references/sdks/powersync-js-react.md | Vite + React project — contains the required vite.config.ts setup (optimizeDeps.exclude, worker.format: 'es') needed before installing packages |
| React Native / Expo | references/sdks/powersync-js-react-native.md | |
| Vue / Nuxt | references/sdks/powersync-js-vue.md | |
| Node.js / Electron | references/sdks/powersync-js-node.md | |
| TanStack | references/sdks/powersync-js-tanstack.md | |
| Drizzle / Kysely ORM | references/sdks/powersync-js-orm.md | Project uses Drizzle or Kysely |
| Platform | File |
|----------|
| Dart / Flutter | references/sdks/powersync-dart.md |
| .NET | references/sdks/powersync-dotnet.md |
| Kotlin | references/sdks/powersync-kotlin.md |
| Swift | references/sdks/powersync-swift.md |
id column in a PowerSync table schema; it is created automatically.column.integer for booleans and column.text for ISO date strings.connect() is fire-and-forget. Use waitForFirstSync() if you need readiness..connect() once per session. Do not call it again on window focus events, token refreshes, or network changes; redundant calls open additional sync connections.transaction.complete() is mandatory or the upload queue stalls permanently.disconnectAndClear() when another user may access the device or security requires wiping local data. If the same user will return to their own device and retaining local data is safe, use disconnect() instead. The client resumes from its saved sync position rather than re-downloading everything. Never retain one user's data for a different user.uploadData blocks the upload queue permanently; return 2xx for validation errors.