For operators. This page describes server deployment modes. If you are an end user who wants to import a GitHub repository into an existing Oxy instance, use the Workspaces page in the UI — no server configuration is required on your end.
Overview
Oxy supports two deployment modes:- Multi-workspace mode (Default) — Cloud-native deployment with centralized workspace management. Multiple isolated workspaces share a single server instance.
- Single-workspace mode (
--local) — Traditional deployment for local development. The server serves the current directory as the only workspace.
Comparison
| Feature | Multi-workspace (default) | Single-workspace (--local) |
|---|---|---|
| Workspace Source | Cloned from GitHub or created via UI | Current working directory |
| File Editing | Full IDE editing capabilities | Full IDE editing capabilities |
| Workspace Count | Unlimited, managed via UI | One per server instance |
| Configuration | Environment variables + database | config.yml in workspace directory |
| Authentication | Configurable (required for teams) | Configurable (optional) |
| Use Case | Cloud deployments, SaaS, teams | Development, self-hosted, single user |
Multi-workspace Mode (Default)
Starting the server
How it works
- Workspace root: On startup, Oxy creates
$OXY_STATE_DIR/workspaces/and scans it for existing workspaces. - GitHub import: Users create workspaces by importing a GitHub repository. The repo is cloned into the workspace root.
- Workspace activation: Users switch between workspaces via the Workspaces page (
/workspaces). The active workspace determines which agents, workflows, and data are available. - File editing: The IDE allows full read/write access to workspace files. Changes can be committed and pushed via the built-in Git panel.
Required environment variables
If
OXY_OWNER is not set and authentication is enabled, every authenticated
user is treated as an admin. This is fine for single-user installs but
should be set explicitly for team deployments. The owner can then grant Admin
access to other users through the UI.GitHub App setup
The GitHub integration uses a GitHub App (not personal OAuth) to import repositories. See the GitHub App Setup guide for a complete step-by-step walkthrough, including how to create the app, generate keys, and configure callback URLs. Quick summary:- Create a GitHub App with Contents (Read & Write), Metadata (Read), and Administration (Read & Write) permissions
- Generate a private key and note your App ID, App Slug, Client ID, and Client Secret
- Set the environment variables listed above
- Install the app on your organization or user account
https://your-domain.com/github/callback) is derived automatically from the browser request’s Origin header — no hardcoding needed.
Workspace management
Users manage workspaces at/workspaces:
- Import from GitHub — clone a repository and create a new workspace
- Create blank — start with an empty workspace
- Demo workspace — pre-loaded with sample data for exploration
- Activate — switch to a different workspace
- Rename / Delete — manage existing workspaces
API endpoints
Single-workspace Mode (--local)
--local mode the server serves the current working directory as the sole workspace. Git sync is disabled — workspace files are assumed to already exist on disk.
When to use --local
- Local development with files already on disk
- Self-hosted single-user deployments
- CI/CD pipelines running against a checked-out repo
- Environments where workspace management via the UI is not needed
Configuration
Local mode readsconfig.yml from the workspace directory:
Kubernetes Deployment (Helm)
Docker
AWS ECS
Authentication
Both modes support the same authentication methods:| Method | Environment variables required |
|---|---|
| Magic link (email) | MAGIC_LINK_SECRET, SMTP config |
| Google OAuth | GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET |
| Okta OAuth | OKTA_CLIENT_ID, OKTA_CLIENT_SECRET, OKTA_DOMAIN |
| GitHub (workspace import only) | GITHUB_* vars above |
Troubleshooting
Workspaces not appearing after restart Oxy scans$OXY_STATE_DIR/workspaces/ on startup and registers any subdirectories containing config.yml. If a workspace directory exists but is missing config.yml, it won’t be registered.
GitHub callback redirects to wrong domain
The OAuth callback URL is derived from the Origin header of the browser request — no hardcoding is needed. Ensure your reverse proxy forwards the Origin header to the Oxy backend.
Database connection errors
config.yml not found in --local mode
--enterprise flag requires ClickHouse: