OpenHands
Generated on 5 Oct 2026 from the OpenHands catalog page
Deploy OpenHands Agent Canvas, an open-source self-hosted control center for AI coding agents and automations. Run agents on your Droplet, connect from the browser, and optionally use DigitalOcean Serverless Inference AI for inference.
What is OpenHands?
OpenHands is the open platform for cloud coding agents. Agent Canvas is the self-hosted developer control center: start conversations, run automations, and work with OpenHands or other ACP-compatible agents across local and remote backends.
- Self-hosted – Agents and settings stay on your Droplet
- Browser UI – Agent Canvas on your droplet IP (Caddy reverse proxy)
- Public mode – Protected by a generated API key (
LOCAL_BACKEND_API_KEY) - DigitalOcean Serverless Inference – Optional one-key setup for OpenAI-compatible models
- Workspace – Projects under
/home/openhands/projects
Key Features
- Always-on agent backend for coding tasks and automations
- Web UI with API-key gate for internet-facing deployments
- Optional DigitalOcean model access key configuration at first login
- Helper scripts for start/stop/restart/status/update and custom domain TLS
- Ubuntu 24.04 LTS with UFW and fail2ban
System Requirements
OpenHands Agent Canvas runs the agent server on the host. Prefer at least 4 GB RAM.
| Use Case | RAM | CPU | Storage |
|---|---|---|---|
| Minimum (single user) | 4 GB | 2 vCPU | 50 GB |
| Recommended | 8 GB | 4 vCPU | 100 GB |
Included System Components
- Ubuntu 24.04 LTS
- OpenHands Agent Canvas (version pinned in the image build; currently 1.18.0)
- Chromium (
chromium-browser) for agent browser tooling - Node.js 24 and uv
- Caddy reverse proxy (ports 80/443 → Agent Canvas on port 8000, which UFW denies from the internet)
- UFW and fail2ban
- Dedicated
openhandssystem user
Software Included
| Package | Version | License |
|---|---|---|
| NodeJS | 22.23.1 | |
| fail2ban | 5.4.1 | GNU General Public License 2.0 |
| caddy | 2.11.2 | Apache License 2.0 |
| OpenHands Agent Canvas | 1.5.0 | Github - OpenHands/agent-canvas |
Creating an App using the Control Panel
Click the Deploy to DigitalOcean button to create a Droplet based on this 1-Click App. If you aren’t logged in, this link will prompt you to log in with your DigitalOcean account.
Creating an App using the API
In addition to creating a Droplet from the OpenHands 1-Click App using the control panel, you can also use the DigitalOcean API. As an example, to create a 4GB OpenHands Droplet in the SFO2 region, you can use the following curl command. You need to either save your API access token to an environment variable or substitute it in the command below.
curl -X POST -H 'Content-Type: application/json' \
-H 'Authorization: Bearer '$TOKEN'' -d \
'{"name":"choose_a_name","region":"sfo2","size":"s-2vcpu-4gb","image":"openhands"}' \
"https://api.digitalocean.com/v2/droplets"Getting Started After Deploying OpenHands
Getting Started
1. Deploy the Droplet
- Select this 1-Click App from the DigitalOcean Marketplace
- Choose a Droplet size (4 GB RAM minimum recommended)
- Add your SSH key
- Optionally set droplet environment variables
MODEL_ACCESS_KEY,INFERENCE_MODEL, andDO_INFERENCE_ROUTER - Create the Droplet
2. Open the Web UI
- Visit
https://your-droplet-ip - Paste the API key shown in the SSH MOTD (also in
/opt/openhands.envasLOCAL_BACKEND_API_KEY)
3. SSH (optional setup wizard)
ssh root@your-droplet-ip
If Serverless Inference was not passed at create time, the first-login wizard can configure a DigitalOcean Serverless Inference model access key. After the key, press Enter for MiniMax M2.5, enter a model id, or R for the Intelligent Inference Router. Create keys at https://cloud.digitalocean.com/model-studio/manage-keys (Inference > Manage > Create Model Access Key).
4. Configure LLM and start working
- In the UI, open Settings > LLM (confirm Serverless Inference settings or add another provider)
- Place code under
/home/openhands/projects - Start a conversation from the home screen
Managing OpenHands
| Action | Command |
|---|---|
| Start | /opt/start-openhands.sh |
| Stop | /opt/stop-openhands.sh |
| Restart | /opt/restart-openhands.sh |
| Status | /opt/status-openhands.sh |
| Update (latest) | sudo /opt/update-openhands.sh |
| Update (specific version) | sudo /opt/update-openhands.sh 1.16.0 |
| List versions | sudo /opt/update-openhands.sh --list |
| Rollback | sudo /opt/update-openhands.sh --rollback (version before last update only) |
| Domain TLS | /opt/setup-openhands-domain.sh |
| Re-run setup | /etc/setup_wizard.sh |
Updating OpenHands
# Install the latest release from npm (default)
sudo /opt/update-openhands.sh
# List recent npm versions without installing
sudo /opt/update-openhands.sh --list
# Install a specific version
sudo /opt/update-openhands.sh 1.16.0
# Roll back to the version from before the last update (OPENHANDS_VERSION_PREVIOUS)
sudo /opt/update-openhands.sh --rollback
The image ships Node.js 24 and Agent Canvas 1.18.0 (default agent-server 1.46.0), so every current Agent Canvas release installs as-is. On older droplets that still have Node 22, the helper upgrades Node before installing Agent Canvas 1.17+.
Before each successful version change, the script stores the prior pin as OPENHANDS_VERSION_PREVIOUS in /opt/openhands.env. --rollback reinstalls that package only — it is not a picker for arbitrary older releases. To install any other pin, use the specific-version command above. Rollback does not undo Agent Canvas config or workspace migrations.
systemd: systemctl {start|stop|restart|status} openhands
Logs: journalctl -u openhands -f
Configuration paths
- Env / secrets:
/opt/openhands.env - API key file:
/home/openhands/.openhands/api-key.txt - Settings:
/home/openhands/.openhands/ - Getting started:
/root/openhands_info.txt
DigitalOcean Serverless Inference
When configured, OpenHands uses the OpenAI-compatible Serverless Inference endpoint:
- Base URL:
https://inference.do-ai.run/v1 - Model form:
openai/<model-id>(defaultopenai/minimax-m2.5) - Intelligent Inference Router: set
DO_INFERENCE_ROUTER=<name>(or pickRin the setup wizard) to useopenai/router:<name>with the same key
Create model access keys at https://cloud.digitalocean.com/model-studio/manage-keys (Inference > Manage > Create Model Access Key).
You can change the model in Settings > LLM or by re-running the setup wizard.
Custom domain (HTTPS)
Point a DNS A record at the droplet, then:
sudo /opt/setup-openhands-domain.sh
Security notes
- Agent Canvas runs as the
openhandsuser and can read/write that user’s filesystem and run commands in that context - Keep
LOCAL_BACKEND_API_KEYprivate; anyone with the key can use the agent - Prefer a DigitalOcean Cloud Firewall restricting SSH (and optionally HTTP/HTTPS) to your IP
- For production, use a custom domain with TLS via
/opt/setup-openhands-domain.sh
Additional Resources
- Product: https://www.openhands.dev/
- Self-hosting: https://docs.openhands.dev/openhands/usage/agent-canvas/backend-setup/vm
- Docs: https://docs.openhands.dev/
- GitHub: https://github.com/OpenHands/agent-canvas
Support
For OpenHands-specific issues: https://docs.openhands.dev/ and the OpenHands community Slack.
For DigitalOcean Droplet issues: https://www.digitalocean.com/support