Repository navigation
Releases: aidanpark/openclaw-android
Release list
v0.5.1
Fixed
- On phones whose Android System WebView is old (version 91 and earlier, for example an Android 10 or 11 phone that does not update it), the app showed a blank screen every time it was opened after the installation had finished. The page is now always loaded from inside the app package, as it already was during the installation, so it works with these WebView versions. The app's language setting is kept.
Scripts
This release bundles Script v1.3.0 (available through oa --update), which moves OpenClaw to 2026.10.1 and fixes a gateway start failure on Android systems that do not offer the process namespace file to apps; v1.2.6 adds a time limit to the patch step of oa --update. Stop the gateway before updating. See the CHANGELOG.
Full Changelog: v0.5.0...v0.5.1
v0.5.0
Fixed
- Opening or closing several terminal tabs in quick succession could stop the app and the gateway with it (a list of sessions was changed while it was being read). Terminal sessions are now created on the app's UI thread and the list is safe to read while it changes.
- A command the app runs and stops after its time limit left the programs it had started running in the background; they are now stopped with it.
- Entering and leaving split-screen mode no longer recreates the app's screen and terminal, and a screen that was closed now releases its web view.
- The Settings screen that keeps the app alive in the background showed a status that was up to three seconds old when you came back to it; it now refreshes on return.
- Going back to the app ran the status checks of the Dashboard, About and Status screens more than once; one return now runs one set of checks.
- The result line of a tool install (
TOOL_RESULT ... ok) is no longer shown in the install card.
Changed
- Commands the app runs for itself now carry
OPENCLAW_NO_AUTO_UPDATE=1, as the terminal already does.
Scripts
This release ships with Script v1.2.5 (available through oa --update): the patch that lets OpenClaw move your chat history on Android now finds the files it works on by what they contain instead of by their names, a cut-off OpenClaw install is recognised from OpenClaw's own file list, and the update's check of the new package stops with a message instead of a warning when the package cannot be read. See the CHANGELOG.
Known issue: in one test, the first oa --update after upgrading from Script v1.2.3 stalled in the patch step for several minutes; pressing Ctrl-C and running oa --update again finished in under a minute and left OpenClaw intact. We are looking into it.
Full Changelog: v0.4.6...v0.5.0
v0.4.6
Fixed
- When an install was finished in the terminal while the continue or failure screen was open, going back to the app with the Home button, from the notification shade, from the recent apps screen or after unlocking the phone left that screen in place; it showed the dashboard only after going back from the app's terminal. The screen now checks again whenever you go back to the app and opens the dashboard.
Scripts
This release ships with Script v1.2.4 (available through oa --update): oa --update no longer rewrites more than a hundred OpenClaw files on every run to patch /tmp paths (on a test phone, about 24 seconds before and about 4 seconds now), and it says that it is checking OpenClaw's data before that check, which can take a minute. See the CHANGELOG.
Full Changelog: v0.4.5...v0.4.6
v0.4.5
Added
- The first install runs in the app. After the base system is installed, the app runs the rest of the setup itself and shows its progress in seven steps; no command is typed into the terminal. You can cancel during any of the seven steps. When the setup is done, a button types
openclaw onboardinto the terminal for you (press Enter to start onboarding). Script v1.2.2 or later is needed; with an older setup script the app uses the terminal as before. - Continue the installation. When an earlier setup did not finish (cancelled, the app was closed, or Android stopped it), the app opens a screen that shows why and continues from where it stopped, instead of starting over. If the setup fails, the screen explains the cause (storage, network, a component that could not be installed, another run in progress, and so on).
- Reinstall the base system from the continue and failure screens, after a confirmation that says what is replaced and what is kept. This repairs a broken base system without clearing the app's data; the home folder is not deleted.
Changed
- When the update stopped the gateway, the message now also says to press Enter in the terminal after tapping Gateway on the Dashboard.
- Cancelling a tool install that had already finished now says that it was not cancelled, and the Install & Update and Additional Tools screens refresh their status when you return to them.
- When the setup finishes with a warning that the hard-link patch did not apply completely, the completion screen shows a warning that OpenClaw may be incomplete.
Fixed
- Text typed into a new terminal session before its shell had started (the setup command, a Dashboard command, or the gateway command at boot) could be lost; it is now sent when the shell is ready.
- Closing a terminal session before its shell had started could stop the app and its other processes.
- An interrupted base system replacement could leave the app unable to install until its data was cleared.
- Deleting folders during a base system reinstall followed symbolic links and could delete files outside the base system, such as files in the home folder.
Scripts
This release ships with Script v1.2.3 (already available through oa --update): an OpenClaw install that was cut off is detected and installed again instead of being treated as installed. See the CHANGELOG.
Full Changelog: v0.4.4...v0.4.5
v0.4.4
Added
- Settings → Install & Update: update OpenClaw on Android from the app without typing commands. The screen shows the OpenClaw and Node.js versions, the result of the last update run from the app, and the gateway status. Update runs
oa --updatewith step-by-step progress and explains why an update stopped (another run in progress, gateway running, not enough storage, data check or migration failed, and so on). You can cancel during the first two steps. After that, the update cannot be cancelled because it is replacing files. - The gateway can be stopped from this screen. This works only for a gateway started in the app's terminal; a gateway detached with
nohup,tmuxorsetsidmust be stopped withkill <PID>in that terminal. If the app stops the gateway for an update, the result card says so, and you start it again from the Dashboard. - When an update finishes with a warning that asks you to do something (for example, stopping the gateway and running
openclaw doctor), the result card shows that warning.
Changed
- The Dashboard's Update button opens Settings → Install & Update.
- An update started from the app and a tool install from the app (Settings → Additional Tools) exclude each other, so they no longer run at the same time. With Script v1.2.2 or later, an
oa --updatestarted in the terminal and a tool install from the app also exclude each other.
Removed
- The unused Platforms and Updates screens in Settings, and the update badge on the Settings tab.
Scripts
This release ships with Script v1.2.2 (already available through oa --update): new installs, oa --update and tool installs from the app no longer run at the same time, and they record their outcome for the app. See the CHANGELOG for Script v1.2.0 to v1.2.2.
Full Changelog: v0.4.3...v0.4.4
v0.4.3
Added
- App: Settings → Additional Tools is back. tmux, ttyd, dufs, Android Tools, Playwright, Claude Code, Gemini CLI and Codex CLI can be installed from the app without the terminal. Installs run through the setup script (
post-setup.sh --tools-only) instead of commands the app builds itself: tmux, ttyd, dufs and Android Tools are checked against the signed Termux package list, and the npm-based tools come from the npm registry as before. An install counts as successful only when the script records it as successful and the tool's files are present. A tool whose last install failed, or whose startup check (--version) fails, is shown as "installed but not working" with a Reinstall button, also after the app is restarted. Claude Code and Codex CLI are marked experimental. Installing can be cancelled; the current step finishes first. - App: code-server, OpenCode, the SSH server and Chromium cannot be installed from the app yet, and their cards say so. code-server can be installed from the app's terminal with
oa --install. post-setup.sh --tools-only <id>…installs selected optional tools on an existing installation and writes a result file (used by the app). Only one run at a time;--listprints the supported tools.
Fixed
- App: if the screen is recreated during setup (for example after changing the font size), the setup screen continues showing the running install, or the failure with its Retry button, instead of starting over at 0%.
- Claw app: Android Tools now runs
adb(it failed with a missinglibc++symbol); a newer, signature-checkedlibc++is installed with it, and the original is put back if that fails. - Claw app: Claude Code now runs (its native binary is started through the glibc loader), and Codex CLI installs (its package is marked for Android while this Node.js reports Linux). After
npm install -greinstalls Claude Code, the npm wrapper restores the launcher; installs made before this release get the new wrapper withoa --update. - When a dependency of an optional tool fails to install, the tool itself is no longer extracted half-working.
- Tools screen: after a cancelled or failed npm tool install, a dangling command link left by npm is removed (only a broken link that points into that tool's own package).
oa --backupandoa --restorefind Node.js through the OpenClaw on Android wrapper, so they work in a non-interactive shell.
Changed
oa --restorestops without changing anything if it cannot first save a safety backup of the current data (including when the backup folder cannot be created).oa --restore --force-no-safetyrestores anyway.- App: code-server is no longer offered in the setup wizard; it is installed from the terminal with
oa --install. An older tool selection that still asks for code-server shows a one-line notice instead of a long failing npm install. - App: the app no longer builds its own
apt-get/npm/curlinstall commands for tools. New installs no longer get the unauthenticated-repository options or the https→http downgrade in the app's apt configuration, and existing installs have the two unauthenticated-repository options removed (an existingsources.listkeeps its current address).
Full Changelog: v0.4.2...v0.4.3
v0.4.2
Security
- Verify the signature of the glibc package database before installing glibc, in the Claw app and in Termux. A package list that fails the check is never used; the setup stops with an explanation instead of continuing unsigned. Termux no longer turns off pacman signature checking during the glibc install.
- Claw app: during setup, the Termux package list is verified against its signature, and each downloaded package against its signed checksum, before it is extracted. (Tools installed later from Settings → Tools still use the app's own package manager and are not covered yet.)
Fixed
- App: the dashboard fills in the Node.js, git and OpenClaw versions shortly after setup finishes (it no longer stays blank until the app is reopened) and no longer freezes while it reads them.
- App: a failed setup shows a translated error with a Retry button, and the language buttons in Settings fit on narrow screens.
- App: storage usage no longer hangs when it meets a circular symbolic link, and a broken screen no longer leaves a blank white page.
Changed
- Termux: the glibc install now stops if the pacman keyring cannot be initialized (it used to carry on), and re-running it restores a
pacman.confthat an older installer had relaxed, keeping the previous file aspacman.conf.oa-relaxed. - Claw app: a downloaded setup script or
oathat does not start with#!(for example a captive-portal page) is rejected. - Compatibility note: on a device installed before v1.1.3,
pacman -Qmay print a few signature-related errors. Nothing is affected; runpacman -Syto refresh the package lists and they go away.
Full Changelog: v0.4.1...v0.4.2
v0.4.1
Security
- App: the web view's command bridge now runs only an allow-list of commands, and the web view's input is no longer interpreted by a shell. The terminal-injection bridge methods are removed,
openUrlacceptshttpsonly, and the web view can no longer navigate to external pages. Reported by @3em0. - App: the bootstrap archive is verified against a SHA-256 pinned in the APK before it is extracted, and a failed or tampered download leaves the existing installation untouched. The remote www and bootstrap update channel (already dead) is removed. Reported by @3em0.
- The optional-tool selection file is read as data instead of being sourced as shell, so a crafted file can no longer run commands during setup.
- The npm wrapper refuses global installs of
openclawat any version other than the pinned one (npm install -g openclaw@latestis blocked;oa --updateis the supported way).
Fixed
- App: fix the app replacing the downloaded setup script with the older copy bundled in the APK after the first relaunch, and re-running that outdated copy afterwards. The first launch now records the app version, the script refresh runs off the main thread with timeouts, and a plain offline relaunch keeps the downloaded copy (after an app upgrade, an offline launch falls back to the bundled copy).
- App: fix the app being terminated by an unhandled exception when a command times out.
- App: the dashboard shows the Node.js version again.
- Fix git hanging in the Android app: the git wrapper executed itself forever after setup and the real git binary had been deleted. New installs keep the real binary. Existing app users get git back by running
oa --updateonce; upgrading the app alone does not repair it. - Fix the git wrapper removing a directory you passed to
git clone. After a failed clone it now removes only npm's own temporary clone directories (and empty directories); a directory that has content is never removed. - Download the
oacommand atomically so an interrupted download cannot leave a non-executableoa.
Changed
- The gateway's "update available" notice is turned off during install and update unless you set the option yourself.
- clawdhub is no longer reinstalled on every app setup rerun.
- Dashboard token instructions are documented in the README and troubleshooting guide.
oa --backupandoa --restoreare rewritten: backups now include conversation history and a consistent snapshot of the SQLite state, are created with owner-only permissions, and restore works across Termux and the Claw app. Restore refuses to run while the gateway is running and takes a safety backup first (the latest five are kept). The Claw app now installs the backup scripts, sooa --backupworks there.- Add a Japanese README (thanks @eltociear).
- App: the bootstrap can be downloaded through the
ghfast.topmirror when GitHub is unreachable; the download is accepted only if it matches the pinned SHA-256. The tools screen now recognizes npm tools installed under$PREFIX/binand~/.local/bin, and opening a system settings screen with no handler no longer crashes the app. - Compatibility: backups created by this version use a new archive layout and are restored by this version's
oa --restore; olderoaversions cannot restore them correctly (older backups still restore).
Important for existing app users: upgrading the app alone does not repair a broken git. Run oa --update once in the Claw terminal.
Full Changelog: v0.4.0...v0.4.1
v0.4.0
What's New
🌐 i18n Support
- English, Korean (한국어), Chinese (中文) with auto-detection
- Language selector in Settings
- Chinese README (README.zh.md) with China mirror download link
🔗 Network Resilience
- GitHub mirror fallback for China/restricted networks (ghfast.top, ghproxy.net)
- npm registry auto-switch to npmmirror.com when npmjs.org is unreachable
🛠 Code Quality
- AppLogger centralized logging wrapper
- Resolve all 48 detekt, 43 shellcheck, 125 markdownlint violations
- Unit test infrastructure (JUnit5 + MockK, 22 tests)
- CI code-quality workflow
📦 Dependency Updates
- AGP 8.13.1 → 9.1.0
- JUnit 5.11.4 → 6.0.3
- MockK 1.14.2 → 1.14.9
- actions/cache v4 → v5
- android-actions/setup-android v3 → v4
Full Changelog: v0.3.6...v0.4.0
v0.3.6
Changes
- Fix LD_PRELOAD restore for child processes — resolves
#!/usr/bin/envshebang failures in npm lifecycle scripts - Add compatibility constraint harness (
tests/verify-compat.sh) for preventing circular fix regressions - Sync glibc-compat.js to app assets
- Fix ktlint violations and cross-platform test compatibility
- Existing users: run
oa --updateto apply the fix without reinstalling the app