返回目录
开源项目开发者工具类新手

PocketBase:单文件开源实时后端(Go 编写,内置 SQLite)

PocketBase 是一个用 Go 编写的开源后端,把带实时订阅的嵌入式 SQLite 数据库、文件与用户管理、可视化 Admin 仪表盘和简洁的 REST-ish API 打包在单个可执行文件中,既可直接下载预编译程序运行,也可作为 Go 库嵌入自有应用。项目采用 MIT 许可证,仍处于活跃开发阶段,v1.0.0 之前不保证完全向后兼容。

0 次阅读2026/09/17 发布
PocketBase:单文件开源实时后端(Go 编写,内置 SQLite) 来源图片

社区作者 · 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 库包的形式分发,允许开发者构建自己的、面向特定业务逻辑的应用,最终仍然得到一个可移植的单文件可执行程序。

最小示例:

  1. 安装 Go 1.27+(如果尚未安装)
  2. 新建一个项目目录,并在其中创建如下 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) } }

  1. 初始化依赖,运行 go mod init myapp && go mod tidy
  2. 启动应用,运行 go run main.go serve
  3. 构建静态链接的可执行文件,可运行 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 根据公开来源辅助整理,命令、版本与许可证请在使用前到原始页面复核。

安装 / 开始使用

方式一:作为独立应用使用(下载预编译可执行文件)

  1. 从 Releases 页面下载对应平台的预编译可执行文件。
  1. 解压下载的压缩包。

说明:预编译可执行文件基于 examples/base/main.go 构建,默认启用 JS VM 插件,因此可用 JavaScript 扩展 PocketBase。

  1. 在解压后的目录中运行 ./pocketbase serve 启动服务。

方式二:作为 Go 框架/工具包使用(在自有应用中嵌入 PocketBase) 准备环境:安装 Go 1.27+(如果尚未安装)。

  1. 新建一个项目目录,并在其中创建 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+(如果尚未安装)。

  1. 克隆/下载本仓库。
  1. 进入 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 政策。

来源教程配图

PocketBase - open source backend in 1 file
配图 1 · PocketBase - open source backend in 1 file查看原图
Go package documentation
配图 2 · Go package documentation查看原图

适用场景

为移动端或前端应用快速提供后端 API 与数据库
构建需要实时订阅/实时推送数据的应用
需要内置用户认证与文件管理的项目
通过 Admin 仪表盘进行数据与用户的可视化管理
作为 Go 库嵌入自有服务
在单文件可执行程序中实现自定义业务逻辑
自托管轻量级后端
替代传统数据库+后端框架组合
使用 JavaScript 扩展后端逻辑(预编译版本默认启用 JS VM 插件)