selfhost.directory

The index of self-hostable projects — ranked, categorized and served with live updates.
Own your data and stop giving it to big tech.

ClawApp logo

Self-host ClawApp

v2.0.0

Mobile web chat client for an OpenClaw AI agent

ReleaseOpen SourceMIT
curl -fsSL https://raw.githubusercontent.com/qingchencloud/clawapp/main/install.sh | bash
Updated5 months ago
LanguageJavaScript
Setup difficultyModerate
MobileNative app
ThemeDark mode
Stars
447
Port
3210 (Port of the ClawApp proxy server / H5 chat page (PROXY_PORT))
Requires
Node.js, OpenClaw Gateway
Connection / login screen where you enter server address and tokenChat screen showing a streamed AI replyQuick command panel above the chat inputSession manager for switching, creating and deleting conversationsSlash command panelSettings and help panel

What is ClawApp?

ClawApp is a mobile-first H5 chat frontend plus WebSocket proxy that bridges your phone's browser to a self-hosted OpenClaw installation. Since OpenClaw's Gateway normally binds only to 127.0.0.1:18789, ClawApp's own server (port 3210 by default) handles the Ed25519 device-signature handshake and forwards the traffic while serving the web UI. Day-to-day use covers typewriter-style streamed answers, photo and file exchange, microphone dictation when served over HTTPS, Markdown with highlighted code, slash-command shortcuts, picking between agents, per-session management, live tool-call status, IndexedDB history that survives dropped connections, and a light/dark/system theme switch with Chinese or English labels. The server can be started with Docker Compose, a one-line curl or PowerShell installer, or plain npm scripts; phone then opens the host IP on 3210, and reaching it away from home is documented through cftunnel, an SSH reverse tunnel or an Nginx TLS proxy. It is MIT-licensed and needs no OpenClaw modifications, but a running OpenClaw Gateway is mandatory, and the Android APK / PWA are optional clients rather than separate servers.

Should you self-host ClawApp?

ClawApp scores 47/100 on selfhost.directory (how scoring works) and ranks #36 of 69 in AI Chat. It has 447 GitHub stars.

It shipped 9 stable releases in the past year. The latest, v2.0.0, came out on 7 May 2026. New versions land roughly every 2 days.

Setup is moderate: expect some configuration beyond a single command. It is MIT-licensed and written mostly in JavaScript.

Its closest alternative on selfhost.directory is ChatGPT Next Web (85/100, 88 905 stars). It scores higher overall, so compare the two before you pick. See ClawApp vs ChatGPT Next Web side by side.

Features

  • Automatic reconnection
  • Bilingual interface
  • Device-signature authentication
  • Image and media send/receive
  • Markdown rendering with code highlighting
  • Multi-agent sessions
  • Multi-user concurrent use
  • Offline message cache
  • Onboarding guide
  • Session Management
  • Slash command palette
  • Streaming chat responses
  • Tool call status display
  • Voice InputNeeds HTTPS; unavailable over plain LAN HTTP.

ClawApp README

How to install ClawApp

Install ClawApp with Docker Compose

Environment variables
PROXY_TOKEN, OPENCLAW_GATEWAY_TOKEN, OPENCLAW_GATEWAY_PASSWORD, PROXY_PORT, OPENCLAW_GATEWAY_URL, MEDIA_ALLOW_ALL, ALLOWED_ORIGINS
git clone https://github.com/qingchencloud/clawapp.git
cd clawapp

在项目根目录创建 .env 文件:

# 手机连接时的密码(自己设一个)
PROXY_TOKEN=my-secret-token-123

# OpenClaw Gateway 的 Token(在 ~/.openclaw/gateway.yaml 里找)
OPENCLAW_GATEWAY_TOKEN=你的gateway-token

启动:

docker compose up -d --build

Under Docker the Gateway address automatically uses host.docker.internal to reach the host machine.

How to configure ClawApp

  • ALLOWED_ORIGINS额外 CORS 白名单,逗号分隔

    额外 CORS 白名单,逗号分隔

  • MEDIA_ALLOW_ALL0设为 `1` 允许访问任意路径的媒体文件(默认仅 `/tmp/` 和 `/var/folders/`)

    设为 `1` 允许访问任意路径的媒体文件(默认仅 `/tmp/` 和 `/var/folders/`)

  • OPENCLAW_GATEWAY_PASSWORDGateway 密码认证(Tailscale Funnel 场景,优先级高于 token)

    Gateway 密码认证(Tailscale Funnel 场景,优先级高于 token)

  • OPENCLAW_GATEWAY_TOKENGateway 认证 token

    Gateway 认证 token

  • OPENCLAW_GATEWAY_URLws://127.0.0.1:18789Gateway 地址(Docker 下自动设为 `host.docker.internal`)

    Gateway 地址(Docker 下自动设为 `host.docker.internal`)

  • PROXY_PORT3210代理服务端端口

    代理服务端端口

  • PROXY_TOKENH5 客户端连接密码

    H5 客户端连接密码

ClawApp releases & version history

FAQ

Why is the nvm-installed Node.js missing after a PM2 reboot?

nvm's node is only on PATH after sourcing it, so configure PM2 startup using node's absolute path, or symlink the node, npm and pm2 binaries into /usr/local/bin.

Can it be deployed on a server that has no OpenClaw?

Yes, as long as you tunnel the Gateway port back to the machine actually running it, for example an SSH local forward of 127.0.0.1:18789, so the remote ClawApp can connect over ws://127.0.0.1:18789.

Why can't I reach it after deploying to a remote server?

Open port 3210 in the host firewall and in the cloud security group, confirm the service is listening, and remember the OpenClaw Gateway must also run there or the page loads but chatting fails.

Why does PM2 keep restarting the service?

PM2 restarts a crashed process, and the server exits immediately if the Gateway is not running or the token is wrong. Verify the Gateway responds and check the token in server/.env, then inspect the PM2 logs.

What causes EADDRINUSE on startup?

Port 3210 is already taken, typically by an earlier PM2 or nohup process or a still-running Docker container; stop that process and confirm the port is free before starting again.

What if npm install times out during the Docker build?

Point npm at a mirror registry inside the Dockerfile before installing, or skip Docker and run the Node build locally when the network to the default registry is slow.

How can several languages be added?

Edit h5/src/i18n.js to add a new language pack and then add the matching button in settings.js.

Why does the WebSocket disconnect often?

The server sends a 30-second heartbeat and the client an application-level one every 25 seconds, so if drops persist check your reverse proxy timeout (above 60s) and add -o ServerAliveInterval=15 for SSH tunnels.

Do I have to modify OpenClaw to use ClawApp?

No. It works with stock OpenClaw without plugins, config edits or extra ports; as long as the Gateway runs on its default address you only fill the token into .env.

Can several people use it at the same time?

Yes. Each client connection gets its own Gateway session while all of them share the single OpenClaw instance.

Why does the voice input button do nothing?

Browsers only expose the microphone in a secure context, so over plain HTTP on the LAN the button reports that HTTPS is needed. Running `cftunnel quick 3210` gives you an HTTPS tunnel to enable it.

Why can't my phone open the page?

Make sure the phone is on the same WiFi, that port 3210 is allowed through the computer's firewall, and that you use the machine's LAN IP rather than localhost.

Why does it stay on "connecting" or return 502 Bad Gateway?

Check that the OpenClaw Gateway is running and that OPENCLAW_GATEWAY_TOKEN is correct. A first connection must also be approved as a device on the Gateway host with the openclaw device pairing commands, and under Docker the Gateway URL should be ws://host.docker.internal:18789.

More in AI Chat

Rate this project

Click to rate — no account needed.

0 comments

Posting as guest
Loading comments…