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 defaultsitebin:latestimage. Fully open, no accounts, no feature gates. - Enterprise — the
ee/tree, governed by the Elastic License 2.0. Compiled in only with theeebuild tag (go build -tags ee, imagesitebin: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
| Variable | Purpose |
|---|---|
SITEBIN_TIERS / SITEBIN_TIERS_FILE | Tier definitions (inline JSON or mounted file). |
SITEBIN_DEFAULT_TIER | Tier new/free accounts start on (required in tiers mode). |
SITEBIN_ANON_TIER | Tier for anonymous creation (empty = require an account). |
SITEBIN_TIER_SELF_SELECT | Allow users to switch among free tiers. |
SITEBIN_ALLOW_ANON_CREATE | In accounts mode, still allow anonymous sites. |
SITEBIN_OAUTH_GOOGLE_CLIENT_ID / _SECRET | Google OIDC login. |
SITEBIN_OAUTH_MICROSOFT_CLIENT_ID / _SECRET / _TENANT | Microsoft OIDC (_TENANT default common). |
SITEBIN_SMTP_HOST / _PORT / _USER / _PASS / _FROM / _TLS | Email (verification, password reset). Port default 587; _TLS=true for implicit TLS (465). |
SITEBIN_STRIPE_SECRET_KEY / _WEBHOOK_SECRET | Stripe billing. Webhook: POST /account/billing/stripe/webhook. |
SITEBIN_PADDLE_API_KEY / _WEBHOOK_SECRET / _SANDBOX | Paddle billing. Webhook: POST /account/billing/paddle/webhook. |
SITEBIN_LICENSE_KEY | Your 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_URL | Optional. 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.