skills/powersync/SKILL.md

5.6 KiB

name description license compatibility metadata
powersync Guided onboarding and best practices for building applications with PowerSync — Cloud and self-hosted setup, sync configuration, client SDK usage, backend integration (Supabase, custom Postgres, MongoDB, MySQL, MSSQL), and debugging. Use this skill whenever the user mentions PowerSync, offline-first sync, local-first architecture, sync rules, sync streams, uploadData, fetchCredentials, real-time data replication, or wants to add offline-capable sync to a mobile or web app — even if they don't explicitly name PowerSync. MIT Works with any skills-compatible agent. Some references include CLI commands requiring the @powersync/cli package.
author version organization tags
powersync 1.2.0 PowerSync powersync, offline-first, local-first, sync-streams, sqlite, replication, uploadData, fetchCredentials, service-config, sync-config, cloud, cli, debugging, supabase, postgres, mongodb, mysql

PowerSync Skills

Use this skill to onboard a project onto PowerSync 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.

Terminology

  • Operator — the human directing this agent (whose request you are fulfilling).
  • User — an end-user of the operator's PowerSync app (JWT subjects, the row a sync stream filters by, the person calling disconnectAndClear()).

If a sentence is ambiguous, default to the operator interpretation. Full legend in AGENTS.md.

Quick Rules

  • CLI-first. Use the PowerSync CLI for all operations. Do not hand-write config files. See references/powersync-cli.md.
  • Ask, don't assume. Ask the operator: Cloud vs self-hosted, and which backend (Supabase, Postgres, MongoDB, MySQL, MSSQL). Do not default to Supabase.
  • Backend before frontend. Deploy sync config and verify the service before writing app code.
  • Sync Streams for new projects. Sync Rules are legacy.
  • Persist credentials immediately. Write all URLs and keys to .env as soon as they are available.
  • Default scope on existing projects: sync-config only. Do not edit service.yaml or cli.yaml unless the operator explicitly authorized service/infra changes in this conversation.
  • Confirm the target instance before any mutating command (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.
  • Use project memory. If your harness supports it, persist the CLI invocation, sync-config path, authorized instance ids + environment (dev/staging/prod), and allowed scope of changes. Verify saved values still match reality before acting on them. See AGENTS.md § "Continuous Use & Guardrails".

What to Load for Your Task

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
Self-hosting / service config references/powersync-service.md + references/powersync-cli.md references/sync-config.md
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

SDK Reference Files

JavaScript / TypeScript

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

Other SDKs

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

Key Rules to Apply Without Being Asked

  • Never define the id column in a PowerSync table schema; it is created automatically.
  • Use column.integer for booleans and column.text for ISO date strings.
  • connect() is fire-and-forget. Use waitForFirstSync() if you need readiness.
  • transaction.complete() is mandatory or the upload queue stalls permanently.
  • disconnectAndClear() is required on logout or user switch when local data must be wiped.
  • A 4xx response from uploadData blocks the upload queue permanently; return 2xx for validation errors.