pocketbase

    pocketbase/pocketbase

    Open Source realtime backend in 1 file

    authentication
    backend
    golang
    realtime
    Go
    MIT
    56.4K stars
    3.1K forks
    56.4K watching
    Updated 3/11/2026
    View on GitHub
    Backblaze Advertisement

    Loading star history...

    Health Score

    75

    Weekly Growth

    +0

    +0.0% this week

    Contributors

    1

    Total contributors

    Open Issues

    21

    Generated Insights

    About pocketbase

    PocketBase - open source backend in 1 file

    build Latest releases Go package documentation

    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.

    [!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.

    API SDK clients

    The easiest way to interact with the PocketBase Web APIs is to use one of the official SDK clients:

    You could also check the recommendations in https://pocketbase.io/docs/how-to-use/.

    Overview

    Use as standalone app

    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).

    Use as a Go framework/toolkit

    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:

    1. Install Go 1.23+ (if you haven't already)

    2. Create a new project directory with the following main.go file 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)
          }
      }
      
    3. To init the dependencies, run go mod init myapp && go mod tidy.

    4. To start the application, run go run main.go serve.

    5. To build a statically linked executable, you can run CGO_ENABLED=0 go build and then start the created executable with ./myapp serve.

    For more details please refer to Extend with Go.

    Building and running the repo main.go example

    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:

    1. Install Go 1.23+ (if you haven't already)
    2. Clone/download the repo
    3. Navigate to examples/base
    4. Run GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build (https://go.dev/doc/install/source#environment)
    5. 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   ppc64le
    linux   riscv64
    linux   s390x
    windows amd64
    windows arm64
    

    Testing

    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.

    Security

    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.

    Contributing

    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).

    Discover Repositories

    Search across tracked repositories by name or description