Acknowledgments
Almost nothing here is original. voidbase is one idea, that PocketBase's API could run on Cloudflare, resting on a great deal of work other people did first and gave away. This site is a fork of theirs, and the section below says exactly how much of it we kept.
PocketBase
PocketBase is Gani Georgiev's, MIT licensed, and it is the reason this project exists. voidbase reimplements its HTTP API, its filter and rule language, its email templates and its JavaScript hook surface. The admin panel served at /_/ is PocketBase's own build, copied in unmodified and still under its licence.
This website is a fork of PocketBase's. Not an homage to it and not a design inspired by it: the site you are reading started as pocketbase/site and still carries its layout, its stylesheets and its components. The landing page is the clearest evidence of that and we would rather point at it than hope nobody notices. What has changed since is the framework, because it was ported from Svelte to React and refactored more than once, and the documentation, which is written from scratch because none of it would have been true otherwise.
Copyright (c) 2022 - present, Gani Georgiev, under the MIT licence. The same person wrote the backend we reimplement and the site we forked, which is worth saying in one sentence rather than two paragraphs apart.
voidbase is not affiliated with or endorsed by the PocketBase project. If a single machine suits you, run PocketBase: it is faster, older and better proven, and we say so on the page that compares them.
Void and Cloudflare
Void is what turns a voidbase project into a Worker and deploys it, and it is what this site is built with. The parts of it we lean on hardest are the ones that were shipped while we were building on them.
Cloudflare is the platform underneath: Workers, D1, R2, Durable Objects and Workers AI. A backend that costs nothing until it has users is their achievement rather than ours, and the argument for voidbase mostly reduces to getting out of the way of it.
The Omarchy plugin marketplace
omarchy-plugin-marketplace worked out how to run a community marketplace without accounts, uploads or a place to host other people's code: a submission is a GitHub issue, an automated pass reports on the repository before anyone decides, an explicit maintainer approval is what publishes it, and the registry is a file in the repository rather than rows in a database.
The voidbase marketplace is a much smaller version of that idea and none of their code is in it, but the shape is theirs and it saved us from designing a worse one.
What the server is made of
Runtime dependencies, from the package's NOTICE file.
- HonoMITThe router every request goes through.
- fflateMITZip and unzip, for backups and for the admin panel inside the executable.
- PhotonApache-2.0Image processing compiled to WebAssembly, by Silvia O'Dwyer, which is what generates thumbnails. Packaged as @cf-wasm/photon.
- SimpleWebAuthnMITPasskey registration and verification on the server.
- bcryptjsMITPassword hashing.
What this site is made of
Everything above, plus the pieces that only the site uses.
- ReactMITThe pages you are reading.
- ViteMITThe build, through Void's plugin.
- SassMITThe stylesheets.
- Remix IconApache-2.0Every icon on this site, including the ones in the sidebar.
- Source Sans ProSIL OFL 1.1The typeface this sentence is set in, by Paul D. Hunt for Adobe.
- Ubuntu MonoUbuntu Font LicenceEvery command and code block.
- Gopher artworkThe gopher on the landing page, drawn by Marcus Olsson, from the original by Renee French.
And everyone who reports something
A backend gets trustworthy by being used in ways nobody designed for and having the results reported back. If you have opened an issue, corrected a page, or told us a number on the comparison pages was wrong, that is the contribution this project needs most and the one it is least able to make on its own. How to contribute is the short version of why.
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.