Why there is no Docker image

baybay installs by copying files onto ordinary PHP hosting. What that costs, what it buys, and why it will still install in five years.

Because there is nothing to build. baybay is PHP 8.2 and SQLite — no Composer, no npm, no bundler, no image. Installing it is copying the files onto a server and pointing it at public/, which is the same thing web hosting has meant for twenty years.

What the install actually is

  1. Clone the repository onto a host running PHP 8.2 or newer with pdo_sqlite and openssl.
  2. Copy .env.example to .env and set the address it will be served from.
  3. Run php bin/baybay key:generate, then php bin/baybay migrate.
  4. Run php bin/baybay household:create --child="Wren", which prints your household's URL and its code.
  5. Point a web server at public/. Apache needs nothing but the .htaccess files already there; nginx has an example config in the repository.

There is no step six. Nothing is fetched, compiled, transpiled or minified, and there is no lock file to resolve. The README is the version to follow, with the details this page leaves out.

What that buys

  • It runs on hosting you may already pay for. Ordinary shared PHP hosting is enough — no VPS, no container runtime, no port to forward. A baby tracker is not a workload that needs a server of its own.
  • Updating is pulling the files. New migrations apply themselves on the next request. Nothing is rebuilt, so nothing can fail to rebuild.
  • There is no dependency tree to be breached. Two third-party files are checked in — Chart.js for the dashboard charts and JetBrains Mono for the typeface, each with its licence beside it — and nothing at all is loaded from a CDN, because the app's Content-Security-Policy refuses it. The whole of what runs in your browser is in the repository you cloned.
  • It will still install in five years. That is the real argument. A build step is a promise that a toolchain will still resolve years from now, and an image is a promise about a base you did not choose. Files and a PHP runtime are the closest thing the web has to a stable target.

What it costs

Real things, and mostly to people who already have the infrastructure this avoids.

  • No one-command deploy. If your homelab is a docker compose up and a reverse proxy, baybay does not slot into it — you configure a vhost and a certificate yourself, once.
  • The host has to be recent enough. PHP 8.2 rules out some older shared hosting. Nothing older is supported, and it is not a version we intend to chase backwards.
  • Updates are yours to run, along with backups. The repository ships bin/backup.sh for the second one, and it is worth a cron line — a family's whole record is one file, so a lost file is not recoverable from anything else.
  • No integrations. No Home Assistant, no watch app, no API for your own scripts. If wiring a tracker into a wider setup is the point for you, this is the wrong one.

The other open source answer

Baby Buddy is the comparison worth making: free, open source, tracks far more than baybay does, and installs as a Docker image or a Python environment. If you are already running containers, that install is one command and this page's argument is worth much less to you. What baybay is better at is the case where you are not — a directory on a host, and a first year's records that live in one file next to it.

The other half of the comparison is what each of them tracks, which is where Baby Buddy wins outright.

The same application, either way

Nothing is held back from the self-hosted version. There is no licence key, no paid tier, no feature behind a subscription — the hosted plan is the same code on a server we run instead of one you run, and the export moves a household between them in either direction.

Hosted plan

If none of the above sounds like an evening you want, hosted is $7 a month and takes about a minute: we run the server, take daily backups and apply updates. You can move to your own server later without asking us, because the export hands you the file.