
PocketBase Collections
FreeStreamline your PocketBase schema and collection design.
Free · Opens the source repo
What PocketBase Collections does
PocketBase Collections is a skill designed to assist developers and designers in creating and managing collections and schemas within PocketBase. This skill provides a comprehensive guide on the various collection types available, including Base, Auth, and View collections, along with their specific system fields and constraints. Users can easily understand how to set up their collections to meet their application needs, whether it's for standard data storage, user authentication, or read-only data views.
The skill also details the different field types supported by PocketBase, such as text, number, email, and relation fields, along with their properties and zero-default behaviors. This ensures that developers can make informed decisions when defining their data structures, preventing common mistakes such as using incorrect field types or overlooking default behaviors that could lead to data integrity issues.
Additionally, the skill covers important aspects of relation patterns, indexing, and best practices for schema design. By following these guidelines, users can optimize their collections for performance and maintainability, ensuring that their applications can scale effectively as they grow. The focus on relation patterns, including one-to-many and many-to-many relationships, helps users design their data models with clarity and efficiency.
Overall, PocketBase Collections is a valuable resource for anyone looking to leverage PocketBase for their applications, providing structured guidance to streamline the collection and schema design process.
When to use it
Use this skill when setting up new collections or modifying existing schemas in PocketBase to ensure best practices are followed.
When not to use it
This skill may not be necessary for experienced developers familiar with PocketBase's collection and schema design, as they may already understand these concepts.
What you can build with it
Creating a New Auth Collection
Use this skill to set up a new Auth collection, ensuring proper authentication fields and settings are configured.
Designing a View Collection for Reporting
Leverage the skill to create a View collection that aggregates data from multiple sources, optimizing for read-only access.
Implementing Relationships Between Collections
Utilize this skill to define and manage relationships between collections, ensuring data integrity and proper cascading behavior.
How to install PocketBase Collections
View source1. Install with the skills CLI
npx skills add davila7/claude-code-templates/pb-collections --agent claude-code2. Or install it manually
Download the skill folder and drop it into ~/.claude/skills/ for all projects, or .claude/skills/ to scope it to one repo. Restart Claude Code so it picks up the new skill.
Anthropic's agentic coding CLI, and the reference implementation of Agent Skills. Drop a skill folder into ~/.claude/skills and Claude Code loads it automatically whenever a task matches the skill's description. Claude Code docs
Inside SKILL.md
Written by davila7PocketBase Collection & Schema Design
Collection Types
Base Collection
Standard data collection. System fields: id, created, updated.
Auth Collection
Extends base with authentication. Additional system fields: email, emailVisibility, verified, password, tokenKey.
Cannot delete system fields. Can disable email/password auth in collection options.
View Collection
Read-only, backed by a SQL SELECT query. No create/update/delete. Fields are auto-detected from the query. Useful for aggregations, joins, and computed views.
-- Example: view collection query
SELECT p.id, p.title, COUNT(c.id) as comments_count
FROM posts p LEFT JOIN comments c ON c.post = p.id
GROUP BY p.id
View collections support API rules (list/view only) and can be used in relations.
Field Types
| Type | Go type | Zero default | Notes |
|---|---|---|---|
text | string | "" | min/max length, regex pattern |
editor | string | "" | Rich text (sanitized HTML) |
number | float64 | 0 | min/max, noDecimal option |
bool | bool | false | |
email | string | "" | Auto-validated format |
url | string | "" | Auto-validated format |
date | string | "" | ISO 8601 (2024-01-01 00:00:00.000Z) |
select | string/[]string | ""/[] | values list, maxSelect |
file | string/[]string | ""/[] | maxSelect, maxSize, mimeTypes |
relation | string/[]string | ""/[] | collectionId, cascadeDelete, maxSelect |
json | any | null | Only type that can be null! maxSize |
autodate | string | auto | onCreate/onUpdate modifiers |
password | string | "" | Stored hashed, never returned in API |
Critical: all types default to their zero value, NOT null. Only json fields can be null.
Field Modifiers
Use in collection schema definitions:
required— field cannot be empty/zerounique— unique constraint (composite via unique indexes)presentable— included in relation displayhidden— excluded from API responses unless explicitly requested:autogenerate— fortextfields: auto-generate value (e.g., slug from other field)
Relation Patterns
One-to-many
posts.author -> users (maxSelect: 1)
Each post has one author. Query posts by author: author = "USER_ID".
Many-to-many
posts.tags -> tags (maxSelect: 0, meaning unlimited)
Multi-select relation. Filter: tags ?= "TAG_ID" (contains).
Back-relations
No explicit back-relation field needed. Use @collection.posts.author in API rules or expand from either side:
GET /api/collections/users/records/USER_ID?expand=posts_via_author
Cascade Delete
Set cascadeDelete: true on the relation field. When the referenced record is deleted, all records pointing to it are also deleted. Default is false (sets to empty string).
Self-referencing
A collection can reference itself:
categories.parent -> categories (maxSelect: 1)
Indexes
- Created in the collection settings (not field-level)
- Format:
CREATE [UNIQUE] INDEX idx_name ON collection (field1, field2) - Unique indexes enforce composite uniqueness
- Partial indexes:
CREATE INDEX ... WHERE condition - Indexes on relation fields improve join performance
Auth Collection Specifics
OAuth2
Enable per-provider in collection settings. Each provider needs client ID + secret. PocketBase handles the full OAuth2 flow.
OTP (One-Time Password)
Enable in auth collection settings. Sends code via email. Configure otp.enabled, otp.duration, otp.length.
MFA (Multi-Factor Authentication)
Enable in auth collection settings. Requires a second factor after primary auth. mfa.enabled, mfa.duration, mfa.rule (filter to determine which users need MFA).
Password Auth
Enabled by default. Can customize minPasswordLength. Can disable entirely if using only OAuth2/OTP.
Auth Options
authToken.duration— token lifetime (seconds)passwordAuth.enabled— toggle email/passwordpasswordAuth.identityFields— fields used for login (default:email; can addusername)oauth2.enabled— toggle OAuth2otp.enabled— toggle OTP
Best Practices
- Prefer
selectoverboolwhen there might be more than 2 states in the future - Use
relationnottextfor foreign keys — you get cascade, expand, and type safety jsonfields are schemaless — use sparingly, prefer typed fields- Name collections in lowercase snake_case (e.g.,
blog_posts,user_profiles) - Index early — add indexes for any field used in filters or sorts
maxSelect: 1on relations returns a string ID;maxSelect: >1or0returns an array
Frequently asked questions about PocketBase Collections
Similar skills
ClickHouse Logs Queries
Efficiently manage Supabase logs with ClickHouse SQL.
EF Core D2 Database Diagram Generator
Visualize your EF Core models as D2 diagrams effortlessly.
Safe SQL Execution
Ensure secure SQL execution in Supabase applications.
Oracle to PostgreSQL Migration
Identify migration risks between Oracle and PostgreSQL.
SSMA Console
Streamline Oracle to SQL Server migrations with ease.
SQL Performance Optimization
Enhance SQL query efficiency across all databases.
