---
slug: open-webui
kind: runbook
status: docs-checked
sh: https://insidethemachine.ai/install/open-webui.sh
ps1: https://insidethemachine.ai/install/open-webui.ps1
json: https://insidethemachine.ai/install/open-webui.json
page: https://insidethemachine.ai/setups/open-webui
---

# Install: Open WebUI

A self-hosted, ChatGPT-style interface for Ollama and any OpenAI-compatible endpoint.

**Run status: Not run: commands checked against the official docs only.** Commands checked against the official docs on 2026-10-15. Not run end to end.

**This script:** The wrapper scripts are generated from the site data. Every .sh passed bash -n and shellcheck and ran in plan mode on Linux (Debian 13). Every .ps1 passed the PowerShell parser and chat.ps1 ran in plan, verify and rollback mode under PowerShell 7 on Linux with Windows calls mocked. Not run on macOS or real Windows.

## One command

```bash
curl -fsSL https://insidethemachine.ai/install/open-webui.sh | bash
```

Windows (PowerShell):

```powershell
irm https://insidethemachine.ai/install/open-webui.ps1 | iex
```

Actions: `| bash -s -- plan` (print only), `verify`, `rollback --yes`. Env: ITM_RAM. Read the script first: `curl -fsSL https://insidethemachine.ai/install/open-webui.sh | less`.

Lines marked YOU RUN are not run by the script (servers, interactive apps, your own files). The script prints them at the end, in order.

## Steps

### macOS

Install:

1. **Install Open WebUI**
   - run (macOS only): `brew install python@3.11`
   - run: `python3.11 -m venv ~/.venvs/openwebui && source ~/.venvs/openwebui/bin/activate`
   - run: `pip install open-webui`
   - note: Docker alternative (UI on port 3000):
docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main
2. **Configure (your choices)**
   - YOU RUN (pip install: UI at http://localhost:8080): `open-webui serve`
   - note: Ollama on the same machine is detected at its default address; for a remote Ollama set -e OLLAMA_BASE_URL=... on docker run

Verify:

- `curl -sI http://localhost:8080 | head -1` → expect: HTTP 200 (pip) — use port 3000 for the Docker command
- `docker ps --filter name=open-webui` → expect: container listed as Up (Docker install)

Rollback:

- run: `pip uninstall -y open-webui && rm -rf ~/.venvs/openwebui`
- run: `docker rm -f open-webui && docker volume rm open-webui`

### Linux

Install:

1. **Install Open WebUI**
   - run: `python3.11 -m venv ~/.venvs/open-webui && source ~/.venvs/open-webui/bin/activate`
   - run: `pip install open-webui   # inside a Python 3.11 venv`
   - note: or Docker: same docker run command as macOS
2. **Configure (your choices)**
   - YOU RUN (pip install: UI at http://localhost:8080): `open-webui serve`
   - note: Ollama on the same machine is detected at its default address; for a remote Ollama set -e OLLAMA_BASE_URL=... on docker run

Verify:

- `curl -sI http://localhost:8080 | head -1` → expect: HTTP 200 (pip) — use port 3000 for the Docker command
- `docker ps --filter name=open-webui` → expect: container listed as Up (Docker install)

Rollback:

- run: `pip uninstall -y open-webui && rm -rf ~/.venvs/openwebui`
- run: `docker rm -f open-webui && docker volume rm open-webui`

### Windows (PowerShell, not run by us)

Install:

1. **Install Open WebUI**
   - YOU RUN (run inside a Python venv): `pip install open-webui   # inside a Python 3.11 venv, or use Docker Desktop with the docker run command`

Verify:

- by hand: `curl -sI http://localhost:8080 | head -1` → expect: HTTP 200 (pip) — use port 3000 for the Docker command
- by hand: `docker ps --filter name=open-webui` → expect: container listed as Up (Docker install)

Rollback:

- YOU RUN (macOS/Linux command; do the same by hand): `pip uninstall -y open-webui && rm -rf ~/.venvs/openwebui`
- run: `docker rm -f open-webui && docker volume rm open-webui`
