2022-07-07 00:19:05 +03:00
< p align = "center" >
< a href = "https://pocketbase.io" target = "_blank" rel = "noopener" >
2022-11-18 23:32:59 +02:00
< img src = "https://i.imgur.com/5qimnm5.png" alt = "PocketBase - open source backend in 1 file" / >
2022-07-07 00:19:05 +03:00
< / a >
< / p >
< p align = "center" >
< 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 >
2024-01-31 11:08:40 +02:00
< 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 >
2022-07-07 00:19:05 +03:00
< / p >
2024-09-29 19:23:19 +03:00
[PocketBase ](https://pocketbase.io ) is an open source Go backend that includes:
2022-07-07 00:19:05 +03:00
- embedded database (_SQLite_) with **realtime subscriptions**
2022-07-07 23:50:25 +03:00
- built-in **files and users management**
2022-07-07 00:19:05 +03:00
- convenient **Admin dashboard UI**
- and simple **REST-ish API**
**For documentation and examples, please visit https://pocketbase.io/docs.**
2023-10-16 22:48:05 +05:30
> [!WARNING]
> Please keep in mind that PocketBase is still under active development
2022-07-07 00:19:05 +03:00
> and therefore full backward compatibility is not guaranteed before reaching v1.0.0.
## API SDK clients
2025-01-11 12:28:17 +02:00
The easiest way to interact with the PocketBase Web APIs is to use one of the official SDK clients:
- **JavaScript - [pocketbase/js-sdk ](https://github.com/pocketbase/js-sdk )** (_Browser, Node.js, React Native_)
- **Dart - [pocketbase/dart-sdk ](https://github.com/pocketbase/dart-sdk )** (_Web, Mobile, Desktop, CLI_)
You could also check the recommendations in https://pocketbase.io/docs/how-to-use/.
2022-07-07 00:19:05 +03:00
## Overview
2024-02-07 21:04:20 +02:00
### Use as standalone app
You could download the prebuilt executable for your platform from the [Releases page ](https://github.com/pocketbase/pocketbase/releases ).
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 ](https://github.com/pocketbase/pocketbase/blob/master/examples/base/main.go ) 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 ](https://pocketbase.io/docs/js-overview/ )_).
### Use as a Go framework/toolkit
2024-02-08 00:29:16 +02:00
PocketBase is distributed as a regular Go library package which allows you to build
2022-07-07 00:19:05 +03:00
your own custom app specific business logic and still have a single portable executable at the end.
2024-02-07 21:04:20 +02:00
Here is a minimal example:
2022-07-07 00:19:05 +03:00
2024-09-29 19:23:19 +03:00
0. [Install Go 1.23+ ](https://go.dev/doc/install ) (_if you haven't already_)
2022-07-07 00:19:05 +03:00
2024-02-07 21:04:20 +02:00
1. 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()
2024-09-29 19:23:19 +03:00
app.OnServe().BindFunc(func(se *core.ServeEvent) error {
// registers new "GET /hello" route
2024-12-04 11:06:00 +02:00
se.Router.GET("/hello", func(re *core.RequestEvent) error {
2024-09-29 19:23:19 +03:00
return re.String(200, "Hello world!")
2024-02-07 21:04:20 +02:00
})
2024-09-29 19:23:19 +03:00
return se.Next()
2022-07-07 00:19:05 +03:00
})
2024-02-07 21:04:20 +02:00
if err := app.Start(); err != nil {
log.Fatal(err)
}
2022-07-07 00:19:05 +03:00
}
2024-02-07 21:04:20 +02:00
```
2. To init the dependencies, run `go mod init myapp && go mod tidy` .
3. To start the application, run `go run main.go serve` .
2022-07-07 00:19:05 +03:00
2024-02-07 21:04:20 +02:00
4. To build a statically linked executable, you can run `CGO_ENABLED=0 go build` and then start the created executable with `./myapp serve` .
2022-07-07 00:19:05 +03:00
2024-02-07 21:04:20 +02:00
_For more details please refer to [Extend with Go ](https://pocketbase.io/docs/go-overview/ )._
2022-07-07 00:19:05 +03:00
2024-02-07 21:04:20 +02:00
### Building and running the repo main.go example
2022-07-07 00:19:05 +03:00
2023-01-14 13:50:19 +02:00
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:
2024-12-04 11:07:47 +02:00
0. [Install Go 1.23+ ](https://go.dev/doc/install ) (_if you haven't already_)
2023-01-14 13:50:19 +02:00
1. Clone/download the repo
2. Navigate to `examples/base`
3. Run `GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build`
2023-10-16 22:48:05 +05:30
(_https://go.dev/doc/install/source#environment_ )
2023-01-15 17:00:28 +02:00
4. Start the created executable by running `./base serve` .
2023-01-14 13:50:19 +02:00
2024-02-07 21:04:20 +02:00
Note that the supported build targets by the pure Go SQLite driver at the moment are:
2023-10-16 22:48:05 +05:30
2023-01-14 13:50:19 +02:00
```
darwin amd64
darwin arm64
freebsd amd64
freebsd arm64
linux 386
linux amd64
linux arm
linux arm64
linux ppc64le
linux riscv64
2023-10-16 20:27:37 +03:00
linux s390x
2023-01-14 13:50:19 +02:00
windows amd64
windows arm64
```
2022-07-13 02:12:25 -03:00
2022-07-07 00:19:05 +03:00
### Testing
PocketBase comes with mixed bag of unit and integration tests.
2024-02-07 21:04:20 +02:00
To run them, use the standard `go test` command:
2023-10-16 22:48:05 +05:30
2022-07-07 00:19:05 +03:00
```sh
go test ./...
```
Check also the [Testing guide ](http://pocketbase.io/docs/testing ) 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** .
2024-09-29 19:23:19 +03:00
All reports will be promptly addressed and you'll be credited in the fix release notes.
2022-07-07 00:19:05 +03:00
## Contributing
PocketBase is free and open source project licensed under the [MIT License ](LICENSE.md ).
2022-11-16 15:13:04 +02:00
You are free to do whatever you want with it, even offering it as a paid service.
2022-07-07 00:19:05 +03:00
You could help continuing its development by:
2022-07-17 20:33:12 +03:00
- [Contribute to the source code ](CONTRIBUTING.md )
- [Suggest new features and report issues ](https://github.com/pocketbase/pocketbase/issues )
2022-07-07 00:19:05 +03:00
2023-07-08 14:01:02 +03:00
PRs for new OAuth2 providers, bug fixes, code optimizations and documentation improvements are more than welcome.
2022-11-16 15:13:04 +02:00
2023-07-08 14:01:02 +03:00
But please refrain creating PRs for _new features_ without previously discussing the implementation details.
PocketBase has a [roadmap ](https://github.com/orgs/pocketbase/projects/2 ) 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.
2022-11-16 15:13:04 +02:00
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.
2022-11-17 14:17:10 +02:00
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).