PocketBase is an open source Go backend that includes:
- embedded database (SQLite) with realtime subscriptions
- built-in files and users management
- convenient Admin dashboard UI
- and simple REST-ish API
For documentation and examples, please visit https://pocketbase.io/docs.
This fork includes supplier-management customizations on top of upstream PocketBase.
The static query page under pb_public/index.html provides a simple supplier information search UI based on PocketBase REST APIs.
It currently reads from:
supplierssupplier_contacts
The frontend loads suppliers first, then batch-loads related contacts from supplier_contacts and merges them in the browser. This avoids unsupported cross-collection filter/expand usage in PocketBase list queries.
A reusable supplier import skill is available at:
skills/supplier_import
It imports supplier and contact data through PocketBase REST APIs.
Supported input formats:
- JSON
- CSV
Default target collections:
supplierssupplier_contacts
Common usage:
# Copy local-only config template.
cp skills/supplier_import/.env.example skills/supplier_import/.env
# Edit .env locally, then load it into current shell.
set -a
. skills/supplier_import/.env
set +a
# Validate input without writing data.
python3 skills/supplier_import/scripts/import_suppliers.py \
--base-url "$PB_BASE_URL" \
--input suppliers.json \
--dry-run
# Import after validation.
python3 skills/supplier_import/scripts/import_suppliers.py \
--base-url "$PB_BASE_URL" \
--input suppliers.jsonThe importer supports upsert by default:
- suppliers are matched by
supplier_code; if no code is provided, bysupplier_name - contacts are matched by
supplier + contact_name + mobile; if no mobile is provided, bysupplier + contact_name
Do not commit real PocketBase URLs, admin accounts, passwords, or tokens.
Use local environment variables or a local .env file instead:
PB_BASE_URL=http://127.0.0.1:8090
PB_ADMIN_EMAIL=admin@example.com
PB_ADMIN_PASSWORD=change-me
# PB_TOKEN=The repository ignores local env files such as .env and skills/**/.env; only .env.example templates should be committed.
Warning
Please keep in mind that PocketBase is still under active development and therefore full backward compatibility is not guaranteed before reaching v1.0.0.
The easiest way to interact with the PocketBase Web APIs is to use one of the official SDK clients:
- JavaScript - pocketbase/js-sdk (Browser, Node.js, React Native)
- Dart - pocketbase/dart-sdk (Web, Mobile, Desktop, CLI)
You could also check the recommendations in https://pocketbase.io/docs/how-to-use/.
You could download the prebuilt executable for your platform from the Releases page.
Once downloaded, extract the archive and run ./pocketbase serve in the extracted directory.
The prebuilt executables are based on the examples/base/main.go file and comes with the JS VM plugin enabled by default which allows to extend PocketBase with JavaScript (for more details please refer to Extend with JavaScript).
PocketBase is distributed as a regular Go library package which allows you to build your own custom app specific business logic and still have a single portable executable at the end.
Here is a minimal example:
-
Install Go 1.25+ (if you haven't already)
-
Create a new project directory with the following
main.gofile inside it: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) } }
-
To init the dependencies, run
go mod init myapp && go mod tidy. -
To start the application, run
go run main.go serve. -
To build a statically linked executable, you can run
CGO_ENABLED=0 go buildand then start the created executable with./myapp serve.
For more details please refer to Extend with Go.
To build the minimal standalone executable, like the prebuilt ones in the releases page, you can simply run go build inside the examples/base directory:
- Install Go 1.25+ (if you haven't already)
- Clone/download the repo
- Navigate to
examples/base - Run
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build(https://go.dev/doc/install/source#environment) - Start the created executable by running
./base serve.
Note that the supported build targets by the pure Go SQLite driver at the moment are:
darwin amd64
darwin arm64
freebsd amd64
freebsd arm64
linux 386
linux amd64
linux arm
linux arm64
linux loong64
linux ppc64le
linux riscv64
linux s390x
windows 386
windows amd64
windows arm64
PocketBase comes with mixed bag of unit and integration tests.
To run them, use the standard go test command:
go test ./...Check also the Testing guide to learn how to write your own custom application tests.
If you discover a security vulnerability within PocketBase, please send an e-mail to support at pocketbase.io.
All reports will be promptly addressed and you'll be credited in the fix release notes.
PocketBase is free and open source project licensed under the MIT License. You are free to do whatever you want with it, even offering it as a paid service.
You could help continuing its development by:
PRs for new OAuth2 providers, bug fixes, code optimizations and documentation improvements are more than welcome.
But please refrain creating PRs for new features without previously discussing the implementation details. PocketBase has a roadmap and I try to work on issues in specific order and such PRs often come in out of nowhere and skew all initial planning with tedious back-and-forth communication.
Don't get upset if I close your PR, even if it is well executed and tested. This doesn't mean that it will never be merged. Later we can always refer to it and/or take pieces of your implementation when the time comes to work on the issue (don't worry you'll be credited in the release notes).