Enterprise setup

Sitebin is open-core: the community edition is complete on its own, and the enterprise edition adds accounts, tiers & quotas, OAuth login, SMTP, and Stripe/Paddle billing on top — all configured at container startup, like everything else.

Editions

  • Community (default) — MIT licensed, built with go build / the default sitebin:latest image. Fully open, no accounts, no feature gates.
  • Enterprise — the ee/ tree, governed by the Elastic License 2.0. Compiled in only with the ee build tag (go build -tags ee, image sitebin:latest-ee).

The ee/ source is published in the repository — source-available, so you can read and audit every line before you buy. Both editions build from the same repo, but the community sitebin:latest image contains none of the ee/ code: it is excluded at compile time, so the community binary stays pure MIT.

Account modes

SITEBIN_ACCOUNT_MODE selects how the instance handles users (default: open):

  • open — no accounts; anonymous creation, exactly like the community edition.
  • accounts — users log in to create sites.
  • tiers — accounts plus tiered quotas (and optionally paid plans).

Enterprise environment variables

VariablePurpose
SITEBIN_TIERS / SITEBIN_TIERS_FILETier definitions (inline JSON or mounted file).
SITEBIN_DEFAULT_TIERTier new/free accounts start on (required in tiers mode).
SITEBIN_ANON_TIERTier for anonymous creation (empty = require an account).
SITEBIN_TIER_SELF_SELECTAllow users to switch among free tiers.
SITEBIN_ALLOW_ANON_CREATEIn accounts mode, still allow anonymous sites.
SITEBIN_OAUTH_GOOGLE_CLIENT_ID / _SECRETGoogle OIDC login.
SITEBIN_OAUTH_MICROSOFT_CLIENT_ID / _SECRET / _TENANTMicrosoft OIDC (_TENANT default common).
SITEBIN_SMTP_HOST / _PORT / _USER / _PASS / _FROM / _TLSEmail (verification, password reset). Port default 587; _TLS=true for implicit TLS (465).
SITEBIN_STRIPE_SECRET_KEY / _WEBHOOK_SECRETStripe billing. Webhook: POST /account/billing/stripe/webhook.
SITEBIN_PADDLE_API_KEY / _WEBHOOK_SECRET / _SANDBOXPaddle billing. Webhook: POST /account/billing/paddle/webhook.
SITEBIN_LICENSE_KEYYour Ed25519 license key, issued when you buy. Without one the instance runs for a 90-day trial and then declines to create new sites; existing sites are always served. A missing, expired or unreadable key never stops the instance from starting.
SITEBIN_LICENSE_URLOptional. Where a renewed key is collected (default: your PayGate). The request carries no credential — the instance presents the key it already holds. Checked daily, applied without a restart. Ignored when SITEBIN_LICENSE_KEY is set.

Tiers

Tiers are defined as JSON, either inline in SITEBIN_TIERS or in a file mounted at SITEBIN_TIERS_FILE:

[
  {
    "id": "free",
    "max_site_bytes": 104857600,
    "max_files": 1000,
    "max_sites": 5,
    "webdav": true,
    "custom_domains": 0,
    "max_expiry_days": 30,
    "price": null
  },
  {
    "id": "pro",
    "max_site_bytes": 1073741824,
    "max_files": 10000,
    "max_sites": 100,
    "webdav": true,
    "custom_domains": 5,
    "max_expiry_days": 0,
    "trusted": true,
    "price": { "stripe": "price_123", "paddle": "pri_456", "display": "€9/mo" }
  }
]

Two optional flags change behaviour rather than quotas. "trusted": true exempts the tier's sites from the strict content-security headers untrusted uploads get — grant it to plans whose holders you can hold accountable, and see Operations & security for what the two header levels contain. "admin": true marks a tier whose holders may reach the instance register at /account/admin: every site on the instance, with search, filters, delete and expiry control. Admin needs a second condition — the account's email must also be listed in SITEBIN_ADMIN_ACCOUNTS — so neither the tier source nor the container environment can grant instance-wide access on its own.

A tier's price maps it to provider price IDs — a tier with a price becomes a paid plan the dashboard sells via checkout. Point your provider's webhooks at POST /account/billing/stripe/webhook and POST /account/billing/paddle/webhook.

The account dashboard

The dashboard lives at /account on the main domain. Sites created while signed in are owned by the account and still work over the API with their edit password.

It also issues API tokens, optionally named. A token creates sites owned by the account without a browser session — which is what makes publishing from CI or an AI agent possible on an instance where sign-in goes through SSO — and stands in for the edit password on every site that account already owns. It is shown once and stored only as a hash, and it acts on sites, never on the account: the dashboard refuses it, so it cannot change a plan or delete the account. See the API page.

License keys are Ed25519-verified offline, against a root public key compiled into the binary — the instance never needs to reach a license server to run, and an air-gapped deployment works. An online instance checks once a day for a renewed key, sending only the key it already holds. A key carries two dates: when the subscription ends, and how long after that it keeps working, so a lapsed payment warns long before it bites. License terms and purchasing are on the Enterprise page.