1
0
mirror of https://github.com/pocketbase/pocketbase.git synced 2024-11-25 09:21:11 +02:00
Open Source realtime backend in 1 file https://pocketbase.io/
Go to file
2023-01-17 23:05:10 +02:00
.github updated min github action go version to 1.19.5 2023-01-11 14:53:24 +02:00
apis [#1623] added apis.RecordAuthResponse helper 2023-01-17 23:04:13 +02:00
cmd filter enhancements 2023-01-07 22:27:11 +02:00
core [#1240] added dedicated before/after auth hooks and refactored the submit interceptors 2023-01-15 17:00:28 +02:00
daos removed delete worker pool since it is no longer needed and changed the files delete operation to run in the background (will be replaced with job queue) 2023-01-12 15:34:56 +02:00
examples/base added empty migrations template test and removed publicdir plugin 2022-12-02 12:36:57 +02:00
forms [#370] added rich text editor field 2023-01-17 13:31:48 +02:00
mails added missed IsDebug check 2022-12-16 17:15:04 +02:00
migrations updated migration timestamp 2023-01-08 11:05:44 +02:00
models [#370] added rich text editor field 2023-01-17 13:31:48 +02:00
plugins filter enhancements 2023-01-07 22:27:11 +02:00
resolvers filter enhancements 2023-01-07 22:27:11 +02:00
tests [#1240] added dedicated before/after auth hooks and refactored the submit interceptors 2023-01-15 17:00:28 +02:00
tokens initial v0.8 pre-release 2022-10-30 10:28:14 +02:00
tools [#1377] added Authentik OAuth2 provider 2023-01-16 11:50:45 +02:00
ui updated ui/dist 2023-01-17 23:05:10 +02: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 [#250] added armv7 on linux as a build target 2022-08-01 10:29:06 +03:00
CHANGELOG.md [#1623] added apis.RecordAuthResponse helper 2023-01-17 23:04:13 +02:00
CONTRIBUTING.md [#872] changed the schema required validator to be optional for auth collections 2022-11-16 15:13:04 +02:00
go.mod synced with master 2023-01-12 21:18:43 +02:00
go.sum synced with master 2023-01-12 21:18:43 +02:00
golangci.yml updated linter 2022-12-16 17:06:03 +02:00
LICENSE.md filter enhancements 2023-01-07 22:27:11 +02:00
Makefile initial v0.8 pre-release 2022-10-30 10:28:14 +02:00
pocketbase_test.go [#1267] call app.Bootstrap() before cobra commands execution 2022-12-15 23:20:23 +02:00
pocketbase.go updated code comments and renamed async/sync db to concurrent/nonconcurrent db 2022-12-16 13:07:58 +02:00
README.md [#1240] added dedicated before/after auth hooks and refactored the submit interceptors 2023-01-15 17:00:28 +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.

⚠️ 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

PocketBase could be downloaded directly as a standalone app or it could be used as a Go framework/toolkit which allows you to build your own custom app specific business logic and still have a single portable executable at the end.

Installation

# go 1.18+
go get github.com/pocketbase/pocketbase

For Windows, you may have to use go 1.19+ due to an incorrect js mime type in the Windows Registry (see issue#6).

Example

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

Running and building

Running/building the application is the same as for any other Go program, aka. just go run and go build.

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.

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.18+ (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.

The supported build targets by the non-cgo 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
windows amd64
windows arm64

Testing

PocketBase comes with mixed bag of unit and integration tests. To run them, use the default 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 small features (eg. adding new OAuth2 providers), bug and documentation fixes, etc. are more than welcome.

But please refrain creating PRs for big features without previously discussing the implementation details. Reviewing big PRs often requires a lot of time and tedious back-and-forth communication. PocketBase has a roadmap and I try to work on issues in a specific order and such PRs often come in out of nowhere and skew all initial planning.

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

Please also note that PocketBase was initially created to serve as a new backend for my other open source project - Presentator (see #183), so all feature requests will be first aligned with what we need for Presentator v3.