Skip to main content
The Rigbox app catalog provides curated, pre-packaged applications that you can install into any workspace with a single API call. Each catalog app is configured with the correct port, subdomain, and systemd service — no manual setup required.

How It Works

When you install a catalog app:
  1. Rigbox downloads and configures the app inside your workspace
  2. A systemd service is created so the app starts automatically and restarts on failure
  3. An app route is created, mapping the app’s port to a *.rigbox.dev subdomain
  4. The app is immediately accessible once installation completes
You manage installed catalog apps with the same endpoints you use for any other app — start, stop, restart, delete, and change visibility.

Available Apps

Browse the catalog to see what’s available.
curl -s https://api.rigbox.dev/api/app-catalog \
  -H "Authorization: Bearer $RIGBOX_API_KEY" | jq
See Browse Catalog for the full response schema.

Catalog Reference

AppCatalog IDPortSubdomainDescription
VS Code Servervscode8443vscodeBrowser-based VS Code with full extension support
Jupyter Labjupyter8888jupyterInteractive notebooks for Python, Julia, R
Marimomarimo8000marimoReactive Python notebooks
Streamlitstreamlit8501streamlitPython data app framework for dashboards
File Browserfilebrowser8080filesWeb-based file manager with upload/download
Excalidrawexcalidraw3000excalidrawCollaborative whiteboard and diagramming
PGWebpgweb8081pgwebPostgreSQL web client with query builder
Chat Starterchat3000chatMinimal chat UI template with OpenAI integration
Subdomains are prefixed with the workspace name. For example, if your workspace app is named my-ws-vscode, the full URL would be https://my-ws-vscode.rigbox.dev.

Installing a Catalog App

Install an app by sending the catalog ID. The endpoint returns a job ID you can use to track installation progress.

Start the installation

curl -X POST https://api.rigbox.dev/api/workspaces/$WORKSPACE_ID/install-app \
  -H "Authorization: Bearer $RIGBOX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "catalog_id": "vscode"
  }'
See Install Catalog App for the full request/response schema.

Track installation progress

Poll the job endpoint to check progress.
curl -s https://api.rigbox.dev/api/workspaces/$WORKSPACE_ID/jobs/$JOB_ID \
  -H "Authorization: Bearer $RIGBOX_API_KEY" | jq
See Get Job Status for the response schema.

Access the installed app

Once completed, the app is running and accessible at its subdomain URL.

Managing Installed Apps

After installation, catalog apps behave like any other app. Use the standard app endpoints to manage them.

Start and Stop

curl -X POST https://api.rigbox.dev/api/apps/$APP_ID/stop \
  -H "Authorization: Bearer $RIGBOX_API_KEY"
See Start App, Stop App, and Restart App for details.

Change Visibility

Catalog apps are private by default. Make them public or share with specific people.
curl -X PUT https://api.rigbox.dev/api/apps/$APP_ID/visibility \
  -H "Authorization: Bearer $RIGBOX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"visibility": "public"}'
See App Visibility for all visibility options.

Delete

Deleting an installed app removes both the route and the systemd service inside the workspace.
curl -X DELETE https://api.rigbox.dev/api/apps/$APP_ID \
  -H "Authorization: Bearer $RIGBOX_API_KEY"
See Delete App for details.

App Details

VS Code Server

A full browser-based VS Code instance with extension support, integrated terminal, and file editing. Runs code-server.
curl -X POST https://api.rigbox.dev/api/workspaces/$WORKSPACE_ID/install-app \
  -H "Authorization: Bearer $RIGBOX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"catalog_id": "vscode"}'
VS Code Server supports installing extensions from the Open VSX registry. Search and install extensions directly from the browser UI.

Jupyter Lab

Interactive notebooks for Python, Julia, R, and more. Supports inline visualizations, markdown cells, and kernel management.
curl -X POST https://api.rigbox.dev/api/workspaces/$WORKSPACE_ID/install-app \
  -H "Authorization: Bearer $RIGBOX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"catalog_id": "jupyter"}'

Marimo

Reactive Python notebooks where cells automatically re-execute when dependencies change. An alternative to Jupyter with a focus on reproducibility.
curl -X POST https://api.rigbox.dev/api/workspaces/$WORKSPACE_ID/install-app \
  -H "Authorization: Bearer $RIGBOX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"catalog_id": "marimo"}'

Streamlit

Build interactive data dashboards and web apps in Python. Write a Python script and Streamlit renders it as a web application.
curl -X POST https://api.rigbox.dev/api/workspaces/$WORKSPACE_ID/install-app \
  -H "Authorization: Bearer $RIGBOX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"catalog_id": "streamlit"}'

File Browser

A web-based file manager with drag-and-drop upload, download, and file editing. Useful for managing files inside the workspace without SSH.
curl -X POST https://api.rigbox.dev/api/workspaces/$WORKSPACE_ID/install-app \
  -H "Authorization: Bearer $RIGBOX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"catalog_id": "filebrowser"}'

Excalidraw

A collaborative whiteboard for sketching diagrams, wireframes, and architecture drawings. Runs locally inside the workspace — no external dependencies.
curl -X POST https://api.rigbox.dev/api/workspaces/$WORKSPACE_ID/install-app \
  -H "Authorization: Bearer $RIGBOX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"catalog_id": "excalidraw"}'

PGWeb

A web-based PostgreSQL client with a query editor, table browser, and export functionality. Useful for inspecting databases running inside the workspace.
curl -X POST https://api.rigbox.dev/api/workspaces/$WORKSPACE_ID/install-app \
  -H "Authorization: Bearer $RIGBOX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"catalog_id": "pgweb"}'

Chat Starter

A minimal chat UI template with OpenAI API integration. Use it as a starting point for building conversational AI applications.
curl -X POST https://api.rigbox.dev/api/workspaces/$WORKSPACE_ID/install-app \
  -H "Authorization: Bearer $RIGBOX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"catalog_id": "chat"}'
Chat Starter requires Node.js, which is available in the base, dev, and full images but not in openclaw. Check your workspace image before installing.

Image Compatibility

Most catalog apps work on all images, but some have dependencies that not every image provides.
Appbasedevfullopenclaw
VS Code ServerYesYesYesYes
Jupyter LabYesYesYesNo (needs Python)
MarimoYesYesYesNo (needs Python)
StreamlitYesYesYesNo (needs Python)
File BrowserYesYesYesYes
ExcalidrawYesYesYesYes
PGWebYesYesYesYes
Chat StarterYesYesYesNo (needs Node.js)
The base image has pre-warmed npm caches for Jupyter, Marimo, Streamlit, and Excalidraw. Installation on base is significantly faster than on other images because dependencies are already downloaded.

Complete Example: Install VS Code and Jupyter

This walkthrough installs both VS Code and Jupyter Lab into a single workspace.
import requests
import time

API_URL = "https://api.rigbox.dev/api"
HEADERS = {"Authorization": f"Bearer {api_key}"}

workspace_id = "your-workspace-id"

# Install VS Code
vscode_result = requests.post(
    f"{API_URL}/workspaces/{workspace_id}/install-app",
    headers=HEADERS,
    json={"catalog_id": "vscode"},
).json()
print(f"VS Code install started — job: {vscode_result['job_id']}")

# Install Jupyter
jupyter_result = requests.post(
    f"{API_URL}/workspaces/{workspace_id}/install-app",
    headers=HEADERS,
    json={"catalog_id": "jupyter"},
).json()
print(f"Jupyter install started — job: {jupyter_result['job_id']}")

# Wait for both to complete
for name, job_id in [("VS Code", vscode_result["job_id"]), ("Jupyter", jupyter_result["job_id"])]:
    while True:
        job = requests.get(
            f"{API_URL}/workspaces/{workspace_id}/jobs/{job_id}",
            headers=HEADERS,
        ).json()
        if job["status"] == "completed":
            print(f"{name} installed successfully")
            break
        elif job["status"] == "failed":
            print(f"{name} installation failed: {job.get('message', '')}")
            break
        time.sleep(3)

print("Both apps installed and accessible at their subdomain URLs.")

Next Steps