Running modes
Llooma runs in one of two modes, chosen at deploy time with PUBLIC_MODE. This is the decision
everything else follows from: where data lives, who can see it, and whether provider API keys ever
reach a browser.
local (default)
Section titled “local (default)”Single user, browser only. Sessions, knowledge, server connections and preferences all live in
the browser’s localStorage, and you bring your own providers from Settings → Servers. No
accounts, no database.
Best for personal use, a phone PWA, or the upcoming desktop app.
The catch: nothing syncs. Two browsers are two separate installations, and clearing site data clears everything. Export a backup from Settings → Data if that matters to you.
server
Section titled “server”Multi-user, self-hosted. Users sign in with email and password, OIDC, or both. Data is stored server-side in SQLite per user, and provider API keys never leave the server. They are encrypted at rest and injected into requests server-side, so a signed-in user can use a model without ever being able to read the key behind it.
An admin configures the shared providers and which models to expose, and may allow users to add their own keys on top.
PUBLIC_MODE=serverAll server-mode state lives under DATA_DIR, one directory to bind-mount to persist everything.
What changes between them
Section titled “What changes between them”local |
server |
|
|---|---|---|
| Where data lives | Browser localStorage |
SQLite under DATA_DIR, per user |
| Sync across devices | No | Yes |
| Accounts | None | Email + password and/or OIDC |
| Provider keys | In the browser | On the server, encrypted |
| Talking to a provider | Browser → provider, via /api/proxy |
Browser → /api/llm, server → provider |
| Sharing settings | (none) | Admin can share and lock providers, prompts, tools |
That last row is the reason the generic proxy is disabled outright in server mode: it takes whatever origin it is given and needs no signed-in user, which in front of a multi-user instance would be an open relay. See Security.

