Skip to main content

Privacy: what leaves the box

Cobblr makes no unsolicited phone-home. There's no telemetry, no analytics, no error reporting, and no update check. Your data stays in your Postgres. A few features reach third-party services only when you use them, and each has an off-switch in .env:

FeatureContactsTurn off
Barcode lookupsproduct catalogs (upcitemdb, Open Facts, DuckDuckGo; go-upc if you opt in)COBBLR_SCAN_EXTERNAL_LOOKUPS=false
Item image searchDuckDuckGo image search, when you fetch a catalog photo for an itemno dedicated switch yet; it only fires when you use the image picker or photo enrichment
AI featuresyour chosen LLM provider (needs your own key)COBBLR_AI_ENABLED=false
Marketplace bundlesnothing. The bundle catalog is built on your own instance from the bundle files it already shipsnothing to turn off
Sandboxed module installthe module registry, which defaults to a public index on GitHubpoint COBBLR_REGISTRY_URL at your own index, or don't install sandboxed modules

Two things often get lumped together as "the marketplace", and only one of them leaves the box. Browsing and installing bundles makes no outbound call at all: the catalog is assembled locally from the instance's own bundle files. Installing a sandboxed module is the one that reaches out, because the module code comes from a registry index, and COBBLR_REGISTRY_URL is the knob that points it somewhere else. (COBBLR_EXTENSIONS_URL only matters if you deliberately point the bundle catalog at an external index; left alone it stays local.)

Each barcode provider is switchable on its own, and you can supply your own API key where one exists (for example COBBLR_SCAN_GOUPC_API_KEY).

The barcode network is the one scanning feature that sends something out rather than only fetching. It does nothing until you give it a key, and the setup builder asks for one during install with joining as the suggested answer, so it is worth knowing what joining means before you say yes. What leaves is a correction you made: the corrected value, the barcode, which field it fixed, and an opaque account id. Not your email, not your workspace contents, not the rest of what you scanned.

For a fully air-gapped install, set COBBLR_AI_ENABLED=false and COBBLR_SCAN_EXTERNAL_LOOKUPS=false, use the offline TLS option, skip the image-picker features, and don't install sandboxed modules; with no outbound network those calls simply fail quietly rather than leaking. Bundles keep working air-gapped, since they never needed the network.

The repo's root SELF_HOSTING.md carries the deepest version of all this: the per-provider barcode knobs and the full air-gap recipe.