PocketBase:单文件开源实时后端(Go 编写,内置 SQLite)
PocketBase 是一个用 Go 编写的开源后端,把带实时订阅的嵌入式 SQLite 数据库、文件与用户管理、可视化 Admin 仪表盘和简洁的 REST-ish API 打包在单个可执行文件中,既可直接下载预编译程序运行,也可作为 Go 库嵌入自有应用。项目采用 MIT 许可证,仍处于活跃开发阶段,v1.0.0 之前不保证完全向后兼容。
社区作者 · zZz
它解决什么问题
PocketBase 是一个开源 Go 后端,包含:
- 嵌入式数据库(SQLite),支持实时订阅(realtime subscriptions)
- 内置文件与用户管理
- 便捷的 Admin 仪表盘 UI(可参考配图 1:PocketBase - open source backend in 1 file)
- 简洁的 REST-ish API
文档与示例请访问 https://pocketbase.io/docs 。
警告:PocketBase 仍处于活跃开发中,因此在达到 v1.0.0 之前不保证完全的向后兼容性。
API SDK 客户端
与 PocketBase Web API 交互最简单的方式是使用官方 SDK 客户端:
- JavaScript - pocketbase/js-sdk(适用于 Browser、Node.js、React Native)
- Dart - pocketbase/dart-sdk(适用于 Web、Mobile、Desktop、CLI)
也可查看 https://pocketbase.io/docs/how-to-use/ 中的推荐做法。
总览
作为独立应用使用
可从 Releases 页面下载对应平台的预编译可执行文件。下载后解压压缩包,在解压目录中运行 ./pocketbase serve。
预编译可执行文件基于 examples/base/main.go 文件构建,默认启用 JS VM 插件,因此可以用 JavaScript 扩展 PocketBase(详见“使用 JavaScript 扩展”)。
作为 Go 框架/工具包使用
PocketBase 以常规 Go 库包的形式分发,允许开发者构建自己的、面向特定业务逻辑的应用,最终仍然得到一个可移植的单文件可执行程序。
最小示例:
- 安装 Go 1.27+(如果尚未安装)
- 新建一个项目目录,并在其中创建如下 main.go:
package main
import ( "log"
"github.com/pocketbase/pocketbase" "github.com/pocketbase/pocketbase/core" )
func main() { app := pocketbase.New()
app.OnServe().BindFunc(func(se *core.ServeEvent) error { // registers new "GET /hello" route se.Router.GET("/hello", func(re *core.RequestEvent) error { return re.String(200, "Hello world!") })
return se.Next() })
if err := app.Start(); err != nil { log.Fatal(err) } }
- 初始化依赖,运行 go mod init myapp && go mod tidy
- 启动应用,运行 go run main.go serve
- 构建静态链接的可执行文件,可运行 CGO_ENABLED=0 go build,然后以 ./myapp serve 启动生成的可执行文件
更多细节请参考“使用 Go 扩展”。
构建并运行仓库中的 main.go 示例
若要构建最小独立可执行文件(类似 Releases 页面中的预编译版本),只需在 examples/base 目录内运行 go build:
(若要面向其他平台,使用 GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build;参见 https://go.dev/doc/install/source#environment)
- 安装 Go 1.27+(如果尚未安装)
- 克隆/下载仓库
- 进入 examples/base 目录
- 运行 CGO_ENABLED=0 go build 为当前环境构建二进制文件
- 通过运行 ./base serve 启动生成的程序
请注意,目前纯 Go SQLite 驱动支持的构建目标为: darwin/amd64、darwin/arm64、freebsd/386、freebsd/amd64、freebsd/arm、freebsd/arm64、linux/386、linux/amd64、linux/arm、linux/arm64、linux/loong64、linux/ppc64le、linux/riscv64、linux/s390x、netbsd/amd64、openbsd/amd64、openbsd/arm64、windows/386、windows/amd64、windows/arm64。
测试
PocketBase 包含单元测试与集成测试的混合测试集。运行方式为标准 go test 命令:
go test ./...也可查看 Testing 指南,了解如何编写自己的自定义应用测试。
安全
如果在 PocketBase 中发现安全漏洞,请发送邮件至 support at pocketbase.io。更多细节见项目 Security 政策。
贡献
PocketBase 是自由开源项目,采用 MIT License 许可。你可以对它做任何事,甚至作为付费服务提供。
可通过以下方式帮助其持续开发:
- 贡献源代码
- 提出新功能建议并报告问题
请避免在未事先讨论实现细节的情况下为新功能创建 PR。PocketBase 有既定路线图,维护者会按特定顺序处理问题,这类 PR 往往突然出现,会打乱初始规划并带来繁琐的反复沟通。
即使你的 PR 被关闭,也不要沮丧,哪怕它实现良好且经过测试。这并不意味着它永远不会被合并。之后在合适的时机,我们仍可以参考它,或采用你实现中的部分内容(放心,你会在发布说明中被署名)。
重要提示:由于近期 LLM 垃圾提交,PR 被临时禁用,只有现有协作者可以提交 PR。如果你遇到想修复的问题,请改为提交 issue 或 discussion,并附上你的 fork 链接(如果不明显的话——不接受 LLM 贡献)。若 GitHub 最终对持续的垃圾提交采取行动,或维护者找到时间把项目迁移到别处,这一状态可能会改变。
Go 包文档可参考配图 2(Go package documentation)。— 本文由 AI 根据公开来源辅助整理,命令、版本与许可证请在使用前到原始页面复核。
安装 / 开始使用
方式一:作为独立应用使用(下载预编译可执行文件)
- 从 Releases 页面下载对应平台的预编译可执行文件。
- 解压下载的压缩包。
说明:预编译可执行文件基于 examples/base/main.go 构建,默认启用 JS VM 插件,因此可用 JavaScript 扩展 PocketBase。
- 在解压后的目录中运行 ./pocketbase serve 启动服务。
方式二:作为 Go 框架/工具包使用(在自有应用中嵌入 PocketBase) 准备环境:安装 Go 1.27+(如果尚未安装)。
- 新建一个项目目录,并在其中创建 main.go,内容如下:
package main
import ( "log"
"github.com/pocketbase/pocketbase" "github.com/pocketbase/pocketbase/core" )
func main() { app := pocketbase.New()
app.OnServe().BindFunc(func(se *core.ServeEvent) error { // registers new "GET /hello" route se.Router.GET("/hello", func(re *core.RequestEvent) error { return re.String(200, "Hello world!") })
return se.Next() })
if err := app.Start(); err != nil { log.Fatal(err) } }
步骤 2 · 初始化依赖:
go mod init myapp && go mod tidy步骤 3 · 首次运行:
go run main.go serve步骤 4 · 构建静态链接的可执行文件:
CGO_ENABLED=0 go build步骤 5 · 启动构建产物:
./myapp serve方式三:构建并运行仓库中的 examples/base 示例 准备环境:安装 Go 1.27+(如果尚未安装)。
- 克隆/下载本仓库。
- 进入 examples/base 目录。
步骤 3 · 为当前环境构建二进制:
CGO_ENABLED=0 go build如需面向其他平台
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build(参见 https://go.dev/doc/install/source#environment)步骤 4 · 启动生成的程序:
./base serve当前纯 Go SQLite 驱动支持的构建目标(GOOS/GOARCH):darwin/amd64、darwin/arm64、freebsd/386、freebsd/amd64、freebsd/arm、freebsd/arm64、linux/386、linux/amd64、linux/arm、linux/arm64、linux/loong64、linux/ppc64le、linux/riscv64、linux/s390x、netbsd/amd64、openbsd/amd64、openbsd/arm64、windows/386、windows/amd64、windows/arm64。
运行测试:
使用标准命令
go test ./... 运行内置的单元与集成测试。
- 可参考 Testing 指南编写自定义应用测试。
常见问题与注意事项:
- 项目仍在活跃开发中,达到 v1.0.0 之前不保证完全向后兼容,升级前需留意。
- 交叉编译其他平台时需显式指定 GOOS/GOARCH,并保持 CGO_ENABLED=0 以获得静态链接的单一可执行文件。
- 构建目标受纯 Go SQLite 驱动支持范围限制,需对照上文平台列表。
- 新功能 PR 需先讨论实现细节;当前 PR 被临时禁用,仅现有协作者可提交,遇到问题建议开 issue 或 discussion 并附 fork 链接。
- 发现安全漏洞请发送邮件至 support at pocketbase.io,详见项目 Security 政策。
