PocketBase
以单个 Go 可执行文件交付的轻量实时应用后端。
项目概述
PocketBase 将 SQLite、实时订阅、认证、文件存储、管理面板和 REST-ish API 打包为一个可执行文件,并可使用 Go 或内嵌 JavaScript 扩展业务逻辑。
PocketBase 是采用 MIT 许可证的开源应用后端,由一个可移植的 Go 可执行文件提供嵌入式 SQLite 数据库、实时订阅、认证、文件管理、管理 Dashboard 和 REST-ish API。它使用 Base、Auth 与 View 三类 Collection 描述数据,通过 API Rules 同时完成访问控制和记录过滤,并提供 JavaScript、Dart SDK。需要自定义服务端逻辑时,可以把 PocketBase 作为 Go Framework 使用,也可以在预编译程序的 pb_hooks 目录中运行内嵌 JavaScript。PocketBase 仍未达到 v1.0,官方明确不建议用于关键生产应用,除非团队能够跟进 Changelog 并承担手动迁移与单机运维。
主要特点
PocketBase 用极少基础设施提供常见应用后端能力,并允许从 Dashboard 原型逐步扩展到 Go 或 JavaScript 代码。
单个可执行文件
无需单独安装数据库或运行时,上传 PocketBase 可执行文件和迁移、Hook 后即可启动完整后端。
SQLite Collections
使用 Base、Auth 和 View Collection 建模普通记录、用户身份和只读 SQL View,并通过 Dashboard 管理字段、关系与索引。
认证与账户管理
Auth Collection 支持密码、OTP、OAuth2、MFA、邮箱验证和密码重置,并允许为不同用户类型建立独立认证集合。
Realtime 与客户端 SDK
客户端可以订阅 Collection 或指定 Record 的变化;官方 JavaScript SDK 覆盖 Browser、Node.js 与 React Native,另有 Dart SDK。
文件与 S3 存储
文件字段支持上传、缩略图和 Protected File Token,默认使用本地 pb_data/storage,也可切换到 S3 兼容服务。
API Rules 与过滤器
每个 Collection 可为 List、View、Create、Update 和 Delete 配置规则;规则既决定授权,也自动限制返回记录。
Go 与 JavaScript 扩展
可将 PocketBase 作为 Go Package 定制路由、Hook 和业务逻辑,或使用内置 Goja 引擎在 pb_hooks 中编写服务端 JavaScript。
迁移、Dashboard 与备份
Dashboard 方便管理 Collection 和设置,Schema 修改可自动生成迁移;内置备份功能可将 pb_data 保存到本地或 S3。
适用场景
适合个人项目、原型、内部工具和中小规模应用,尤其适合希望自行托管但不想维护多个服务的团队。
个人项目与 MVP
以很少运维成本获得数据、认证、文件与实时 API,快速完成产品原型和小型线上服务。
内部工具
在一台受控服务器上交付后台、表单、目录、审批和轻量协作系统,并通过 Dashboard 管理数据。
移动与桌面应用后端
使用 JavaScript 或 Dart SDK 为移动、桌面和跨平台客户端提供账号、数据同步和文件服务。
自托管实时应用
为聊天、通知、状态看板等中小规模场景提供单机实时订阅,不必搭建独立消息服务。
可移植的定制后端
用 Go 或 JavaScript 加入领域路由与 Hook,最终仍以单个二进制和少量目录部署。
边缘与低资源环境
在资源有限的 VPS、家庭服务器或现场设备上运行自包含后端,并使用本地文件或兼容 S3 的远程存储。
优点与注意事项
技术选型不仅要看能力,也要理解它带来的团队成本。
主要优点
PocketBase 擅长的地方
- 一个二进制即可运行数据库、认证、文件、实时和管理面板
- SQLite 数据与上传文件集中在 pb_data,迁移和备份直观
- Dashboard 与自动迁移让 Schema 原型速度很快
- API Rules 将授权与记录过滤结合,客户端可直接调用 API
- Go Framework 和内嵌 JavaScript 提供两种服务端扩展路径
- MIT 许可证、自托管和低资源占用降低个人与小团队门槛
需要注意
采用前应考虑的问题
官方不保证 v1.0 前完整向后兼容,升级可能需要阅读 Changelog 并执行手动迁移,不适合无法持续维护的关键系统。
PocketBase 文档明确给出这一警告。涉及高可用、合规、重大收入或不可丢失数据时,应选择更成熟架构或准备完整风险方案。
官方定位是自包含单机应用,不提供内置多节点集群、自动故障转移或水平写扩展;高可用需要额外架构。
PocketBase 是个人志愿开源项目,不是提供 SLA 的商业团队;路线、支持和修复时间没有承诺。
空字符串会开放操作,null 则仅限 Superuser;Superuser 绕过全部 Collection Rules,Token 和 Dashboard 权限必须严格保护。
知道完整 URL 时,普通文件默认可访问。身份证、合同等敏感内容必须启用 Protected,并正确配置 View Rule 与短期文件 Token。
内嵌 Goja 环境不提供完整 Node 或浏览器 API,只支持 CommonJS,Handler 还有隔离上下文和并发限制;复杂逻辑更适合 Go。
需要自行处理 TLS、反向代理、SMTP、Rate Limit、日志、监控、备份恢复、磁盘容量、加密密钥和版本升级。
快速开始
下载与平台匹配的可执行文件,启动 Dashboard 创建 Collection 和 API Rules,再使用 JavaScript SDK 完成认证、CRUD 与实时订阅。
bash# 示例:macOS Apple Silicon
PB_VERSION=0.39.9
curl -LO "https://github.com/pocketbase/pocketbase/releases/download/v${PB_VERSION}/pocketbase_${PB_VERSION}_darwin_arm64.zip"
unzip "pocketbase_${PB_VERSION}_darwin_arm64.zip"
./pocketbase servebash./pocketbase superuser create \
admin@example.com \
"<strong-password>"
# Dashboard
open http://127.0.0.1:8090/_/bashnpm install pocketbasetypescriptimport PocketBase from "pocketbase";
export const pb = new PocketBase("http://127.0.0.1:8090");
await pb.collection("users").authWithPassword(
"user@example.com",
"<password>",
);
const posts = await pb.collection("posts").getList(1, 20, {
sort: "-created",
filter: 'status = "published"',
});
console.log(posts.items);typescriptconst post = await pb.collection("posts").create({
title: "Hello PocketBase",
status: "draft",
author: pb.authStore.record?.id,
});
const unsubscribe = await pb.collection("posts").subscribe(
post.id,
(event) => {
console.log(event.action, event.record);
},
);
// 页面卸载时调用 unsubscribe()javascript/// <reference path="../pb_data/types.d.ts" />
// pb_hooks/main.pb.js
routerAdd("GET", "/api/hello/{name}", (event) => {
const name = event.request.pathValue("name");
return event.json(200, {
message: "Hello " + name,
});
});bash./pocketbase migrate create "create_posts"
git add pb_migrations
git status --short下一步:先在测试环境完成版本升级、Rules、备份与恢复演练。生产部署至少应配置 SMTP、Rate Limiter、Superuser IP 白名单、设置加密、HTTPS/反向代理和异机备份。
类似项目
这些后端平台也提供数据库、认证、文件和实时能力,但在部署规模、数据库模型与托管方式上不同。
PocketBase vs Supabase
PocketBase 和 Supabase 都提供开源、自托管的数据库、认证、文件和实时能力。PocketBase 追求单文件、单服务器和低运维;Supabase 以 PostgreSQL 和多个生产级服务组成更完整的平台。
| 比较维度 | PocketBase | Supabase |
|---|---|---|
| 部署形态 | 单个 Go 可执行文件 + pb_data | PostgreSQL 与 Auth、Storage、Realtime 等多个服务 |
| 核心数据库 | 嵌入式 SQLite,单机纵向扩展 | 完整 PostgreSQL,可使用云托管或自托管 |
| 数据 API | REST-ish Records API 与 Collection Filters | PostgREST、SQL、GraphQL 生态和数据库客户端 |
| 访问控制 | Collection API Rules,同时作为记录过滤器 | PostgreSQL Row Level Security、角色与数据库权限 |
| 服务端扩展 | Go Framework 或内嵌 JavaScript Hooks | SQL Functions、Database Hooks 与 Edge Functions |
| 运维复杂度 | 起步极低,但备份、HA 和扩容由使用者承担 | 组件更多;托管版降低运维,自托管要求更高 |
| 成熟度 | 尚未 v1.0,官方不推荐关键生产应用 | 平台与 PostgreSQL 生态更成熟,仍需评估各组件 |
| 更适合 | 个人、原型、内部工具和中小型单机应用 | 关系数据、复杂 SQL、团队协作和增长型生产系统 |
如果目标是在一台服务器上以最低复杂度交付小型应用,并且团队能接受 v1.0 前迁移和单机边界,PocketBase 很有吸引力;如果需要复杂 SQL、关系建模、可扩展基础设施和更成熟的生产路径,Supabase 通常更稳妥。无论选择哪一个,都应先验证授权、备份恢复、峰值写入、文件安全和升级流程。
资料核验
版本、维护信息与本页采用的官方资料来源。
本页依据 PocketBase 官方 Docs、FAQ、Collections、API Rules、Authentication、Files、Go/JavaScript 扩展和生产指南整理。版本、许可证、主要语言和维护状态通过 GitHub 官方 API 与 npm Registry 核验。
官方仓库未归档,核验时最近可见的代码活动日期为 2026 年 7 月 22 日。该状态表示项目近期仍有公开维护活动,不代表固定发布频率或长期支持承诺。