Lightning talk · Maastricht 2026

The Big Bang Theory

collective.big.bang — from an empty Zope to a ready Plone site

"Our whole universe was in a hot, dense state... then nearly fourteen billion years ago, expansion started — wait!"

What collective.big.bang actually does

  • Creates a Plone site automatically when Zope starts
  • Runs pending upgrade steps as soon as the database opens
  • No more admin / admin — password comes from an env var

collective.big.bang · Maastricht 2026

Phase 1 — Before the Big Bang

01 · An empty Zope, waiting.

collective.big.bang · Maastricht 2026

An empty Zope

  • Fresh Data.fs, freshly started container
  • acl_users has no admin user yet
  • No Plone site at / — just the Zope root

This is the state collective.big.bang reacts to.

collective.big.bang · Maastricht 2026

Phase 2 — Big Bang 💥

02 · Triggered on startup, when ACTIVE_BIGBANG=True.

collective.big.bang · Maastricht 2026

The site gets created

  • Fires once, right after Zope opens the database
  • Installs the chosen distribution and extension profiles
  • Gated by ACTIVE_BIGBANG — one instance only creates it
collective.big.bang · Maastricht 2026

What you'll see in the logs

INFO  [collective.big.bang] Plone Site created
INFO  [Zope] Ready to handle requests
Serving on http://0.0.0.0:8080

A few seconds after container start — no manual click involved.

collective.big.bang · Maastricht 2026

Big Bang — environment variables

Env var Default Purpose
ACTIVE_BIGBANG False Enable site creation
SITE_ID Plone Site id
PLONE_EXTENSION_IDS caching + theme Profiles to install
DEFAULT_LANGUAGE en Site language
ADMIN_PASSWORD (unset) Zope admin password
collective.big.bang · Maastricht 2026

Phase 3 — Expansion 🌌

03 · Every pending upgrade step, applied automatically.

collective.big.bang · Maastricht 2026

Expanding the site

  • Fires on IDatabaseOpenedWithRoot
  • Loops listProfilesWithPendingUpgrades() until nothing's left
  • Commits the transaction after every single step
  • Gated by ACTIVE_BIGBANG_EXPANSION — again, one instance only
collective.big.bang · Maastricht 2026

Upgrade steps, one commit at a time

INFO  Upgrading profile Products.CMFPlone:plone to 6200
INFO  Running upgrade step ... safer external editor condition
INFO  Finished upgrading Products.CMFPlone:plone profile
INFO  A Plone Site 'Plone' already exists and will not be replaced
INFO  Ready to handle requests

Same instance, same startup — restart it and it just tops itself up.

collective.big.bang · Maastricht 2026

A Kubernetes Job, not a Deployment flag

apiVersion: batch/v1
kind: Job
metadata:
  name: plone-create-site
spec:
  backoffLimit: 3
  template:
    spec:
      restartPolicy: Never
      containers:
        - name: create-site
          image: imio/plone-backend:latest
          command: ["./bin/create-site", "parts/instance/etc/zope.conf"]

create-site is idempotent — it can re-run on every deploy. The Deployment itself never needs ACTIVE_BIGBANG at all.

collective.big.bang · Maastricht 2026

Before → Big Bang → Expansion

Site creation as code, driven by environment variables — container and Kubernetes native.

🥚

Before

An empty Zope, no site, no admin.

💥

Big Bang

The Plone site gets created, once.

🚀

Expansion

Pending upgrade steps run automatically.

🎵 So all started with the Plone site! Hey!

collective.big.bang · Maastricht 2026

Thanks!

collective.big.bang
github.com/collective/collective.big.bang
pypi.org/project/collective.big.bang

collective.big.bang · Maastricht 2026