Skip to content
Start

Concepts

Organizations, projects, database location, and data residency — the core objects the control plane is built around.

An organization is the top-level tenant: it owns members, projects, API keys, billing, and settings. A user can belong to many orgs and switches between them with the org switcher; the one they’re acting in is their active org. The creator becomes the owner.

Org settings you can change later: name, IP allowlist, and the org-level webhook URL. Residency cannot change once set.

A project is a single provisioned backlex instance — its own worker, database, and storage — served at <slug>.backlex.com. Projects have:

  • a slug (derived from the name, globally unique under the platform domain),
  • an environment (production, staging, development),
  • a database location (automatic, or pinned to a region), fixed at provision time,
  • a status (provisioning, live, failed, paused, …).

The slug is also the dispatch key: a request to <slug>.backlex.com is host-dispatched to the proj-<slug> user worker.

Every project’s database (D1) has a primary location. It’s fixed when the project is provisioned and can’t move afterwards — the location only governs where your data lives; the project’s worker always runs on Cloudflare’s edge in every location regardless. How the primary is placed depends on the org’s residency:

  • Global — by default the database is placed automatically in the closest available region to wherever you create the project. You can optionally provide a location hint to pin the primary to a broad area instead:

    • Western North America
    • Eastern North America
    • Western Europe
    • Eastern Europe
    • Asia Pacific
    • Oceania

    (These mirror Cloudflare’s D1 location hints — a hint is a coarse geographic area, not a single city.)

  • EU — the database is created under the EU jurisdiction, so the primary and its replicas stay within the European data boundary (GDPR). The jurisdiction governs placement, so there’s nothing to pick — a location hint, if supplied, is ignored.

Both global- and EU-residency projects get D1 read replicas: reads are served from a replica near the user while writes still go to the primary. Replicas spin up wherever read traffic appears — you don’t pick their locations, and there’s no extra Cloudflare cost. Global replicas are unconstrained; EU replicas stay within the EU boundary (enforced by the database’s jurisdiction). The instance reads through the D1 Sessions API, so read-your-writes consistency is preserved within a session.

Residency pins where an org’s data is allowed to live and is set once at creation:

  • eu — data stays within the EU data boundary under the EU jurisdiction (GDPR); replicas stay in-region.
  • global — no residency constraint; automatic placement (or an optional location hint), plus unconstrained global read replicas.

Residency is what decides how a project’s database is placed — automatic/hint for global, EU jurisdiction for eu.