MCPcopy
hub / github.com/pocketbase/pocketbase

github.com/pocketbase/pocketbase @v0.39.5 sqlite

repository ↗ · DeepWiki ↗ · release v0.39.5 ↗
11,066 symbols 46,788 edges 659 files 3,920 documented · 35%
README
<a href="https://pocketbase.io" target="_blank" rel="noopener">
    <img src="https://i.imgur.com/aCBbjKx.png" alt="PocketBase - open source backend in 1 file" />
</a>







<a href="https://github.com/pocketbase/pocketbase/actions/workflows/release.yaml" target="_blank" rel="noopener"><img src="https://github.com/pocketbase/pocketbase/actions/workflows/release.yaml/badge.svg" alt="build" /></a>
<a href="https://github.com/pocketbase/pocketbase/releases" target="_blank" rel="noopener"><img src="https://img.shields.io/github/release/pocketbase/pocketbase.svg" alt="Latest releases" /></a>
<a href="https://pkg.go.dev/github.com/pocketbase/pocketbase" target="_blank" rel="noopener"><img src="https://godoc.org/github.com/pocketbase/pocketbase?status.svg" alt="Go package documentation" /></a>

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.25+ (if you haven't already)

  2. Create a new project directory with the following main.go file inside it: ```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)
    }
    

    } ```

  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.25+ (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   loong64
linux   ppc64le
linux   riscv64
linux   s390x
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.

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:

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.

Extension points exported contracts — how you extend this code

DriverReader (Interface)
DriverReader reads an object from the blob. [6 implementers]
tools/filesystem/blob/driver.go
SafeErrorResolver (Interface)
SafeErrorResolver defines an error interface for resolving the public safe error fields. [6 implementers]
tools/router/error.go
Tagger (Interface)
Tagger defines an interface for event data structs that support tags/groups/categories/etc. Usually used together with T [4 …
tools/hook/tagged.go
FieldResolver (Interface)
FieldResolver defines an interface for managing search fields. [3 implementers]
tools/search/simple_field_resolver.go
Mailer (Interface)
Mailer defines a base mail client interface. [2 implementers]
tools/mailer/mailer.go
DBExporter (Interface)
DBExporter defines an interface for custom DB data export. Usually used as part of [App.Save]. [1 implementers]
core/db.go
HttpClient (Interface)
HttpClient is a base HTTP client interface (usually used for test purposes). [1 implementers]
plugins/ghupdate/ghupdate.go
ProviderFactoryFunc (FuncType)
ProviderFactoryFunc defines a function for initializing a new OAuth2 provider.
tools/auth/auth.go

Core symbols most depended-on inside this repo

Set
called by 378
tools/subscriptions/client.go
NewReader
called by 374
tools/filesystem/blob/bucket.go
Next
called by 360
tools/hook/event.go
Bind
called by 322
tools/hook/hook.go
NewTestApp
called by 322
tests/app.go
Cleanup
called by 319
tests/app.go
NewRecord
called by 313
core/record_model.go
Run
called by 309
core/migrations_runner.go

Shape

Function 6,004
Method 3,947
Interface 641
Struct 329
Class 120
TypeAlias 13
FuncType 12

Languages

TypeScript67%
Go33%

Modules by API surface

plugins/jsvm/internal/types/generated/types.d.ts2,619 symbols
ui/public/libs/tinymce/tinymce.min.js1,420 symbols
ui/public/libs/tinymce/themes/silver/theme.min.js1,195 symbols
ui/public/libs/tinymce/models/dom/model.min.js527 symbols
core/app.go193 symbols
ui/public/libs/tinymce/plugins/table/plugin.min.js192 symbols
ui/public/libs/tinymce/plugins/lists/plugin.min.js169 symbols
ui/public/libs/uplot/uplot.iife.js167 symbols
core/base.go126 symbols
ui/public/libs/tinymce/plugins/image/plugin.min.js98 symbols
ui/public/libs/tinymce/plugins/link/plugin.min.js86 symbols
ui/public/libs/tinymce/plugins/fullscreen/plugin.min.js81 symbols

Used by 2 indexed graphs manifest dependencies, hub-wide

Dependencies from manifests, versioned

github.com/asaskevich/govalidatorv0.0.0-2023030114320 · 1×
github.com/disintegration/imagingv1.6.2 · 1×
github.com/dlclark/regexp2/v2v2.2.2 · 1×
github.com/domodwyer/mailyak/v3v3.6.2 · 1×
github.com/dop251/base64decv0.0.0-2023102211274 · 1×
github.com/dop251/gojav0.0.0-2026061813352 · 1×
github.com/dop251/goja_nodejsv0.0.0-2026021211193 · 1×
github.com/dustin/go-humanizev1.0.1 · 1×
github.com/fsnotify/fsnotifyv1.7.0 · 1×
github.com/gabriel-vasile/mimetypev1.4.13 · 1×
github.com/ganigeorgiev/fexprv0.5.0 · 1×

For agents

$ claude mcp add pocketbase \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact