| name | domino-apps |
| description | Deploy web applications to Domino Data Lab with expertise in React apps (Vite) behind Domino's reverse proxy. Covers app.sh configuration, port configuration, base path handling for SPAs, CI/CD with GitHub Actions, and proxy troubleshooting. Use when deploying apps to Domino, setting up CI/CD pipelines, fixing broken routing, or configuring JavaScript frameworks for Domino's proxy. |
Domino Apps Skill
This skill provides comprehensive knowledge for deploying web applications to Domino Data Lab, with special focus on React applications using Vite.
Key Concepts
Domino App Architecture
Domino apps run in containers behind a reverse proxy that:
- Authenticates users via Domino's auth system
- Strips the URL prefix before forwarding to your app
- Routes traffic to your app container
- Handles infrastructure provisioning, routing, and resource management
Note: Port selection is flexible; port 8888 is no longer required. You can use any port your application prefers.
Critical Configuration Points
- Host Binding: Bind to
0.0.0.0 (not localhost) so Domino can reach your app
- Relative Base Path: Use
base: './' in Vite config for React apps
- app.sh: Entry point script (launch file) that Domino executes
Related Documentation
Quick Start
React with Vite
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
export default defineConfig({
plugins: [react()],
base: './',
server: { host: '0.0.0.0', port: 8888, strictPort: true },
preview: { host: '0.0.0.0', port: 8888, strictPort: true },
})
set -e
cd /mnt/code
npm ci
npm run build
npx serve -s dist -l 8888 --no-clipboard
Streamlit
streamlit run app.py --server.port 8888 --server.address 0.0.0.0
Dash/Flask
python app.py
Environment Variables
Domino provides these environment variables to your app:
| Variable | Description |
|---|
DOMINO_PROJECT_NAME | Current project name |
DOMINO_PROJECT_OWNER | Project owner username |
DOMINO_RUN_ID | Current run identifier |
DOMINO_STARTING_USERNAME | User who started the app |
Inter-App Communication
Domino apps can communicate with each other using bearer token authentication. This is useful for:
- Calling Model APIs from an app
- App-to-app service calls
- Accessing internal Domino services
Getting the Access Token
Domino provides an access token service at localhost:8899:
import requests
API_TOKEN = requests.get("http://localhost:8899/access-token").text
Making Authenticated Requests
import requests
API_TOKEN = requests.get("http://localhost:8899/access-token").text
headers = {
"Authorization": f"Bearer {API_TOKEN}",
"Content-Type": "application/json"
}
payload = {
"query": "Your request data here"
}
try:
resp = requests.post(
"https://your-domino-instance/apps-internal/APP_ID/endpoint",
json=payload,
headers=headers,
timeout=100
)
resp.raise_for_status()
data = resp.json()
print(data)
except requests.exceptions.RequestException as err:
print("API call failed:", err)
Key Points
- Token endpoint:
http://localhost:8899/access-token (only accessible from within Domino)
- Token type: Bearer token for Authorization header
- Use cases: Model API calls, app-to-app communication, internal services
- Timeout: Set appropriate timeouts for long-running requests
API Reference
Before writing or verifying any API call, use the cluster swagger to confirm current endpoint paths and field names. Use public docs for workflow context and field explanations.
API Version Prioritization Rules
- Prioritize the Apps v1 API (
/api/apps/v1) for all apps creation, update, preview, publication, start and stop workflows.
- The Beta API (
/api/apps/beta) is deprecated and maintained solely for backward compatibility. Do not build new functionality against beta endpoints if a v1 equivalent exists.
- Instance Read Operations Exception: Instance read operations (such as fetching active container logs,
realTimeLogs, views, listing active running instances, or issuing an instance-level DELETE) were not migrated to the v1 spec. They remain active exclusively under the /api/apps/beta path.
Rule of Thumb: Use v1 for automating write or publish actions. Fall back to beta for streaming runtime telemetry like logs or views.
Get the cluster base URL: $DOMINO_API_HOST (injected by Domino into every workspace, job, and app).
Fetch the swagger spec:
curl "$DOMINO_API_HOST/assets/public-api.json"
Public docs (workflow context and field explanations):
Blueprint Reference: