Configuration
Cobblr is configured in two layers. Workspace settings live in the app, under
Configuration; instance settings are environment variables, set in your
.env for a self-hosted install. This page covers both.
The Configuration area (in the app)
Configuration opens to five section cards, each listing its settings so you can click straight through:
| Section | What you go there to do |
|---|---|
| Workspace | How this workspace reads: General (including simple mode), Presentation, Units, Templates, Backup & blueprints |
| Build | What it is made of: Modules, Bundles, Wires, Actions, Fields & forms, Apps |
| People | Who gets in and what they can do: Members & invites, Permissions, Member portal |
| Connections | Everything that talks to something outside the workspace: AI, Assistant, Integrations, Scan rules, Devices, Workspace links, Public surfaces, API tokens |
| System | Checking on it: Activity log, Background queue, Healthcheck, Scripting, OpenAPI |
You only see what applies. A setting whose module is switched off is not listed, so no entry leads to a page that cannot work, and settings your role cannot use stay out of your way. Nothing hides behind an "advanced" toggle.
Finding a setting. The search bar matches on synonyms, so "roles" finds Permissions, "swagger" finds OpenAPI, and "octoprint" finds Devices. Inside a settings page, a breadcrumb leads back to the section you came from, and the sidebar lists every setting by section with your page highlighted; on a phone it becomes a Jump to picker.
Things you browse are not settings. Lists you look at, such as locations, files, tags, and saved views, live in the workspace nav rather than under Configuration. Your own profile lives under Your account: Configuration means the workspace, Your account means you.
Environment variables (instance)
The rest of this page is the instance layer: environment variables, set in your
.env for a self-hosted install. Most have sensible defaults; the ones below
are the ones you actually reach for. See Self-hosting for the
setup and the privacy controls.
Secrets (set these)
| Var | What it is |
|---|---|
POSTGRES_PASSWORD | Postgres password (match it in DATABASE_URL). |
JWT_SECRET | Signs login sessions. Generate with openssl rand -hex 32. |
TENANT_CREDS_ENCRYPTION_KEY | Encrypts stored per-workspace credentials. Any strong secret, 16+ characters (e.g. openssl rand -hex 32). Back it up; losing it is unrecoverable. |
Access
| Var | Default | Effect |
|---|---|---|
PUBLIC_SIGNUP_ENABLED | off in prod | Allow self-service account signup. Turn on to create your first account, then off. |
SUPERADMIN_EMAILS | empty | Comma-separated operator emails that get the admin console. |
CORS_ALLOWED_ORIGINS | reflect-any in dev | Allowed web origins in production. |
HTTPS (self-host stack)
These configure the bundled TLS proxy in the self-host stack. Pick one TLS mode and set the name you open Cobblr at. Install walks through each mode; this is the variable reference.
| Var | Default | Effect |
|---|---|---|
COBBLR_SITE_ADDRESS | required | The name you open Cobblr at, no https://. A DuckDNS name, your own domain, or a cobblr.<your-tailnet>.ts.net name. |
COMPOSE_PROFILES | caddy | caddy runs the bundled TLS proxy. Set it empty to run bare and front the stack with tailscale serve on the host instead. |
COBBLR_TLS_MODE | duckdns | Which proxy TLS variant to use: duckdns, cloudflare, internal (offline CA), or tsnet (the proxy joins your tailnet as its own node). |
TS_AUTHKEY | empty | tsnet mode only. Leave empty to approve the box in your browser from a one-time link the proxy logs on first start. Set a reusable auth key for a headless join. |
COBBLR_ACME_EMAIL | empty | duckdns / cloudflare mode. Optional contact for certificate-expiry notices. Blank is fine; the proxy drops the line when it is empty. |
DUCKDNS_TOKEN | empty | duckdns mode: your DuckDNS token. |
CLOUDFLARE_API_TOKEN | empty | cloudflare mode: an API token scoped to edit DNS for your zone. |
Data location (self-host)
| Var | Default | Effect |
|---|---|---|
COBBLR_DATA_ROOT | ./data | Where every bind mount lives: Postgres, uploaded files, installed modules, and the proxy's TLS certs. Set it once to move all of them together, onto a data disk, a NAS mount, or an appdata root you already define (for example COBBLR_DATA_ROOT=${PATH_TO_APPDATA}/cobblr). Left unset, the mounts stay in ./data beside the compose file, so existing installs are unchanged until you set it and move the folder. |
AI
| Var | Default | Effect |
|---|---|---|
COBBLR_AI_ENABLED | true | Master switch for built-in AI features. With no provider key nothing is called; set false to guarantee no outbound AI. |
Scanning
Barcode scanning contacts third-party product catalogs. Each provider is switchable and takes its own key. Full table in Self-hosting -> Privacy.
| Var | Default | Effect |
|---|---|---|
COBBLR_SCAN_EXTERNAL_LOOKUPS | on | Master switch. false means no third-party barcode calls. |
COBBLR_SCAN_GOUPC_API_KEY | empty | Use go-upc's official API. |
COBBLR_SCAN_UPCITEMDB_KEY | empty | Use your upcitemdb paid quota. |
COBBLR_BIDB_URL | empty | Join the barcode network. Unset means that tier is inert. |
COBBLR_BIDB_KEY | empty | Your per-install network key, from account.cobblr.xyz. |
Marketplace
| Var | Default | Effect |
|---|---|---|
COBBLR_EXTENSIONS_URL | unset (instance serves its own catalog) | Point the marketplace at a different catalog index instead of the one your instance builds and serves itself. |
COBBLR_ROOT_PUBKEY | empty | Public key used to verify signed extensions. |
Housekeeping
| Var | Default | Effect |
|---|---|---|
ACTIVITY_LOG_RETENTION_DAYS | unset (keep forever) | Prune activity-log entries older than this many days. Left unset, nothing is ever removed. |
Email (optional)
Magic-link and invite delivery. Pick a provider with COBBLR_AUTH_EMAIL_PROVIDER
and set its keys (COBBLR_AUTH_SMTP_*, or a Mailgun / Resend / Postmark key).
Unset means links are shown in the app instead of emailed. Setup walkthrough:
Self-hosting -> Email.
Signup protection (optional)
For an instance whose signup page is reachable from the open internet. All of these are off by default, so nothing changes on a private install.
| Var | Default | Effect |
|---|---|---|
COBBLR_CAPTCHA_PROVIDER | unset | Set to turnstile to require a Cloudflare Turnstile captcha on signup. Pair with the two keys below. |
COBBLR_CAPTCHA_SECRET | unset | The Turnstile secret key; stays server-side. |
COBBLR_CAPTCHA_SITE_KEY | unset | The Turnstile site key; public, delivered to the signup form at runtime, so no key is baked into the web image. |
COBBLR_BLOCK_DISPOSABLE_EMAILS | unset | true rejects signups from known disposable-email providers. |
COBBLR_REQUIRE_EMAIL_VERIFY | unset | true requires a verified email before login succeeds. Needs a working email provider (above). |
These are the variables most instances set. The authoritative list is the
.env.example that ships with the self-host stack: every variable the instance
reads is declared there with a comment, and it cannot drift from the code the way
a hand-kept table can.