PocketBase is a free, open source frameworks & platforms project written in Go and released under MIT. It has 61,070 GitHub stars, 3,688 forks and 19 open issues, and was last pushed 35 hours ago. On this registry it ranks #3 of 28 tracked projects in Frameworks & Platforms, and is listed as an open source replacement for 1 paid product, with 5 head-to-head comparisons available. It gained 45 stars over the last 6 tracked days.

What is PocketBase?

What it is

PocketBase is an open-source backend framework written in Go that bundles a SQLite database, authentication, file storage, admin dashboard, and REST API into a single executable file. It lives in the Go ecosystem and targets developers who want a lightweight, self-contained backend without managing separate services like PostgreSQL, Redis, or a separate auth server.

It solves the problem of boilerplate-heavy backend setup by replacing fragmented toolchains—such as a database + auth service + admin panel—with a single binary that starts a full-featured backend in seconds. This is especially valuable for prototypes, small-to-mid production apps, or developers avoiding vendor lock-in to hosted platforms like Supabase.

Key capabilities

  • Embedded SQLite database with real-time subscriptions via WebSockets
  • Built-in user authentication with email/password, OAuth, and magic link support
  • File upload and management with per-record access control
  • Admin dashboard UI for managing collections, users, and settings
  • REST-ish API with automatic CRUD endpoints per collection
  • JavaScript VM plugin to extend backend logic using Node.js-style JS
  • Go library integration to embed PocketBase into custom apps

Who uses it and how

  • Solo developers and small teams deploy PocketBase as a standalone backend for web or mobile apps using the prebuilt binary
  • Go developers embed PocketBase in their services to add admin interfaces or internal tooling without external dependencies
  • Hobbyists and educators use it for rapid prototyping, teaching backend concepts, or hosting personal projects with minimal infrastructure

Getting started

Download the prebuilt executable from the GitHub Releases page and run ./pocketbase serve, or install via go install and run go run main.go serve. Official SDKs for JavaScript and Dart simplify client integration.

When to use it — and when not to

PocketBase is ideal when you need a single-file backend with real-time features and no cloud dependency, especially as a Supabase alternative for self-hosted deployments. However, it is not suited for high-scale production workloads due to SQLite’s concurrency limits and the project’s pre-v1.0 stability guarantees. Self-hosting requires managing SQLite files, SMTP for emails, and TLS termination if exposed publicly—no built-in clustering or horizontal scaling.

project readme (upstream, from github) — read inline

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.27+ (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.27+ (if you haven't already)
  2. Clone/download the repo
  3. Navigate to examples/base
  4. Run CGO_ENABLED=0 go build to build a binary for your current environment (or to target other platforms use GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build; see 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:

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

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.

You could find more details in the project Security policy.

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:

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

[!IMPORTANT] Due to recent LLM spam, PRs are temporary disabled and only existing collaborators can open a PR. If you stumble on a problem that you want to fix, please consider instead opening an issue or discussion with link to your fork (if not obvious - LLM contributions are not welcome). This status may change in the future in case GitHub finally decide to do something about the constant spam, or when I find time to move the project somewhere else.

Frequently asked questions

Is PocketBase free to use?

PocketBase is open source under the MIT licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does PocketBase do?

Open-source backend in a single file

What is PocketBase written in?

PocketBase is primarily written in Go. Its source is publicly available at https://github.com/pocketbase/pocketbase, and it has 61,070 GitHub stars.

What is a good open source alternative to Supabase (hosted)?

PocketBase is one of the open source options listed as an alternative to Supabase (hosted). Compare licences, stars and activity side by side on the PocketBase profile.