Karta offers tenant isolation two different ways, deliberately matched to two different deployment realities. Pick the one that fits how you run.Documentation Index
Fetch the complete documentation index at: https://docs.karta.sh/llms.txt
Use this file to discover all available pages before exploring further.
Embedded SDK (KartaHub)
Each(tenant, user) pair gets a fully isolated filesystem workspace
(overlayfs, clonefile, or copy, depending on platform) and its own Karta
instance and harness. Strong process-and-filesystem isolation, heavier
per-tenant overhead. Right for in-process applications.
HTTP server — karta serve
A single shared Karta instance plus a SessionOwnerStore that durably
records session_id → organization_id. Access is default-deny: an API key
scoped to org A cannot touch org B’s sessions, even by guessing IDs. Lighter
weight, right for a shared cloud service.
Why two models
Embedded wants isolation
In-process apps run untrusted-ish per-user state side by side; filesystem
isolation per
(tenant, user) is worth the overhead.Cloud wants efficiency
A shared service wants resource efficiency with auth-enforced scoping — one
instance, many orgs, isolation by ownership records rather than by process.
The tenancy stack
In the hosted product, isolation nests at three levels, each with a different credential at its boundary:user_id is an opaque blob your backend supplies — Karta keys the
shadow copy on it but never introspects it. Format and granularity are your
contract. See Personas for the full credential matrix.
Persistence
Two distinct stores back all of this:- Harness session storage (source of truth) — owned entirely by the harness (e.g. Claude’s JSONL thread files). Karta reads through the harness; it never writes a second copy.
- Karta metadata — instance and session-ownership records, via
KARTA_SESSION_STORE_URL: SQLite (default), PostgreSQL, or S3.