1
0
mirror of https://github.com/pocketbase/pocketbase.git synced 2024-12-01 02:56:49 +02:00
Open Source realtime backend in 1 file https://pocketbase.io/
Go to file
2024-04-13 16:19:33 +03:00
.github updated go deps 2024-04-05 20:20:03 +03:00
apis [#4498] fixed OnAfterApiError nil error reference 2024-03-06 11:06:39 +02:00
cmd fixed the error reporting of admin update/delete commands 2024-02-06 13:55:08 +02:00
core call TestApp.ResetBootstrap as finalizer of the test OnTerminate hook 2024-03-20 23:52:26 +02:00
daos vendored and trimmed the s3blob driver and updated dependencies 2024-03-29 21:19:26 +02:00
examples/base fixed graceful shutdown handling 2023-12-08 21:16:48 +02:00
forms added back relation filter reference support 2024-02-19 16:55:34 +02:00
mails replaced btn mail template outline with border for compatability 2024-04-05 20:46:15 +03:00
migrations fixed optional migration condition 2024-01-05 20:35:09 +02:00
models [#4510] fixed godoc typos 2024-03-07 11:53:54 +02:00
plugins updated security.Encrypt and security.Decrypt docs 2024-03-17 15:42:40 +02:00
resolvers [#4500] added the field name as part of the @request.data.* relations join 2024-03-06 15:45:25 +02:00
tests call TestApp.ResetBootstrap as finalizer of the test OnTerminate hook 2024-03-20 23:52:26 +02:00
tokens updated CHANGELOG and added t.Parallel to some of the tests 2024-01-03 10:58:25 +02:00
tools [#4704] fixed '~' autowildcard wrapping when the string has escaped % character 2024-04-05 20:14:28 +03:00
ui fixed zeroValue isArray check and bumped app version 2024-04-13 16:18:52 +03:00
.gitignore tweaked automigrate to check for git status and extracted the base flags from the plugins 2022-11-26 22:33:27 +02:00
.goreleaser.yaml specify the exact license and changelog files to include in the release archive 2024-01-03 15:04:34 +02:00
CHANGELOG_8_15.md split changelog in chunks 2023-12-16 18:22:18 +02:00
CHANGELOG.md [#4737] fixed OAuth2 clear btn action 2024-04-13 15:44:20 +03:00
CONTRIBUTING.md updated min Go and Node.js verion in CONTRIBUTING.md 2024-01-22 16:54:12 +02:00
go.mod updated go deps 2024-04-13 16:19:33 +03:00
go.sum updated go deps 2024-04-13 16:19:33 +03:00
golangci.yml updated ui/dist, go deps, docs and fixed some typos 2023-12-10 12:23:31 +02:00
LICENSE.md filter enhancements 2023-01-07 22:27:11 +02:00
Makefile updated cron jsvm bindings and generated types 2023-07-16 23:24:10 +03:00
pocketbase_test.go [#3877] fixed test messages typo 2023-12-04 18:09:29 +02:00
pocketbase.go added timestamp to the generated JSVM types file to prevent creating it every time on app startup 2023-12-16 23:20:38 +02:00
README.md fixed readme typo 2024-02-08 00:29:16 +02:00

PocketBase - open source backend in 1 file

build Latest releases Go package documentation

PocketBase is an open source Go backend, consisting of:

  • 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 API is to use one of the official SDK clients:

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

  2. Create a new project directory with the following main.go file inside it:

    package main
    
    import (
        "log"
        "net/http"
    
        "github.com/labstack/echo/v5"
        "github.com/pocketbase/pocketbase"
        "github.com/pocketbase/pocketbase/apis"
        "github.com/pocketbase/pocketbase/core"
    )
    
    func main() {
        app := pocketbase.New()
    
        app.OnBeforeServe().Add(func(e *core.ServeEvent) error {
            // add new "GET /hello" route to the app router (echo)
            e.Router.AddRoute(echo.Route{
                Method: http.MethodGet,
                Path:   "/hello",
                Handler: func(c echo.Context) error {
                    return c.String(200, "Hello world!")
                },
                Middlewares: []echo.MiddlewareFunc{
                    apis.ActivityLogger(app),
                },
            })
    
            return nil
        })
    
        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.

Note

PocketBase embeds SQLite, but doesn't require CGO.

If CGO is enabled (aka. CGO_ENABLED=1), it will use mattn/go-sqlite3 driver, otherwise - modernc.org/sqlite. Enable CGO only if you really need to squeeze the read/write query performance at the expense of complicating cross compilation.

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.21+ (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 accordingly.

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