Prerequisites
- Docker and Docker Compose v2 installed (Get Docker). All commands use
docker compose(with a space). If you have an older installation, replace withdocker-compose. - 4GB+ RAM available
- An LLM API key (OpenAI, Anthropic, Azure, Gemini, or Bedrock)
Quick start
1. Clone the repository
2. Configure environment variables
Copy the example environment file and configure your LLM provider:.env and set your LLM provider. Here’s an example for OpenAI:
.env
3. Configure the frontend
Copy the frontend environment file:VITE_SKYVERN_API_KEY after the first startup.
4. Start the services
- postgres: Database on port 5432 (internal only)
- skyvern: API server on port 8000
- skyvern-ui: Web interface on port 8080
5. Get your API key
Wait for all services to be healthy before continuing:healthy in the STATUS column. The skyvern container runs database migrations and generates credentials on first startup. This takes 1-2 minutes.
Once healthy, retrieve your API key:
.streamlit path is a legacy artifact. The credentials inside are standard Skyvern API keys.
You’ll see output like:
host value uses the Docker-internal hostname skyvern. From your machine, use http://localhost:8000 instead. You only need the cred value. This is your API key.
6. Update frontend configuration
Add your API key to the frontend environment:skyvern-frontend/.env
7. Verify the installation
Open http://localhost:8080 in your browser. You should see the Skyvern dashboard. Test the API by listing workflows (should return an empty array on fresh install):The API accepts requests on both
/v1/ and /api/v1/. The frontend uses /api/v1 for backward compatibility. New integrations should use /v1/.Understanding the services
The Docker Compose file defines three services that work together:| Service | Image | Ports | Purpose |
|---|---|---|---|
postgres | postgres:14-alpine | 5432 (internal) | Stores tasks, workflows, credentials, and run history |
skyvern | public.ecr.aws/skyvern/skyvern | 8000, 9222 | API server + embedded browser |
skyvern-ui | public.ecr.aws/skyvern/skyvern-ui | 8080, 9090 | Web dashboard and artifact server |
skyvern container includes Playwright with Chromium. The browser runs inside the same container as the API server. No separate browser service is needed.
Data volumes
Docker Compose mounts several directories for persistent storage:| Local path | Container path | Contents |
|---|---|---|
./postgres-data | /var/lib/postgresql/data | Database files |
./artifacts | /data/artifacts | Extracted data, screenshots |
./videos | /data/videos | Browser session recordings |
./har | /data/har | HTTP Archive files for debugging |
./log | /data/log | Application logs |
./.streamlit | /app/.streamlit | Generated API credentials |
Environment variables reference
The.env file controls the Skyvern server. Here are the most important variables grouped by purpose.
LLM Configuration
Configure at least one LLM provider. See LLM Configuration for all providers.Browser settings
Task execution
Database
The database connection is set indocker-compose.yml, not .env:
postgres service.
Common operations
View logs
Restart after configuration changes
Stop all services
Update to latest version
Reset everything (including database)
Exposing to the network
By default, Skyvern only accepts connections from localhost. To expose it on your network:Option 1: Bind to all interfaces
Editdocker-compose.yml to change the port bindings:
Option 2: Use a reverse proxy
For production deployments, put Skyvern behind nginx or Traefik:skyvern-frontend/.env
Troubleshooting
Container exits immediately
Container exits immediately
Check the logs for the failing service:Common causes:
- Missing or invalid LLM API key: look for LLM-related errors in logs
- Database connection failed: check if
postgresservice is healthy withdocker compose ps
API returns "Invalid credentials" (403)
API returns "Invalid credentials" (403)
The API key is missing, malformed, or doesn’t match the organization. Verify:
- The
x-api-keyheader is included in your request - The key matches exactly what’s in
.streamlit/secrets.toml - No extra whitespace or newlines in the key
API returns "Could not validate credentials" (403)
API returns "Could not validate credentials" (403)
The API key format is invalid (JWT decode failed). This usually means:
- The key was truncated or corrupted during copy-paste
- You’re using an API key from a different Skyvern installation
UI shows blank page or connection errors
UI shows blank page or connection errors
Check that After updating, restart the UI:
skyvern-frontend/.env has the correct values:Task fails with "Unknown browser type"
Task fails with "Unknown browser type"
The
BROWSER_TYPE environment variable has an invalid value. Valid options:chromium-headful: Browser with visible window (default)chromium-headless: No visible windowcdp-connect: Connect to external Chrome
Task fails with "Context window exceeded"
Task fails with "Context window exceeded"
The page content is too large for the LLM. Try:
- Simplifying your prompt
- Starting from a more specific URL
- Using a model with a larger context window
Next steps
LLM Configuration
Configure OpenAI, Anthropic, Azure, Ollama, and other providers
Browser Configuration
Customize browser settings, locales, and connect to external Chrome
Storage Configuration
Store artifacts in S3 or Azure Blob instead of local disk
Proxy Setup
Configure proxies to avoid bot detection

