PocketBase
Overview
PocketBase is an open-source backend packaged as a single binary, providing an embedded SQLite database, real-time subscriptions, file storage, and built-in authentication. It auto-generates REST APIs for collections and is ideal for shipping full-stack applications with minimal infrastructure complexity.
Instructions
- When defining collections, choose the appropriate type: base collections for standard CRUD, auth collections for user management with email/password and OAuth2, and view collections for read-only SQL-backed queries.
- When building client integrations, use the JavaScript/TypeScript SDK with
pb.collection("name").getList() for queries, .subscribe() for real-time updates, and expand parameter for fetching related data in a single request.
- When configuring permissions, set API rules on every collection (
listRule, viewRule, createRule, updateRule, deleteRule) using filter syntax like @request.auth.id = user.id for row-level security.
- When extending functionality, add JavaScript hooks (
onBeforeCreateRecord, onAfterUpdateRecord) for business logic, custom routes with routerAdd(), and cron jobs with cronAdd().
- When deploying, run the single binary with
./pocketbase serve, mount pb_data/ as a Docker volume, and use Caddy or Nginx for HTTPS termination.
- When backing up, copy the
pb_data/ directory or use the built-in backup API before running migrations.
- When scaling, note that SQLite handles approximately 50,000 concurrent reads; for write-heavy workloads exceeding 100K daily active users, consider PostgreSQL alternatives.
Examples
Example 1: Build an MVP backend with authentication
User request: "Set up a PocketBase backend with user auth and a posts collection"
Actions:
- Create an auth collection for users with email/password and Google OAuth2
- Create a posts collection with title, body, and relation to users
- Set API rules: anyone can list/view, only authenticated authors can create/update/delete their own posts
- Configure the JS SDK for client-side CRUD and auth flows
Output: A fully functional backend with auth, permissions, and auto-generated REST API.
Example 2: Add real-time features
User request: "Enable live updates for a chat application using PocketBase"
Actions:
- Create a messages collection with text, sender relation, and room field
- Set up SSE subscription with
pb.collection("messages").subscribe("*", callback)
- Configure API rules for room-based access control
- Handle client auto-reconnect with exponential backoff
Output: A real-time chat backend with live message delivery via Server-Sent Events.
Guidelines
- Always set API rules on every collection; default is admin-only (
null), which breaks client access.
- Use
expand parameter instead of multiple API calls for related data.
- Validate inputs in hooks (
onBeforeCreateRecord) for business logic beyond schema validation.
- Back up
pb_data/ before migrations since SQLite migrations are irreversible.
- Use view collections for complex queries instead of client-side joins.
- Keep hooks lightweight; heavy processing should run async or in cron jobs.
1---2name: pocketbase3description: PocketBase4---5# PocketBase67## Overview89PocketBase is an open-source backend packaged as a single binary, providing an embedded SQLite database, real-time subscriptions, file storage, and built-in authentication. It auto-generates REST APIs for collections and is ideal for shipping full-stack applications with minimal infrastructure complexity.1011## Instructions1213- When defining collections, choose the appropriate type: base collections for standard CRUD, auth collections for user management with email/password and OAuth2, and view collections for read-only SQL-backed queries.14- When building client integrations, use the JavaScript/TypeScript SDK with `pb.collection("name").getList()` for queries, `.subscribe()` for real-time updates, and `expand` parameter for fetching related data in a single request.15- When configuring permissions, set API rules on every collection (`listRule`, `viewRule`, `createRule`, `updateRule`, `deleteRule`) using filter syntax like `@request.auth.id = user.id` for row-level security.16- When extending functionality, add JavaScript hooks (`onBeforeCreateRecord`, `onAfterUpdateRecord`) for business logic, custom routes with `routerAdd()`, and cron jobs with `cronAdd()`.17- When deploying, run the single binary with `./pocketbase serve`, mount `pb_data/` as a Docker volume, and use Caddy or Nginx for HTTPS termination.18- When backing up, copy the `pb_data/` directory or use the built-in backup API before running migrations.19- When scaling, note that SQLite handles approximately 50,000 concurrent reads; for write-heavy workloads exceeding 100K daily active users, consider PostgreSQL alternatives.2021## Examples2223### Example 1: Build an MVP backend with authentication2425**User request:** "Set up a PocketBase backend with user auth and a posts collection"2627**Actions:**281. Create an auth collection for users with email/password and Google OAuth2292. Create a posts collection with title, body, and relation to users303. Set API rules: anyone can list/view, only authenticated authors can create/update/delete their own posts314. Configure the JS SDK for client-side CRUD and auth flows3233**Output:** A fully functional backend with auth, permissions, and auto-generated REST API.3435### Example 2: Add real-time features3637**User request:** "Enable live updates for a chat application using PocketBase"3839**Actions:**401. Create a messages collection with text, sender relation, and room field412. Set up SSE subscription with `pb.collection("messages").subscribe("*", callback)`423. Configure API rules for room-based access control434. Handle client auto-reconnect with exponential backoff4445**Output:** A real-time chat backend with live message delivery via Server-Sent Events.4647## Guidelines4849- Always set API rules on every collection; default is admin-only (`null`), which breaks client access.50- Use `expand` parameter instead of multiple API calls for related data.51- Validate inputs in hooks (`onBeforeCreateRecord`) for business logic beyond schema validation.52- Back up `pb_data/` before migrations since SQLite migrations are irreversible.53- Use view collections for complex queries instead of client-side joins.54- Keep hooks lightweight; heavy processing should run async or in cron jobs.