Configuration Sources
Loom server loads configuration from multiple sources with the following precedence (highest to lowest):- Environment variables (
LOOM_SERVER_*) - Configuration file (
/etc/loom/server.toml) - Built-in defaults
HTTP Server
Basic Settings
Address to bind the HTTP server to. Use
0.0.0.0 to listen on all interfaces.Port to listen on.
Base URL of the server (e.g.,
https://loom.example.com). Used for OAuth redirect URIs and email links.Example
Database
SQLite database connection string. Must start with
sqlite:.SQLite Options
LLM Providers
Configure at least one LLM provider. The server supports Anthropic, OpenAI, Vertex AI, and Z.ai.Anthropic Claude
Anthropic API key (starts with
sk-ant-).Model identifier to use.
Enable OAuth pool mode for Claude Max subscriptions (mutually exclusive with
API_KEY).LOOM_SERVER_ANTHROPIC_OAUTH_CREDENTIAL_FILE
string
default:"/var/lib/loom-server/anthropic-credentials.json"
Path to OAuth credential store when using pool mode.
OpenAI
OpenAI API key (starts with
sk-).Model identifier to use.
OpenAI organization ID for enterprise accounts.
Vertex AI (Google)
Path to Google Cloud service account credentials JSON file.
Google Cloud project ID.
Google Cloud region.
Z.ai (ZhipuAI)
Z.ai API key.
Model identifier to use.
Authentication
General Settings
Disable new user signups. Existing users can still log in.
Enable development mode (auto-authenticate without OAuth). Never use in production.
Default locale for emails and user-facing content (
en, es, ar).GitHub OAuth
GitHub OAuth application client ID.
GitHub OAuth application client secret.
OAuth callback URL. Defaults to
{baseUrl}/auth/github/callback.Google OAuth
Google OAuth application client ID.
Google OAuth application client secret.
OAuth callback URL. Defaults to
{baseUrl}/auth/google/callback.Okta OAuth (Enterprise SSO)
Okta domain (e.g.,
your-org.okta.com).Okta OAuth application client ID.
Okta OAuth application client secret.
Weaver Provisioning
Enable Kubernetes-based weaver provisioning.
Kubernetes namespace for weavers.
Path to kubeconfig file.
Interval in seconds between cleanup runs for expired weavers.
Default TTL in hours for weavers.
Maximum TTL in hours for weavers.
Maximum number of concurrent weavers.
Timeout in seconds waiting for weaver to become ready.
Comma-separated list of Kubernetes secret names for pulling private images (e.g.,
ghcr-secret).Audit Sidecar
Enable eBPF audit sidecar for weavers.
Container image for audit sidecar.
Event batch interval in milliseconds.
Maximum local buffer size in bytes (256 MB).
SMTP Email
SMTP server hostname.
SMTP server port.
SMTP username for authentication.
SMTP password for authentication.
Email address to send from (e.g.,
[email protected]).Display name for sent emails.
Use TLS for SMTP connection.
GitHub App Integration
GitHub App ID.
GitHub App private key (PEM format).
GitHub webhook secret for verifying payloads.
GitHub App slug (appears in installation URLs).
GitHub API base URL (for GitHub Enterprise Server).
Search Providers
Google Custom Search Engine
Google API key.
Google Custom Search Engine ID.
Serper.dev
Serper API key.
Background Jobs
Enable email alerts for job failures.
Comma-separated list of email recipients for job failure alerts.
Number of days to retain job run history.
Interval in seconds between session cleanup runs.
Interval in seconds between OAuth state cleanup runs.
Git Repository Maintenance
Enable periodic git maintenance (gc, prune, repack, fsck) on SCM repositories.
Interval in seconds between maintenance runs (24 hours).
Delay in milliseconds between processing each repository.
SCIM Provisioning
Enable SCIM 2.0 provisioning for enterprise IdP integration.
SCIM bearer token shared with your IdP (e.g., Okta).Generate with:
openssl rand -base64 32UUID of the organization to provision users into.
Weaver Secrets System
Path to file containing master encryption key (256-bit, base64-encoded).Generate with:
openssl rand -base64 32 > /run/secrets/loom-master-keyPath to file containing SVID signing key (Ed25519 PEM). Auto-generated if not set.Generate with:
openssl genpkey -algorithm Ed25519 -out /run/secrets/svid-signing-key.pemTTL in seconds for issued SVID tokens (15 minutes).
Verify weaver Pods exist in Kubernetes before issuing SVIDs.
GeoIP Lookup
Path to MaxMind GeoIP database file.
Logging
Log level:
trace, debug, info, warn, error.Structured Logging
Loom uses structured logging with automatic secret redaction:Paths
Base directory for data storage (repos, uploads, etc.).
Directory containing CLI binaries for distribution at
/bin/{platform}.Path to
docs-index.json for documentation search.NixOS Configuration
All environment variables can be set via the NixOS module:configuration.nix
Validation
The server validates configuration on startup:- Dev mode + production: Fails if
LOOM_SERVER_AUTH_DEV_MODE=1andLOOM_SERVER_ENV=production - Missing secrets: Fails if required API keys are not provided
- Invalid paths: Warns if paths don’t exist or aren’t writable
Next Steps
Server Setup
Deploy loom-server
Database Migrations
Manage schema changes