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 voidbaseOn 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 otherwiseStart 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 serveIt 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:8090Put 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:
# /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.targetsudo systemctl daemon-reload
sudo systemctl enable --now voidbase
sudo systemctl status voidbaseUpdating
./voidbase update --backupThis 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.
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.