Skip to main content

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:

SectionWhat you go there to do
WorkspaceHow this workspace reads: General (including simple mode), Presentation, Units, Templates, Backup & blueprints
BuildWhat it is made of: Modules, Bundles, Wires, Actions, Fields & forms, Apps
PeopleWho gets in and what they can do: Members & invites, Permissions, Member portal
ConnectionsEverything that talks to something outside the workspace: AI, Assistant, Integrations, Scan rules, Devices, Workspace links, Public surfaces, API tokens
SystemChecking 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)

VarWhat it is
POSTGRES_PASSWORDPostgres password (match it in DATABASE_URL).
JWT_SECRETSigns login sessions. Generate with openssl rand -hex 32.
TENANT_CREDS_ENCRYPTION_KEYEncrypts stored per-workspace credentials. Any strong secret, 16+ characters (e.g. openssl rand -hex 32). Back it up; losing it is unrecoverable.

Access

VarDefaultEffect
PUBLIC_SIGNUP_ENABLEDoff in prodAllow self-service account signup. Turn on to create your first account, then off.
SUPERADMIN_EMAILSemptyComma-separated operator emails that get the admin console.
CORS_ALLOWED_ORIGINSreflect-any in devAllowed 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.

VarDefaultEffect
COBBLR_SITE_ADDRESSrequiredThe name you open Cobblr at, no https://. A DuckDNS name, your own domain, or a cobblr.<your-tailnet>.ts.net name.
COMPOSE_PROFILEScaddycaddy runs the bundled TLS proxy. Set it empty to run bare and front the stack with tailscale serve on the host instead.
COBBLR_TLS_MODEduckdnsWhich proxy TLS variant to use: duckdns, cloudflare, internal (offline CA), or tsnet (the proxy joins your tailnet as its own node).
TS_AUTHKEYemptytsnet 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_EMAILemptyduckdns / cloudflare mode. Optional contact for certificate-expiry notices. Blank is fine; the proxy drops the line when it is empty.
DUCKDNS_TOKENemptyduckdns mode: your DuckDNS token.
CLOUDFLARE_API_TOKENemptycloudflare mode: an API token scoped to edit DNS for your zone.

Data location (self-host)

VarDefaultEffect
COBBLR_DATA_ROOT./dataWhere 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

VarDefaultEffect
COBBLR_AI_ENABLEDtrueMaster 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.

VarDefaultEffect
COBBLR_SCAN_EXTERNAL_LOOKUPSonMaster switch. false means no third-party barcode calls.
COBBLR_SCAN_GOUPC_API_KEYemptyUse go-upc's official API.
COBBLR_SCAN_UPCITEMDB_KEYemptyUse your upcitemdb paid quota.
COBBLR_BIDB_URLemptyJoin the barcode network. Unset means that tier is inert.
COBBLR_BIDB_KEYemptyYour per-install network key, from account.cobblr.xyz.

Marketplace

VarDefaultEffect
COBBLR_EXTENSIONS_URLunset (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_PUBKEYemptyPublic key used to verify signed extensions.

Housekeeping

VarDefaultEffect
ACTIVITY_LOG_RETENTION_DAYSunset (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.

VarDefaultEffect
COBBLR_CAPTCHA_PROVIDERunsetSet to turnstile to require a Cloudflare Turnstile captcha on signup. Pair with the two keys below.
COBBLR_CAPTCHA_SECRETunsetThe Turnstile secret key; stays server-side.
COBBLR_CAPTCHA_SITE_KEYunsetThe Turnstile site key; public, delivered to the signup form at runtime, so no key is baked into the web image.
COBBLR_BLOCK_DISPOSABLE_EMAILSunsettrue rejects signups from known disposable-email providers.
COBBLR_REQUIRE_EMAIL_VERIFYunsettrue 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.