betavoidbase is in public beta. It runs, the API is PocketBase's and is not moving, and the version is still 0.x for everything around that.Help us get it to 1.0

Standalone executable

One file that contains the server, the admin panel and everything they need. Nothing is installed, and this is the one page here that needs neither npm nor bun.

Download it

Builds are published for Linux, macOS and Windows on both amd64 and arm64, with musl builds for Alpine, on the releases page. On Linux:

# pick the build for this machine: linux_amd64, linux_arm64, or linux_amd64_musl on Alpine
VERSION=0.7.0
curl -LO https://github.com/voidbase-cloud/voidbase/releases/download/v${VERSION}/voidbase_${VERSION}_linux_amd64.zip

unzip voidbase_${VERSION}_linux_amd64.zip
chmod +x voidbase

On macOS, with the Apple Silicon build and the quarantine flag cleared:

VERSION=0.7.0
curl -LO https://github.com/voidbase-cloud/voidbase/releases/download/v${VERSION}/voidbase_${VERSION}_darwin_arm64.zip
unzip voidbase_${VERSION}_darwin_arm64.zip
chmod +x voidbase
xattr -d com.apple.quarantine voidbase   # macOS blocks downloaded binaries until you say otherwise

Start it

Make the first account, then run the server. The password wants eight characters or more.

./voidbase superuser upsert you@example.com your-password
./voidbase serve

It prints where it is:

Server started at http://127.0.0.1:8090
├─ REST API:  http://127.0.0.1:8090/api/
└─ Dashboard: http://127.0.0.1:8090/_/

Open the dashboard, sign in with the account you just made, and you have an instance. Design a collection there and it is immediately available over the API, which is what the SDK page connects to.

Where the data is

Everything the instance owns lives in a pb_data/ directory beside the executable: the database, the uploaded files, and the generated typings that make editing hooks autocomplete. Copy that directory and you have copied the instance; delete it and you have a new one. There is more about it under pb_data.

On a server

By default it listens on the loopback address only. To take connections from other machines:

./voidbase serve --http 0.0.0.0:8090

Put something that terminates TLS in front of it before doing that on the open internet. A reverse proxy (Caddy, nginx, Cloudflare Tunnel) is the usual answer, and the panel's Settings page has a trusted-proxy setting so the instance sees the real client address rather than the proxy's.

To keep it running, a systemd unit is enough:

Linux
# /etc/systemd/system/voidbase.service
[Unit]
Description=voidbase
After=network.target

[Service]
Type=simple
User=voidbase
WorkingDirectory=/opt/voidbase
ExecStart=/opt/voidbase/voidbase serve --http 127.0.0.1:8090
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now voidbase
sudo systemctl status voidbase

Updating

./voidbase update --backup

This fetches the newest release for your platform, checks it against the published checksum and replaces the executable in place. The old one is kept beside it until the new one is written, so a download that fails partway leaves you with the binary you had. --backup zips pb_data first, which is worth the second it costs.

Your data is not touched. Everything the instance owns is in pb_data/, and an update replaces only the program that reads it. Restart the server and you are on the new version.

voidbase update --check changes nothing. It prints the version you are on and the newest one, and exits 1 when you are behind and 2 when it could not find out, which is what a pipeline reads. --to 0.9.0 goes to a particular version rather than the newest, and --dry-run prints the command it would run without running it.

You do not have to remember to check. Any voidbase command mentions a new release once a day, from an answer cached under ~/.voidbase. It never speaks in CI or when the output is not a terminal, and VOIDBASE_NO_UPDATE_CHECK=1 silences it everywhere. Every release is written up in the release notes.

Adding your own behaviour

Put JavaScript in a pb_hooks/ directory beside the executable and it is loaded at startup: new endpoints, handlers that run around writes, scheduled work. That is the same directory a project has, and pb_hooks is the guide to it. When you want that code in a repository rather than beside a binary, a voidbase project is the next page.

Found something wrong on this page?

Fix it yourself. The link below opens this file in GitHub's editor and forks the repository for you if you need one, and your change becomes a pull request without leaving the browser.