seo(site): ship comparison, vs-termux, claude-code-android pages + internal links

3 long-tail pages targeting 'opencode vs chatgpt/copilot', 'vs termux',
'claude code on android'. Added to sitemap, footer nav, in-content links
from landing + guide + troubleshooting. All have canonical + install CTAs.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
engineer
2026-06-08 04:42:20 -07:00
parent fb03a9af47
commit 6232430fe6
7 changed files with 1465 additions and 0 deletions

View File

@@ -0,0 +1,566 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Run Claude Code on Android — OpenCode Mobile</title>
<meta name="description" content="Use Claude Sonnet, Opus, or Haiku as your AI coding engine on Android. OpenCode Mobile connects to an opencode server powered by Claude — full agent, streaming responses, diff viewer, from your phone." />
<meta name="keywords" content="claude code android, run claude code on android, use claude sonnet on android phone, claude code mobile, anthropic claude android app, claude ai coding android, claude opus android coding, opencode claude android" />
<meta name="theme-color" content="#3b82f6" />
<link rel="canonical" href="https://dzianisv.github.io/opencode-mobile/claude-code-android/" />
<link rel="icon" type="image/png" href="../fdroid/repo/icons/icon.png" />
<!-- Open Graph -->
<meta property="og:type" content="article" />
<meta property="og:site_name" content="OpenCode Mobile" />
<meta property="og:title" content="Run Claude Code on Android — OpenCode Mobile" />
<meta property="og:description" content="Use Claude Sonnet, Opus, or Haiku as your AI coding engine on Android. OpenCode Mobile connects to an opencode server powered by Claude — full agent, streaming responses, diff viewer, from your phone." />
<meta property="og:url" content="https://dzianisv.github.io/opencode-mobile/claude-code-android/" />
<meta property="og:image" content="https://dzianisv.github.io/opencode-mobile/og.png" />
<!-- Twitter -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Run Claude Code on Android — OpenCode Mobile" />
<meta name="twitter:description" content="Use Claude Sonnet, Opus, or Haiku as your AI coding engine on Android. OpenCode Mobile + opencode server = Claude Code from your phone." />
<meta name="twitter:image" content="https://dzianisv.github.io/opencode-mobile/og.png" />
<!-- Structured data: BreadcrumbList -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "OpenCode Mobile", "item": "https://dzianisv.github.io/opencode-mobile/" },
{ "@type": "ListItem", "position": 2, "name": "Claude Code on Android", "item": "https://dzianisv.github.io/opencode-mobile/claude-code-android/" }
]
}
</script>
<!-- Structured data: Article -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "Run Claude Code on Android — OpenCode Mobile",
"description": "How to use Claude Sonnet, Opus, or Haiku as an AI coding agent on your Android phone via OpenCode Mobile and an opencode server.",
"url": "https://dzianisv.github.io/opencode-mobile/claude-code-android/",
"datePublished": "2026-06-05",
"dateModified": "2026-06-05",
"author": { "@type": "Organization", "name": "VIBE TECHNOLOGIES, LLC" },
"publisher": { "@type": "Organization", "name": "OpenCode Mobile" }
}
</script>
<!-- Structured data: FAQPage -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "Can I run Claude Code on Android?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Yes. OpenCode Mobile is a native Android app that connects to an opencode server configured to use Claude (Sonnet, Opus, Haiku, or any Anthropic model). You get a full AI coding agent experience — streaming responses, file diffs, tool call approval — from your Android phone. Anthropic does not publish an official Claude Code Android app; OpenCode Mobile is the practical alternative."
}
},
{
"@type": "Question",
"name": "Which Claude models does OpenCode Mobile support?",
"acceptedAnswer": {
"@type": "Answer",
"text": "OpenCode Mobile works with any model that your opencode server supports. OpenCode supports the full Anthropic model family including Claude Sonnet (claude-sonnet-4-5, claude-3-5-sonnet-20241022), Claude Opus (claude-opus-4), and Claude Haiku. You configure the model on the server with your own Anthropic API key — the app streams whatever the server produces."
}
},
{
"@type": "Question",
"name": "Do I need an Anthropic API key?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Yes — to use Claude models you need an Anthropic API key, which you configure on your opencode server (not in the app). You can get one at console.anthropic.com. OpenCode also supports other providers (OpenAI, Gemini, local models via Ollama) so you can switch models on the server without reinstalling anything."
}
},
{
"@type": "Question",
"name": "Is this the official Claude Code app for Android?",
"acceptedAnswer": {
"@type": "Answer",
"text": "No — OpenCode Mobile is an independent open-source project, not an official Anthropic product. It connects to the open-source opencode agent (github.com/sst/opencode), which supports Claude as one of its AI backends. Anthropic does not publish an official Claude Code mobile app as of mid-2026."
}
}
]
}
</script>
<style>
:root{--bg:#0b0f17;--bg-soft:#121826;--card:#161d2e;--border:#243049;--text:#e6ebf5;--muted:#9aa6be;--accent:#3b82f6;--accent-2:#2563eb;}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Helvetica Neue",Arial,sans-serif;background:var(--bg);color:var(--text);line-height:1.6;-webkit-font-smoothing:antialiased;}
a{color:var(--accent);text-decoration:none}
a:hover{text-decoration:underline}
.wrap{max-width:880px;margin:0 auto;padding:0 20px}
section{padding:36px 0;border-top:1px solid var(--border)}
section:first-of-type{border-top:none}
h1,h2,h3{line-height:1.25;margin:0 0 .5em}
h1{font-size:2.1rem}
h2{font-size:1.4rem;margin-top:.2em}
h3{font-size:1.1rem;margin-top:1.4em}
code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;background:var(--bg-soft);border:1px solid var(--border);border-radius:6px;padding:2px 6px;font-size:.9em;word-break:break-all;}
pre{background:var(--bg-soft);border:1px solid var(--border);border-radius:10px;padding:14px 16px;overflow-x:auto;}
pre code{background:none;border:none;padding:0;word-break:normal}
.crumbs{font-size:.9rem;color:var(--muted);padding-top:24px}
.crumbs a{color:var(--muted)}
.crumbs a:hover{color:var(--accent)}
.lead{font-size:1.12rem;color:var(--muted)}
.muted{color:var(--muted)}
ul li,ol li{margin-bottom:6px}
/* Feature list */
.features{list-style:none;padding:0;margin:0;display:grid;gap:14px;grid-template-columns:1fr}
.features li{background:var(--card);border:1px solid var(--border);border-radius:12px;padding:16px 18px}
.features b{color:var(--text)}
.features span{color:var(--muted);display:block;font-size:.95rem}
/* Cards */
.card{background:var(--card);border:1px solid var(--border);border-radius:12px;padding:20px 22px;margin:16px 0}
.card h3{margin-top:0;font-size:1.05rem}
/* Steps block */
.steps-block{background:var(--bg-soft);border:1px solid var(--border);border-radius:10px;padding:18px 22px;margin:16px 0}
.steps-block h3{margin-top:0;font-size:1rem;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}
.steps-block ol{margin:0;padding-left:1.3em}
.steps-block li{margin-bottom:10px}
/* Note */
.note{background:var(--bg-soft);border:1px solid var(--border);border-left:3px solid var(--accent);border-radius:10px;padding:16px 18px;color:var(--muted)}
.note strong{color:var(--text)}
/* Model table */
.table-wrap{overflow-x:auto;margin:24px 0}
table{width:100%;border-collapse:collapse;font-size:.97rem}
thead tr{background:var(--card)}
th,td{padding:11px 14px;border:1px solid var(--border);text-align:left;vertical-align:top}
th{color:var(--muted);font-weight:600;font-size:.88rem;text-transform:uppercase;letter-spacing:.03em}
td:first-child{font-weight:500}
.badge{display:inline-block;padding:2px 8px;border-radius:4px;font-size:.8rem;font-weight:600}
.badge-fast{background:#1e3a5f;color:#60a5fa}
.badge-smart{background:#1e3a2a;color:#4ade80}
.badge-cheap{background:#3a2a1e;color:#fbbf24}
/* CTA */
.cta-box{background:var(--card);border:1px solid var(--border);border-left:3px solid var(--accent);border-radius:12px;padding:22px 24px;margin:28px 0;display:flex;flex-wrap:wrap;align-items:center;gap:16px;justify-content:space-between}
.cta-box p{margin:0;font-size:1.05rem}
.btn{display:inline-block;background:var(--accent);color:#fff;font-weight:600;padding:10px 22px;border-radius:8px;font-size:.97rem;white-space:nowrap}
.btn:hover{background:var(--accent-2);text-decoration:none}
.btn-ghost{background:transparent;border:1px solid var(--border);color:var(--text)}
.btn-ghost:hover{border-color:var(--accent);background:transparent}
/* FAQ */
.faq details{background:var(--card);border:1px solid var(--border);border-radius:12px;padding:0 18px;margin-bottom:12px}
.faq summary{cursor:pointer;padding:16px 0;font-weight:600;list-style:none}
.faq summary::-webkit-details-marker{display:none}
.faq summary::after{content:"+";float:right;color:var(--accent);font-weight:700}
.faq details[open] summary::after{content:"\2212"}
.faq details[open] summary{border-bottom:1px solid var(--border)}
.faq details p{color:var(--muted);margin:14px 0 16px}
footer{border-top:1px solid var(--border);padding:32px 0 48px;text-align:center;color:var(--muted);font-size:.9rem;}
footer a{margin:0 8px}
@media(min-width:680px){h1{font-size:2.5rem}.features{grid-template-columns:1fr 1fr}}
</style>
</head>
<body>
<div class="wrap">
<nav class="crumbs" aria-label="Breadcrumb">
<a href="../">OpenCode Mobile</a> &rsaquo; Claude Code on Android
</nav>
</div>
<main>
<section>
<div class="wrap">
<h1>Run Claude Code on Android — OpenCode Mobile</h1>
<p class="lead">
Anthropic's Claude is one of the most capable AI coding models available. If you've been
searching for a way to use Claude Code on your Android phone — to review PRs, hotfix bugs,
or write code from anywhere — OpenCode Mobile is the answer. It connects to an
<a href="https://github.com/sst/opencode">opencode</a> server configured with your
Anthropic API key and gives you a full native Android interface to Claude's coding abilities.
</p>
<div class="cta-box">
<p>Free and open-source. Bring your own Anthropic API key.</p>
<a class="btn" href="../download/">Download for Android</a>
</div>
</div>
</section>
<section id="how-it-works">
<div class="wrap">
<h2>How Claude Code works on Android</h2>
<p>
Anthropic does not publish an official Claude Code mobile app for Android. The way to get
Claude's coding capabilities on your phone is to connect to an agentic runtime that uses
Claude as its AI engine — and that's exactly what OpenCode Mobile does.
</p>
<p>
Here's the architecture in plain terms:
</p>
<ol>
<li>You run <strong>opencode</strong> (the open-source AI coding agent) on your machine — laptop, desktop, or VPS.</li>
<li>You configure opencode to use <strong>Claude</strong> (Sonnet, Opus, Haiku, or any Anthropic model) with your own Anthropic API key.</li>
<li><strong>OpenCode Mobile</strong> on your Android phone connects to that server over the network.</li>
<li>You chat with Claude from your phone — the app streams responses in real time, shows diffs of file changes, and lets you approve or reject what the agent does.</li>
</ol>
<p>
The result is the full power of Claude's coding abilities — multi-file context, shell command
execution, web search, test running — controlled from a native Android app designed for
touch screens.
</p>
<div class="note">
<strong>Note on terminology:</strong> "Claude Code" is Anthropic's own CLI tool.
OpenCode Mobile uses the open-source <em>opencode</em> agent (by SST), which supports
Claude as one of its AI backends. The experience is similar — an AI agent that reads your
code, runs commands, and proposes changes — but the runtime is opencode, not Anthropic's CLI.
</div>
</div>
</section>
<section id="claude-models">
<div class="wrap">
<h2>Which Claude models can I use?</h2>
<p>
OpenCode supports the full Anthropic model family. You pick the model in the opencode server
config file; the app streams whatever the server produces. Here's how the main options compare
for coding tasks:
</p>
<div class="table-wrap">
<table>
<thead>
<tr>
<th>Model</th>
<th>Best for</th>
<th>Speed</th>
<th>Cost</th>
</tr>
</thead>
<tbody>
<tr>
<td>Claude Sonnet 4 / 3.5<br><span style="font-weight:400;color:var(--muted);font-size:.9rem">claude-sonnet-4-5</span></td>
<td><span class="badge badge-smart">Most coding tasks</span> — strong reasoning, large context, good tool use</td>
<td>Fast</td>
<td>Mid</td>
</tr>
<tr>
<td>Claude Opus 4<br><span style="font-weight:400;color:var(--muted);font-size:.9rem">claude-opus-4</span></td>
<td><span class="badge badge-smart">Complex refactors</span> — highest reasoning capability for hard architectural problems</td>
<td>Slower</td>
<td>Higher</td>
</tr>
<tr>
<td>Claude Haiku 3.5<br><span style="font-weight:400;color:var(--muted);font-size:.9rem">claude-3-5-haiku-20241022</span></td>
<td><span class="badge badge-fast">Quick edits &amp; questions</span> — fastest responses, lowest cost, great for simple tasks</td>
<td>Very fast</td>
<td>Low</td>
</tr>
</tbody>
</table>
</div>
<p>
You can switch models by editing the opencode config on the server — no app update required.
OpenCode also supports OpenAI (GPT-4o, o3), Google Gemini, AWS Bedrock, and local models
via Ollama, so you're not locked in to Anthropic.
</p>
</div>
</section>
<section id="what-you-get">
<div class="wrap">
<h2>What you get with Claude on Android</h2>
<p>
This is not a chat window where you paste code and copy suggestions back. OpenCode Mobile
with Claude gives you a full coding agent that:
</p>
<ul class="features">
<li>
<b>Reads your entire codebase</b>
<span>Claude gets full file-tree access via the opencode server. Ask it to trace a bug across 20 files and it will — no pasting required.</span>
</li>
<li>
<b>Writes and applies changes</b>
<span>Claude proposes diffs; you see them in the app's inline viewer and approve or reject per file. Changes apply to the real filesystem on your server.</span>
</li>
<li>
<b>Runs shell commands</b>
<span>Need to run tests, build the project, or check a log? Claude can execute shell commands on your machine via the opencode tool-call system.</span>
</li>
<li>
<b>Streams token by token</b>
<span>Responses stream live to your phone — you see Claude "thinking" in real time, not a long wait followed by a wall of text.</span>
</li>
<li>
<b>Works across sessions</b>
<span>Sessions persist on the server. Pick up a long coding conversation exactly where you left off, even if you closed the app or switched networks.</span>
</li>
<li>
<b>Protects your API key</b>
<span>Your Anthropic key lives on the server, not the phone. The app stores only your server URL and access password in the Android Keystore.</span>
</li>
</ul>
</div>
</section>
<section id="setup">
<div class="wrap">
<h2>Setting up Claude on Android: step by step</h2>
<div class="steps-block">
<h3>Step 1 — Install opencode on your machine</h3>
<ol>
<li>Install Node.js 20+ if you don't already have it.</li>
<li>Install opencode globally:
<pre style="margin-top:8px"><code>npm install -g opencode-ai</code></pre>
</li>
</ol>
</div>
<div class="steps-block">
<h3>Step 2 — Configure Claude as the AI provider</h3>
<ol>
<li>Get an Anthropic API key from <a href="https://console.anthropic.com" target="_blank" rel="noopener">console.anthropic.com</a>.</li>
<li>Create or edit <code>~/.config/opencode/config.json</code>:
<pre style="margin-top:8px"><code>{
"provider": {
"anthropic": {
"apiKey": "sk-ant-your-key-here"
}
},
"model": "claude-sonnet-4-5"
}</code></pre>
</li>
<li>Or set it as an environment variable if you prefer not to write the key to disk:
<pre style="margin-top:8px"><code>export ANTHROPIC_API_KEY=sk-ant-your-key-here</code></pre>
</li>
</ol>
</div>
<div class="steps-block">
<h3>Step 3 — Start the opencode server</h3>
<ol>
<li>Start the server, binding to all interfaces so your phone can reach it:
<pre style="margin-top:8px"><code>OPENCODE_SERVER_PASSWORD=yourpassword opencode serve --hostname 0.0.0.0 --port 4096</code></pre>
</li>
<li>From your phone's browser, verify: <code>http://&lt;machine-ip&gt;:4096/global/health</code> should return <code>{"healthy":true}</code>.</li>
</ol>
</div>
<div class="steps-block">
<h3>Step 4 — Make the server reachable from anywhere</h3>
<ol>
<li>Install <a href="https://tailscale.com" target="_blank" rel="noopener">Tailscale</a> on both your machine and your Android phone (free tier works).</li>
<li>Note your machine's Tailscale IP (e.g. <code>100.x.x.x</code>) from the Tailscale app.</li>
<li>Your server URL becomes: <code>http://100.x.x.x:4096</code></li>
</ol>
<p style="margin:8px 0 0;color:var(--muted)">Alternatives: same LAN Wi-Fi, Cloudflare Tunnel, ngrok. See the <a href="../guide/">full guide</a> for details on each.</p>
</div>
<div class="steps-block">
<h3>Step 5 — Install OpenCode Mobile and connect</h3>
<ol>
<li>On your phone, install OpenCode Mobile via <a href="../download/">F-Droid or direct APK</a>.</li>
<li>Tap <strong>Add Connection</strong>.</li>
<li>Enter your server URL (<code>http://100.x.x.x:4096</code>) and the password you set.</li>
<li>Tap <strong>Connect</strong>. You're now running Claude Code on Android.</li>
</ol>
</div>
<p>
Total setup time: about 15 minutes. After that, opening a new coding session with Claude
from your phone takes seconds.
</p>
</div>
</section>
<section id="use-cases">
<div class="wrap">
<h2>What people use Claude on Android for</h2>
<div class="card">
<h3>Code review anywhere</h3>
<p>
Get a review request while away from your desk. Open OpenCode Mobile, connect, and ask
Claude to pull the branch, summarize the changes, and flag anything risky. Claude reads
the full diff from your machine — not just what you paste — and explains it in plain English.
You can drill in with follow-up questions, ask for specific suggestions, and even apply
fixes from your phone before you get back to a laptop.
</p>
</div>
<div class="card">
<h3>Debugging production incidents</h3>
<p>
Something goes wrong at 11pm and you're not at your computer. Open the app, describe
the symptom, and let Claude locate the relevant code, trace the execution path, and
propose a fix. You review the diff on your phone, approve it, and your CI pipeline kicks
off — all without a laptop. Claude's strong reasoning makes it particularly good at
connecting dots across multiple files and log outputs.
</p>
</div>
<div class="card">
<h3>Writing code during idle time</h3>
<p>
Commuting, waiting in a queue, between meetings. Short bursts of directed AI coding can
scaffold a new feature, write tests for an existing function, or refactor a messy module.
Claude handles the actual code; you approve the diffs. The streaming UI makes it feel
responsive even on a mobile connection.
</p>
</div>
<div class="card">
<h3>Learning a new codebase</h3>
<p>
Onboarding to a new project or returning to old code after months away? Claude with full
file access can map the architecture, explain how a function is called, trace data flow
from endpoint to database, and answer "why is this done this way?" questions by reading
the actual code — not a stale summary you typed into a chat.
</p>
</div>
<div class="card">
<h3>Writing and running tests</h3>
<p>
Ask Claude to write unit tests for a function. It reads the function, writes the tests,
runs them via the opencode shell tool, sees the failures, and iterates — all without you
doing anything except reviewing the final output. From your phone, you get the full
red-green-refactor loop.
</p>
</div>
</div>
</section>
<section id="privacy">
<div class="wrap">
<h2>Privacy: where your code goes</h2>
<p>
When you use Claude via OpenCode Mobile:
</p>
<ul>
<li>Your prompts and code go from your phone → to your opencode server → to Anthropic's Claude API. <strong>OpenCode Mobile itself never sees or stores your code.</strong></li>
<li>The path from phone to server is over your private network (LAN or Tailscale) — not through any third-party relay.</li>
<li>The path from server to Claude is via Anthropic's standard API — subject to <a href="https://www.anthropic.com/privacy" target="_blank" rel="noopener">Anthropic's privacy policy</a>.</li>
<li>If data privacy is critical, you can configure opencode to use a local model (e.g. Ollama + a code-capable LLM) so no data ever leaves your network.</li>
</ul>
<p>
Your Anthropic API key lives in the opencode server config on your machine — not in the app,
not in any cloud service. The app stores only your server URL and access password, encrypted
in the Android Keystore.
</p>
</div>
</section>
<section id="vs-claude-code">
<div class="wrap">
<h2>OpenCode Mobile vs. Anthropic's Claude Code CLI</h2>
<p>
Anthropic publishes <strong>Claude Code</strong> as a CLI tool for desktop/laptop use.
OpenCode Mobile is not a replacement for that — it's the mobile interface to the
<em>opencode</em> agent, which is a separate open-source project that happens to support
Claude among other models.
</p>
<p>
Practical differences:
</p>
<ul>
<li>Anthropic's Claude Code CLI is designed for terminal use on macOS/Linux. There is no official Android client.</li>
<li>OpenCode (the runtime OpenCode Mobile connects to) is designed from the ground up as a server with an HTTP API, making it suitable for remote clients like a mobile app.</li>
<li>OpenCode Mobile adds the native Android UI layer: touch-optimised chat, diff viewer, biometric unlock, credential storage — things that have no equivalent in a CLI tool.</li>
<li>You can run opencode alongside Claude Code CLI on the same machine — they don't conflict.</li>
</ul>
<p>
If you use Claude Code on your laptop and want to do lighter tasks from your phone,
OpenCode Mobile with Claude is the natural complement.
</p>
</div>
</section>
<section id="faq">
<div class="wrap">
<h2>Frequently asked questions</h2>
<div class="faq">
<details>
<summary>Can I run Claude Code on Android?</summary>
<p>Yes — via OpenCode Mobile. The app connects to an opencode server configured with your Anthropic API key, giving you Claude's full coding abilities from your Android phone. Anthropic does not publish an official Claude Code Android app; this is the practical alternative.</p>
</details>
<details>
<summary>Which Claude models does OpenCode Mobile support?</summary>
<p>OpenCode Mobile works with any model your opencode server supports. For Claude, that includes Sonnet 4 / 3.5, Opus 4, and Haiku 3.5. You set the model in the opencode config file on the server. You can change it at any time without updating the app.</p>
</details>
<details>
<summary>Do I need an Anthropic API key?</summary>
<p>Yes — to use Claude models you need an Anthropic API key configured on your opencode server. You can get one from <a href="https://console.anthropic.com" target="_blank" rel="noopener">console.anthropic.com</a>. OpenCode also supports other providers, so you can use OpenAI, Gemini, or a local model if you prefer.</p>
</details>
<details>
<summary>Is this the official Claude android app?</summary>
<p>No. OpenCode Mobile is an independent open-source project (MIT licensed), not an official Anthropic product. It connects to the open-source opencode agent, which supports Claude as an AI backend. Anthropic has not published an official Claude coding agent app for Android.</p>
</details>
<details>
<summary>How much does it cost to use Claude via OpenCode Mobile?</summary>
<p>OpenCode Mobile itself is free. Claude usage is billed by Anthropic based on tokens — the same pricing as using Claude via any API client. Claude Haiku is the most affordable option; Sonnet offers the best balance of cost and capability for most coding tasks. See <a href="https://www.anthropic.com/pricing" target="_blank" rel="noopener">Anthropic's pricing page</a> for current rates.</p>
</details>
<details>
<summary>Does it work if I'm not on Wi-Fi?</summary>
<p>Yes. As long as your phone can reach your opencode server — over mobile data via Tailscale, or any other reachable URL — it works on cellular connections. The SSE streaming protocol is efficient and tolerates brief network hiccups gracefully.</p>
</details>
</div>
</div>
</section>
<section id="get-started">
<div class="wrap">
<h2>Get started with Claude on Android today</h2>
<p>
OpenCode Mobile is free, open-source, and available now on Android via F-Droid or direct APK.
You need a machine running <code>opencode serve</code> and an Anthropic API key — both
of which you can set up in under 15 minutes by following the
<a href="../guide/">complete setup guide</a>.
</p>
<div class="cta-box">
<p>Claude Code on your Android phone — no official app needed.</p>
<div style="display:flex;gap:10px;flex-wrap:wrap">
<a class="btn" href="../download/">Download OpenCode Mobile</a>
<a class="btn btn-ghost" href="../guide/">Setup guide</a>
</div>
</div>
<p class="muted" style="margin-top:16px">
Also see: <a href="../features/">full feature list</a> &middot;
<a href="../comparison/">OpenCode Mobile vs ChatGPT &amp; Copilot</a> &middot;
<a href="../vs-termux/">vs Termux</a> &middot;
<a href="../troubleshooting/">troubleshooting connection issues</a>
</p>
</div>
</section>
</main>
<footer>
<div class="wrap">
<p>
<a href="../">Home</a>
<a href="../download/">Download</a>
<a href="../guide/">Setup guide</a>
<a href="../features/">Features</a>
<a href="../comparison/">Comparison</a>
<a href="../vs-termux/">vs Termux</a>
<a href="../troubleshooting/">Troubleshooting</a>
<a href="https://github.com/dzianisv/opencode-mobile">GitHub</a>
<a href="../privacy/">Privacy policy</a>
</p>
<p class="muted">Free and open-source. Built by VIBE TECHNOLOGIES, LLC. Not affiliated with Anthropic or the OpenCode upstream project.</p>
</div>
</footer>
</body>
</html>

View File

@@ -0,0 +1,336 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>AI Coding on Android: OpenCode Mobile vs. ChatGPT &amp; Copilot</title>
<meta name="description" content="Compare OpenCode Mobile vs. ChatGPT and GitHub Copilot on Android. Self-hosted, offline-capable, with real terminal access — not just a chat window." />
<meta name="keywords" content="AI coding assistant android, code with AI on android, opencode android vs chatgpt, best ai code editor android, ai coding on phone, self-hosted AI coding android" />
<meta name="theme-color" content="#3b82f6" />
<link rel="canonical" href="https://dzianisv.github.io/opencode-mobile/comparison/" />
<link rel="icon" type="image/png" href="../fdroid/repo/icons/icon.png" />
<meta property="og:type" content="article" />
<meta property="og:site_name" content="OpenCode Mobile" />
<meta property="og:title" content="AI Coding on Android: OpenCode Mobile vs. ChatGPT &amp; Copilot" />
<meta property="og:description" content="Compare OpenCode Mobile vs. ChatGPT and GitHub Copilot on Android. Self-hosted, offline-capable, with real terminal access — not just a chat window." />
<meta property="og:url" content="https://dzianisv.github.io/opencode-mobile/comparison/" />
<meta property="og:image" content="https://dzianisv.github.io/opencode-mobile/og.png" />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="AI Coding on Android: OpenCode Mobile vs. ChatGPT &amp; Copilot" />
<meta name="twitter:description" content="Compare OpenCode Mobile vs. ChatGPT and GitHub Copilot on Android — self-hosted, offline, real terminal." />
<meta name="twitter:image" content="https://dzianisv.github.io/opencode-mobile/og.png" />
<!-- Structured data: BreadcrumbList -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "OpenCode Mobile", "item": "https://dzianisv.github.io/opencode-mobile/" },
{ "@type": "ListItem", "position": 2, "name": "Comparison", "item": "https://dzianisv.github.io/opencode-mobile/comparison/" }
]
}
</script>
<!-- Structured data: FAQPage -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "Can I do real AI-assisted coding on Android?",
"acceptedAnswer": { "@type": "Answer", "text": "Yes. OpenCode Mobile connects to an opencode server running on your laptop or home machine and streams the full agent session to your phone. You get the same file editing, terminal execution, and multi-file context you would at a desktop — just controlled from Android." }
},
{
"@type": "Question",
"name": "How is OpenCode Mobile different from using ChatGPT on Android?",
"acceptedAnswer": { "@type": "Answer", "text": "ChatGPT's Android app and mobile browser are chat interfaces — you paste code, get suggestions, and copy them back manually. OpenCode Mobile drives a real opencode agent on your server: it reads your files, runs shell commands, applies diffs, and streams results live. No copy-paste loop." }
},
{
"@type": "Question",
"name": "Does OpenCode Mobile work without an internet connection?",
"acceptedAnswer": { "@type": "Answer", "text": "If your opencode server is on the same local network as your phone (or reachable via Tailscale), OpenCode Mobile works fully without public internet. The server handles LLM calls; if you point it at a local model, the entire flow is offline." }
},
{
"@type": "Question",
"name": "Is OpenCode Mobile free?",
"acceptedAnswer": { "@type": "Answer", "text": "Yes. OpenCode Mobile is free and open-source (MIT licensed). The app itself has no subscription. LLM costs depend on the provider you configure on your opencode server — you can use any API key you already have, or a free local model." }
}
]
}
</script>
<style>
:root{--bg:#0b0f17;--bg-soft:#121826;--card:#161d2e;--border:#243049;--text:#e6ebf5;--muted:#9aa6be;--accent:#3b82f6;--accent-2:#2563eb;}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Helvetica Neue",Arial,sans-serif;background:var(--bg);color:var(--text);line-height:1.6;-webkit-font-smoothing:antialiased;}
a{color:var(--accent);text-decoration:none}
a:hover{text-decoration:underline}
.wrap{max-width:880px;margin:0 auto;padding:0 20px}
section{padding:36px 0;border-top:1px solid var(--border)}
section:first-of-type{border-top:none}
h1,h2,h3{line-height:1.25;margin:0 0 .5em}
h1{font-size:2.1rem}
h2{font-size:1.4rem;margin-top:.2em}
h3{font-size:1.1rem;margin-top:1.4em}
code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;background:var(--bg-soft);border:1px solid var(--border);border-radius:6px;padding:2px 6px;font-size:.9em;word-break:break-all;}
pre{background:var(--bg-soft);border:1px solid var(--border);border-radius:10px;padding:14px 16px;overflow-x:auto;}
pre code{background:none;border:none;padding:0;word-break:normal}
.crumbs{font-size:.9rem;color:var(--muted);padding-top:24px}
.crumbs a{color:var(--muted)}
.crumbs a:hover{color:var(--accent)}
.lead{font-size:1.12rem;color:var(--muted)}
.muted{color:var(--muted)}
ul li,ol li{margin-bottom:6px}
footer{border-top:1px solid var(--border);padding:32px 0 48px;text-align:center;color:var(--muted);font-size:.9rem;}
footer a{margin:0 8px}
/* Comparison table */
.table-wrap{overflow-x:auto;margin:24px 0}
table{width:100%;border-collapse:collapse;font-size:.97rem}
thead tr{background:var(--card)}
th,td{padding:11px 14px;border:1px solid var(--border);text-align:left;vertical-align:top}
th{color:var(--muted);font-weight:600;font-size:.88rem;text-transform:uppercase;letter-spacing:.03em}
td:first-child{font-weight:500}
.yes{color:#4ade80}
.no{color:#f87171}
.partial{color:#fbbf24}
/* Use-case cards */
.card{background:var(--card);border:1px solid var(--border);border-radius:12px;padding:20px 22px;margin:16px 0}
.card h3{margin-top:0;font-size:1.05rem}
/* CTA */
.cta-box{background:var(--card);border:1px solid var(--border);border-left:3px solid var(--accent);border-radius:12px;padding:22px 24px;margin:28px 0;display:flex;flex-wrap:wrap;align-items:center;gap:16px;justify-content:space-between}
.cta-box p{margin:0;font-size:1.05rem}
.btn{display:inline-block;background:var(--accent);color:#fff;font-weight:600;padding:10px 22px;border-radius:8px;font-size:.97rem;white-space:nowrap}
.btn:hover{background:var(--accent-2);text-decoration:none}
@media(min-width:680px){h1{font-size:2.5rem}}
</style>
</head>
<body>
<div class="wrap">
<nav class="crumbs" aria-label="Breadcrumb">
<a href="../">OpenCode Mobile</a> &rsaquo; Comparison
</nav>
</div>
<main>
<section>
<div class="wrap">
<h1>AI Coding on Android: OpenCode Mobile vs. Browser-Based Tools</h1>
<p class="lead">
Most "AI coding on Android" options are just chat windows — you paste code in,
copy suggestions out, and manually apply changes yourself. OpenCode Mobile is different:
it drives a real <a href="https://opencode.ai">opencode</a> agent running on your own machine,
streams the session live to your phone, and lets you approve file edits and shell commands
directly from Android.
</p>
<div class="cta-box">
<p>Ready to try it? OpenCode Mobile is free and open-source.</p>
<a class="btn" href="../download/">Download for Android</a>
</div>
</div>
</section>
<section>
<div class="wrap">
<h2>Feature comparison</h2>
<p class="muted">How OpenCode Mobile stacks up against the most common alternatives people reach for on Android.</p>
<div class="table-wrap">
<table>
<thead>
<tr>
<th>Feature</th>
<th>OpenCode Mobile</th>
<th>ChatGPT (mobile browser)</th>
<th>GitHub Copilot (mobile)</th>
</tr>
</thead>
<tbody>
<tr>
<td>Works offline / on LAN</td>
<td class="yes">Yes — connects to your local server via Wi-Fi or Tailscale</td>
<td class="no">No — requires internet to OpenAI servers</td>
<td class="no">No — requires internet to GitHub servers</td>
</tr>
<tr>
<td>Self-hosted / private</td>
<td class="yes">Yes — your server, your API keys, your data</td>
<td class="no">No — all prompts and code go to OpenAI</td>
<td class="no">No — code sent to GitHub/Microsoft</td>
</tr>
<tr>
<td>Terminal / shell access</td>
<td class="yes">Yes — agent can run shell commands on your machine</td>
<td class="no">No — chat only</td>
<td class="partial">Limited — IDE-embedded only, no Android client</td>
</tr>
<tr>
<td>Streaming responses</td>
<td class="yes">Yes — live token streaming from the agent</td>
<td class="yes">Yes — streamed in browser</td>
<td class="partial">Partial — depends on client</td>
</tr>
<tr>
<td>Multi-file context</td>
<td class="yes">Yes — agent reads your whole project tree</td>
<td class="partial">Partial — paste manually, limited context</td>
<td class="partial">Partial — IDE context, no Android app</td>
</tr>
<tr>
<td>Applies diffs / edits files</td>
<td class="yes">Yes — agent writes changes, you approve on phone</td>
<td class="no">No — copy-paste only</td>
<td class="no">No standalone Android client</td>
</tr>
<tr>
<td>Free &amp; open-source</td>
<td class="yes">Yes — MIT licensed, no subscription</td>
<td class="partial">Free tier, closed source</td>
<td class="partial">Free tier, closed source</td>
</tr>
<tr>
<td>Bring your own LLM</td>
<td class="yes">Yes — any provider opencode supports (Claude, GPT-4, local models)</td>
<td class="no">OpenAI models only</td>
<td class="no">GitHub Copilot models only</td>
</tr>
</tbody>
</table>
</div>
</div>
</section>
<section>
<div class="wrap">
<h2>Real use cases: coding from your phone</h2>
<div class="card">
<h3>Code review on the go</h3>
<p>
You get a Slack ping about a PR while away from your desk. With OpenCode Mobile,
open the agent on your phone, ask it to pull the branch and summarize the diff,
then drill into any file with follow-up questions. The agent runs on your machine —
it has full repo access, not just whatever you pasted into a chat.
</p>
<p class="muted">
With ChatGPT on Android you would need to manually copy each file's content into
the chat, losing cross-file context and having to apply feedback yourself.
</p>
</div>
<div class="card">
<h3>Hotfixes from your phone</h3>
<p>
Production is down and you are not near a computer. Open OpenCode Mobile, describe
the bug, and let the agent locate the offending code, propose a fix, and apply it.
You review and approve the diff on your phone, then trigger your deploy pipeline —
all without opening a laptop.
</p>
<p class="muted">
Browser-based AI tools require you to find the right file, copy it in, copy the
fix out, and open a separate terminal or web IDE to actually commit it.
</p>
</div>
<div class="card">
<h3>Exploring an unfamiliar codebase</h3>
<p>
Onboarding to a new project or returning to old code after months away? Ask the
agent to map the directory structure, explain the architecture, or trace how a
specific function is called. Because opencode has full filesystem access on your
server, it can answer questions about any file without you having to find and
paste it first.
</p>
<p class="muted">
Self-hosted also means sensitive internal code never leaves your network —
important for proprietary or client work.
</p>
</div>
</div>
</section>
<section>
<div class="wrap">
<h2>Why self-hosted AI coding matters on mobile</h2>
<p>
When you use a browser-based AI assistant, every snippet of code you share travels
to a third-party server. For personal projects that may be fine, but for work code,
client projects, or anything under NDA it is a real risk. OpenCode Mobile keeps
traffic on your own network: the phone talks to your server over your LAN or a
private Tailscale tunnel, and the server talks to whichever LLM API you configure
— or a fully local model with no external calls at all.
</p>
<p>
The other advantage is cost control. Browser AI tools bill per message or per month.
With opencode you supply your own API key and pay only for tokens used — or run a
free local model like Ollama and pay nothing.
</p>
</div>
</section>
<section>
<div class="wrap">
<h2>Frequently asked questions</h2>
<h3>Can I do real AI-assisted coding on Android?</h3>
<p>
Yes. OpenCode Mobile connects to an opencode server running on your laptop or home
machine and streams the full agent session to your phone. You get the same file
editing, terminal execution, and multi-file context you would at a desktop — just
controlled from Android.
</p>
<h3>How is OpenCode Mobile different from using ChatGPT on Android?</h3>
<p>
ChatGPT's Android app and mobile browser are chat interfaces — you paste code, get
suggestions, and copy them back manually. OpenCode Mobile drives a real opencode
agent on your server: it reads your files, runs shell commands, applies diffs, and
streams results live. No copy-paste loop.
</p>
<h3>Does OpenCode Mobile work without an internet connection?</h3>
<p>
If your opencode server is on the same local network as your phone (or reachable via
<a href="../guide/">Tailscale</a>), OpenCode Mobile works fully without public internet.
The server handles LLM calls; if you point it at a local model, the entire flow is offline.
</p>
<h3>Is OpenCode Mobile free?</h3>
<p>
Yes. OpenCode Mobile is free and open-source (MIT licensed). The app itself has no
subscription. LLM costs depend on the provider you configure on your opencode server —
you can use any API key you already have, or a free local model.
</p>
<div class="cta-box">
<p>Get started in minutes — <a href="../guide/">read the setup guide</a> or go straight to download.</p>
<a class="btn" href="../download/">Download for Android</a>
</div>
</div>
</section>
</main>
<footer>
<div class="wrap">
<p>
<a href="../">Home</a>
<a href="../download/">Download</a>
<a href="../features/">Features</a>
<a href="../guide/">Setup guide</a>
<a href="https://github.com/dzianisv/opencode-mobile">GitHub</a>
<a href="../privacy/">Privacy policy</a>
</p>
<p class="muted">Free and open-source. Built by VIBE TECHNOLOGIES, LLC.</p>
</div>
</footer>
</body>
</html>

View File

@@ -295,6 +295,7 @@ OPENCODE_SERVER_PASSWORD=yourpassword opencode serve --hostname 0.0.0.0 --port 4
<a class="btn" href="https://github.com/dzianisv/opencode-mobile/releases/latest">Download APK</a> <a class="btn" href="https://github.com/dzianisv/opencode-mobile/releases/latest">Download APK</a>
<a class="btn" href="../">Back to home</a> <a class="btn" href="../">Back to home</a>
</div> </div>
<p style="margin-top:20px">Also see: <a href="../vs-termux/">OpenCode Mobile vs Termux</a> — skip the terminal emulator setup and use the native Android UI instead. Or <a href="../claude-code-android/">run Claude Code on Android</a> — configure opencode with your Anthropic API key and use Claude Sonnet or Opus as your AI engine.</p>
</div> </div>
</section> </section>
</main> </main>

View File

@@ -280,6 +280,7 @@ footer a{margin:0 8px}
<li><b>Session management</b><span>Browse, create, and resume coding sessions on your server.</span></li> <li><b>Session management</b><span>Browse, create, and resume coding sessions on your server.</span></li>
</ul> </ul>
<p style="margin-top:16px"><a href="features/">Full feature list and use cases →</a></p> <p style="margin-top:16px"><a href="features/">Full feature list and use cases →</a></p>
<p style="margin-top:8px">Comparing options? See <a href="comparison/">OpenCode Mobile vs. ChatGPT &amp; Copilot</a>, <a href="vs-termux/">OpenCode Mobile vs. Termux</a>, or how to <a href="claude-code-android/">run Claude Code on Android</a>.</p>
</div> </div>
</section> </section>
@@ -363,6 +364,9 @@ OPENCODE_SERVER_PASSWORD=yourpassword opencode serve --hostname 0.0.0.0 --port 4
<a href="download/">Download</a> <a href="download/">Download</a>
<a href="guide/">Setup guide</a> <a href="guide/">Setup guide</a>
<a href="features/">Features</a> <a href="features/">Features</a>
<a href="comparison/">Comparison</a>
<a href="vs-termux/">vs Termux</a>
<a href="claude-code-android/">Claude Code on Android</a>
<a href="troubleshooting/">Troubleshooting</a> <a href="troubleshooting/">Troubleshooting</a>
<a href="https://github.com/dzianisv/opencode-mobile">GitHub</a> <a href="https://github.com/dzianisv/opencode-mobile">GitHub</a>
<a href="https://dzianisv.github.io/opencode-mobile/fdroid/repo">F-Droid repo</a> <a href="https://dzianisv.github.io/opencode-mobile/fdroid/repo">F-Droid repo</a>

View File

@@ -25,6 +25,24 @@
<changefreq>monthly</changefreq> <changefreq>monthly</changefreq>
<priority>0.7</priority> <priority>0.7</priority>
</url> </url>
<url>
<loc>https://dzianisv.github.io/opencode-mobile/comparison/</loc>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
<lastmod>2026-06-05</lastmod>
</url>
<url>
<loc>https://dzianisv.github.io/opencode-mobile/vs-termux/</loc>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
<lastmod>2026-06-05</lastmod>
</url>
<url>
<loc>https://dzianisv.github.io/opencode-mobile/claude-code-android/</loc>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
<lastmod>2026-06-05</lastmod>
</url>
<url> <url>
<loc>https://dzianisv.github.io/opencode-mobile/privacy/</loc> <loc>https://dzianisv.github.io/opencode-mobile/privacy/</loc>
<changefreq>yearly</changefreq> <changefreq>yearly</changefreq>

View File

@@ -177,6 +177,7 @@ footer a{margin:0 8px}
</p> </p>
<p> <p>
See also: the <a href="../guide/">setup guide</a> · <a href="../download/">download &amp; install</a> · See also: the <a href="../guide/">setup guide</a> · <a href="../download/">download &amp; install</a> ·
<a href="../vs-termux/">OpenCode Mobile vs Termux</a> · <a href="../claude-code-android/">using Claude on Android</a> ·
<a href="../">overview</a>. <a href="../">overview</a>.
</p> </p>
</div> </div>

View File

@@ -0,0 +1,539 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>OpenCode Mobile vs Termux: AI Coding on Android Without the Setup Headaches</title>
<meta name="description" content="Skip the Termux SSH tunnel, key management, and dotfile rabbit hole. OpenCode Mobile gives you a native Android UI to your opencode server — one scan or URL and you're coding with AI." />
<meta name="keywords" content="opencode android termux alternative, AI coding on Android without Termux, run AI agent on Android, termux opencode setup, android ai coding native app, termux vs native app ai coding, opencode mobile termux" />
<meta name="theme-color" content="#3b82f6" />
<link rel="canonical" href="https://dzianisv.github.io/opencode-mobile/vs-termux/" />
<link rel="icon" type="image/png" href="../fdroid/repo/icons/icon.png" />
<!-- Open Graph -->
<meta property="og:type" content="article" />
<meta property="og:site_name" content="OpenCode Mobile" />
<meta property="og:title" content="OpenCode Mobile vs Termux: AI Coding on Android Without the Setup Headaches" />
<meta property="og:description" content="Skip the Termux SSH tunnel, key management, and dotfile rabbit hole. OpenCode Mobile gives you a native Android UI to your opencode server — one scan or URL and you're coding with AI." />
<meta property="og:url" content="https://dzianisv.github.io/opencode-mobile/vs-termux/" />
<meta property="og:image" content="https://dzianisv.github.io/opencode-mobile/og.png" />
<!-- Twitter -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="OpenCode Mobile vs Termux: AI Coding on Android Without the Setup Headaches" />
<meta name="twitter:description" content="Skip the Termux SSH tunnel, key management, and dotfile rabbit hole. OpenCode Mobile gives you a native Android UI to your opencode server." />
<meta name="twitter:image" content="https://dzianisv.github.io/opencode-mobile/og.png" />
<!-- Structured data: BreadcrumbList -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "OpenCode Mobile", "item": "https://dzianisv.github.io/opencode-mobile/" },
{ "@type": "ListItem", "position": 2, "name": "vs Termux", "item": "https://dzianisv.github.io/opencode-mobile/vs-termux/" }
]
}
</script>
<!-- Structured data: Article -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "OpenCode Mobile vs Termux: AI Coding on Android Without the Setup Headaches",
"description": "A detailed comparison of running the opencode AI coding agent on Android via Termux vs the OpenCode Mobile native Android client.",
"url": "https://dzianisv.github.io/opencode-mobile/vs-termux/",
"datePublished": "2026-06-05",
"dateModified": "2026-06-05",
"author": { "@type": "Organization", "name": "VIBE TECHNOLOGIES, LLC" },
"publisher": { "@type": "Organization", "name": "OpenCode Mobile" }
}
</script>
<!-- Structured data: FAQPage -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "Can I run opencode on Android without Termux?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Yes. OpenCode Mobile is a native Android client that connects to an opencode server running on your laptop, desktop, or VPS. You don't need Termux, SSH keys, or any terminal emulation on the phone itself — just the app and a URL."
}
},
{
"@type": "Question",
"name": "What is the difference between using Termux and OpenCode Mobile?",
"acceptedAnswer": {
"@type": "Answer",
"text": "With Termux you install Node.js, set up SSH tunneling, manage API keys inside the emulated shell, and use a small-screen terminal as your UI. With OpenCode Mobile you install the app, enter your server URL (or scan a QR code), and get a full native Android interface — streaming chat, diff viewer, tool call approval — with credentials stored in the Android Keystore."
}
},
{
"@type": "Question",
"name": "Does OpenCode Mobile work offline or only over the internet?",
"acceptedAnswer": {
"@type": "Answer",
"text": "OpenCode Mobile connects to your own opencode server — it does not call any external service by itself. If your server is on the same LAN as your phone, or reachable via Tailscale, everything works with no internet. If your server uses a local LLM (e.g. Ollama), the full pipeline is air-gapped."
}
},
{
"@type": "Question",
"name": "Is OpenCode Mobile safe to use with proprietary code?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Yes. The app never proxies your code or conversations through any third-party server. Traffic goes from your phone directly to your own opencode server over your private network or a Tailscale tunnel. Your API keys live on the server, not the phone."
}
}
]
}
</script>
<style>
:root{--bg:#0b0f17;--bg-soft:#121826;--card:#161d2e;--border:#243049;--text:#e6ebf5;--muted:#9aa6be;--accent:#3b82f6;--accent-2:#2563eb;}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Helvetica Neue",Arial,sans-serif;background:var(--bg);color:var(--text);line-height:1.6;-webkit-font-smoothing:antialiased;}
a{color:var(--accent);text-decoration:none}
a:hover{text-decoration:underline}
.wrap{max-width:880px;margin:0 auto;padding:0 20px}
section{padding:36px 0;border-top:1px solid var(--border)}
section:first-of-type{border-top:none}
h1,h2,h3{line-height:1.25;margin:0 0 .5em}
h1{font-size:2.1rem}
h2{font-size:1.4rem;margin-top:.2em}
h3{font-size:1.1rem;margin-top:1.4em}
code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;background:var(--bg-soft);border:1px solid var(--border);border-radius:6px;padding:2px 6px;font-size:.9em;word-break:break-all;}
pre{background:var(--bg-soft);border:1px solid var(--border);border-radius:10px;padding:14px 16px;overflow-x:auto;}
pre code{background:none;border:none;padding:0;word-break:normal}
.crumbs{font-size:.9rem;color:var(--muted);padding-top:24px}
.crumbs a{color:var(--muted)}
.crumbs a:hover{color:var(--accent)}
.lead{font-size:1.12rem;color:var(--muted)}
.muted{color:var(--muted)}
ul li,ol li{margin-bottom:6px}
/* Comparison table */
.table-wrap{overflow-x:auto;margin:24px 0}
table{width:100%;border-collapse:collapse;font-size:.97rem}
thead tr{background:var(--card)}
th,td{padding:11px 14px;border:1px solid var(--border);text-align:left;vertical-align:top}
th{color:var(--muted);font-weight:600;font-size:.88rem;text-transform:uppercase;letter-spacing:.03em}
td:first-child{font-weight:500}
.yes{color:#4ade80}
.no{color:#f87171}
.partial{color:#fbbf24}
/* Cards */
.card{background:var(--card);border:1px solid var(--border);border-radius:12px;padding:20px 22px;margin:16px 0}
.card h3{margin-top:0;font-size:1.05rem}
/* Steps */
.steps-block{background:var(--bg-soft);border:1px solid var(--border);border-radius:10px;padding:18px 22px;margin:16px 0}
.steps-block h3{margin-top:0;font-size:1rem;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}
.steps-block ol{margin:0;padding-left:1.3em}
.steps-block li{margin-bottom:8px}
/* Note */
.note{background:var(--bg-soft);border:1px solid var(--border);border-left:3px solid var(--accent);border-radius:10px;padding:16px 18px;color:var(--muted)}
.note strong{color:var(--text)}
/* CTA */
.cta-box{background:var(--card);border:1px solid var(--border);border-left:3px solid var(--accent);border-radius:12px;padding:22px 24px;margin:28px 0;display:flex;flex-wrap:wrap;align-items:center;gap:16px;justify-content:space-between}
.cta-box p{margin:0;font-size:1.05rem}
.btn{display:inline-block;background:var(--accent);color:#fff;font-weight:600;padding:10px 22px;border-radius:8px;font-size:.97rem;white-space:nowrap}
.btn:hover{background:var(--accent-2);text-decoration:none}
.btn-ghost{background:transparent;border:1px solid var(--border);color:var(--text)}
.btn-ghost:hover{border-color:var(--accent);background:transparent}
/* FAQ */
.faq details{background:var(--card);border:1px solid var(--border);border-radius:12px;padding:0 18px;margin-bottom:12px}
.faq summary{cursor:pointer;padding:16px 0;font-weight:600;list-style:none}
.faq summary::-webkit-details-marker{display:none}
.faq summary::after{content:"+";float:right;color:var(--accent);font-weight:700}
.faq details[open] summary::after{content:"\2212"}
.faq details[open] summary{border-bottom:1px solid var(--border)}
.faq details p{color:var(--muted);margin:14px 0 16px}
footer{border-top:1px solid var(--border);padding:32px 0 48px;text-align:center;color:var(--muted);font-size:.9rem;}
footer a{margin:0 8px}
@media(min-width:680px){h1{font-size:2.5rem}}
</style>
</head>
<body>
<div class="wrap">
<nav class="crumbs" aria-label="Breadcrumb">
<a href="../">OpenCode Mobile</a> &rsaquo; vs Termux
</nav>
</div>
<main>
<section>
<div class="wrap">
<h1>OpenCode Mobile vs Termux: AI Coding on Android Without the Setup Headaches</h1>
<p class="lead">
If you've tried to run an AI coding agent on your Android phone, you've probably ended up in
Termux — installing Node, fiddling with SSH keys, and squinting at a tiny shell prompt.
OpenCode Mobile is a purpose-built native Android client for the
<a href="https://github.com/sst/opencode">opencode</a> AI agent that skips all of that.
One URL (or a QR scan), and you're coding with AI from your pocket.
</p>
<div class="cta-box">
<p>Free and open-source. No SSH tunnel required.</p>
<a class="btn" href="../download/">Download OpenCode Mobile</a>
</div>
</div>
</section>
<section id="the-termux-path">
<div class="wrap">
<h2>The Termux path: what you're actually signing up for</h2>
<p>
Termux is a fantastic project — a real Linux environment on Android, beloved by
security researchers, sysadmins, and hackers. If you live in a terminal, it's a superpower.
But using it to run an AI coding agent day-to-day on a phone involves a surprising
amount of yak shaving before you write your first prompt.
</p>
<div class="steps-block">
<h3>Typical Termux + opencode setup journey</h3>
<ol>
<li>Install Termux from F-Droid (the Play Store version is outdated).</li>
<li>Run <code>pkg update &amp;&amp; pkg upgrade</code> and wait through package downloads.</li>
<li>Install Node.js: <code>pkg install nodejs</code> — then discover the version is older than opencode needs and fight with <code>nvm</code> in Termux.</li>
<li>Install opencode: <code>npm install -g opencode-ai</code> — and watch it compile native modules from source on your phone's ARM CPU for several minutes.</li>
<li>Set up your AI provider API key as an environment variable, being careful not to leak it in shell history.</li>
<li>Realize <code>opencode serve</code> needs a hostname/IP your other devices can reach — so now you're setting up an SSH reverse tunnel, ngrok, or Tailscale from inside Termux.</li>
<li>Deal with Termux's wakelock so Android doesn't kill the server mid-session.</li>
<li>Navigate the opencode TUI from a virtual keyboard on a 6-inch screen.</li>
<li>Repeat steps 3–8 after an Android update wipes your Termux prefix or a <code>pkg upgrade</code> breaks your Node version.</li>
</ol>
</div>
<p>
None of these steps are hard if you already know Linux well. But they add up to 30–90 minutes
before you write your first line of AI-assisted code, and maintenance is ongoing.
If the goal is just to <em>use</em> AI to code from your phone, there's a faster way.
</p>
</div>
</section>
<section id="opencode-mobile-path">
<div class="wrap">
<h2>The OpenCode Mobile path: three steps and done</h2>
<p>
OpenCode Mobile flips the model. Instead of running the agent <em>on</em> your phone, you run
the opencode server on hardware you already have — your laptop, a desktop, a VPS — where Node,
npm, and compute are plentiful. The phone is just the interface.
</p>
<div class="steps-block">
<h3>OpenCode Mobile setup</h3>
<ol>
<li>On your machine, install and start the server:
<pre style="margin-top:8px"><code>npm install -g opencode-ai
OPENCODE_SERVER_PASSWORD=yourpassword opencode serve --hostname 0.0.0.0 --port 4096</code></pre>
</li>
<li>Make it reachable from your phone — connect both devices to
<a href="https://tailscale.com" target="_blank" rel="noopener">Tailscale</a>
(free tier), then use your machine's Tailscale IP, e.g. <code>http://100.x.x.x:4096</code>.
Or use the same LAN Wi-Fi if you're always at home.</li>
<li>Install OpenCode Mobile (via <a href="../download/">F-Droid or direct APK</a>),
tap <strong>Add Connection</strong>, enter the URL and password — done.</li>
</ol>
</div>
<p>
The whole process takes about 10–15 minutes, most of which is the Tailscale install.
After that, every subsequent session is: open app, tap your saved connection, start prompting.
</p>
<div class="note">
<strong>Prefer a QR code?</strong> The <a href="../guide/">setup guide</a> shows how to
generate a scannable connection QR code so you never have to type the URL or password
on a phone keyboard.
</div>
</div>
</section>
<section id="comparison">
<div class="wrap">
<h2>Side-by-side comparison</h2>
<p class="muted">How the two approaches differ for everyday AI coding use on Android.</p>
<div class="table-wrap">
<table>
<thead>
<tr>
<th>Aspect</th>
<th>OpenCode Mobile</th>
<th>Termux + opencode</th>
</tr>
</thead>
<tbody>
<tr>
<td>Initial setup time</td>
<td class="yes">~10–15 minutes</td>
<td class="no">30–90 minutes (Node, native modules, tunnel)</td>
</tr>
<tr>
<td>Node.js version conflicts</td>
<td class="yes">None — server is on your real machine</td>
<td class="no">Common — Termux pkg lags behind upstream Node releases</td>
</tr>
<tr>
<td>Native module compilation</td>
<td class="yes">Not needed on the phone</td>
<td class="no">Slow ARM compilation on first install and upgrades</td>
</tr>
<tr>
<td>Android wakelock / background kill</td>
<td class="yes">Server runs on a real machine, not subject to Android's battery optimiser</td>
<td class="no">Must acquire wakelock; Android may kill Termux during long tasks</td>
</tr>
<tr>
<td>UI on a phone screen</td>
<td class="yes">Native Android UI — optimised for touch, streaming, swipe gestures</td>
<td class="partial">Terminal TUI — functional but cramped on a small screen</td>
</tr>
<tr>
<td>Diff review</td>
<td class="yes">Inline side-by-side diff viewer with approve/reject per file</td>
<td class="partial">Raw terminal diff output — hard to read on 6 inches</td>
</tr>
<tr>
<td>Credential security</td>
<td class="yes">Android Keystore via expo-secure-store</td>
<td class="partial">Shell env vars / plaintext config files in Termux home</td>
</tr>
<tr>
<td>Biometric unlock</td>
<td class="yes">Face ID / fingerprint gates the app and message sends</td>
<td class="no">Not available in terminal context</td>
</tr>
<tr>
<td>Multi-server management</td>
<td class="yes">Save multiple server profiles, switch instantly</td>
<td class="partial">Manage multiple SSH configs manually</td>
</tr>
<tr>
<td>CPU / battery on phone</td>
<td class="yes">Minimal — the app just renders a UI and streams HTTP/SSE</td>
<td class="no">Node + LLM API calls drain battery and heat the device</td>
</tr>
<tr>
<td>Works without internet</td>
<td class="yes">Yes — LAN or Tailscale, no public internet needed</td>
<td class="yes">Yes — if the LLM calls are also local</td>
</tr>
<tr>
<td>Free &amp; open-source</td>
<td class="yes">Yes — MIT license</td>
<td class="yes">Yes — Termux and opencode are both open-source</td>
</tr>
</tbody>
</table>
</div>
</div>
</section>
<section id="when-termux">
<div class="wrap">
<h2>When Termux still makes sense</h2>
<p>
This isn't a takedown of Termux — it's a genuinely powerful tool and the right choice for
several scenarios. Use Termux when:
</p>
<ul>
<li>You <strong>don't have another machine</strong> to run the server on and your phone is your primary computer.</li>
<li>You want a <strong>full Linux environment</strong> for general-purpose hacking, not just the opencode agent.</li>
<li>You're comfortable in a terminal and prefer text interfaces over native UIs.</li>
<li>You're doing <strong>air-gapped or highly restricted</strong> work and can't install anything from an external repo.</li>
<li>You need to run other CLI tools alongside the agent and want them in the same session.</li>
</ul>
<p>
If any of those apply, Termux is the right tool and you should use it.
OpenCode Mobile is for the complementary case: you have real hardware somewhere, you want to
code from your phone without babysitting a terminal session, and you want a UI that was
actually designed for Android.
</p>
</div>
</section>
<section id="use-cases">
<div class="wrap">
<h2>Real use cases where OpenCode Mobile wins on Android</h2>
<div class="card">
<h3>Reviewing a PR at the airport</h3>
<p>
You get a review request while in transit. Your opencode server is running at home on
Tailscale. Open OpenCode Mobile, connect, ask the agent to pull the branch and explain
the changes. It runs the git commands on your actual machine — full repo access, no
copy-paste. Approve the diff on your phone and push back, all without a laptop.
</p>
<p class="muted">
With Termux you'd need the server already running inside Termux, deal with the risk of Android
killing it mid-flight, and navigate the terminal diff on a touch keyboard.
</p>
</div>
<div class="card">
<h3>Late-night hotfix from the couch</h3>
<p>
Something breaks in production. You're not at your desk. With OpenCode Mobile you describe
the bug, the agent locates the file, proposes a fix, and shows you the diff. Tap approve,
the server applies the change, you trigger your deploy pipeline from your phone. Fixed in
under 10 minutes without leaving the couch.
</p>
<p class="muted">
The Termux equivalent requires the session to still be alive (wakelock), the TUI to be
usable from the couch with a phone keyboard, and manual copy-paste if you need to review
the diff carefully.
</p>
</div>
<div class="card">
<h3>Spinning up a new feature on the go</h3>
<p>
Commuting and have 20 minutes of high-quality thinking time? OpenCode Mobile lets you
direct the agent with natural language while the server runs the actual file edits and
tests. By the time you reach your destination the skeleton of a new feature is scaffolded
and waiting for your review.
</p>
<p class="muted">
Running opencode interactively in a Termux session on a phone keyboard for 20 minutes
on a moving train is not a comfortable experience. The native UI with large touch targets
and streaming responses is significantly better.
</p>
</div>
<div class="card">
<h3>Multiple projects, multiple servers</h3>
<p>
OpenCode Mobile lets you save multiple server connections — one for your home lab running
a personal project, one for a VPS running a client project, one for a work machine on
Tailscale. Switch between them with a tap, each with its own credentials stored securely
in the Android Keystore.
</p>
<p class="muted">
With Termux you'd maintain separate SSH configs, Termux sessions, or shell aliases and
manually switch between them.
</p>
</div>
</div>
</section>
<section id="architecture">
<div class="wrap">
<h2>How the architecture works</h2>
<p>
OpenCode Mobile is a thin HTTP + SSE client. When you connect to your server, here is what
happens:
</p>
<ol>
<li>The app opens an SSE stream to your opencode server's <code>/session/{id}/events</code> endpoint.</li>
<li>You type a prompt — the app posts it to <code>/session/{id}/chat</code>.</li>
<li>The server forwards the prompt to your configured LLM (Claude, GPT-4, a local model, whatever you set up).</li>
<li>Tokens stream back from the LLM to the server, and from the server over SSE to the app.</li>
<li>When the agent proposes a file change, the app renders the diff and waits for your approve/reject tap.</li>
<li>Your approval goes back to the server, which applies the change to the real filesystem.</li>
</ol>
<p>
The phone never holds your API keys. It never executes code. It never touches your files.
It is a smart terminal window, drawn as a native Android app. That is why it uses so little
battery and works perfectly even on a mid-range Android device.
</p>
<p>
The server can live on anything: a MacBook, a Linux desktop, a Raspberry Pi 5, a DigitalOcean
droplet, a home server. As long as the phone can reach it over the network, it works.
</p>
</div>
</section>
<section id="get-started">
<div class="wrap">
<h2>Getting started</h2>
<p>
If you already have a machine running <code>opencode serve</code>, installing the app takes
two minutes. If you're starting from scratch, the <a href="../guide/">full setup guide</a>
walks through every step — server install, Tailscale setup, app install, and first connection.
</p>
<h3>Quick start commands</h3>
<pre><code># On your machine (macOS, Linux, or WSL):
npm install -g opencode-ai
# Set a password and start the server bound to all interfaces:
OPENCODE_SERVER_PASSWORD=yourpassword opencode serve --hostname 0.0.0.0 --port 4096
# On your phone, install OpenCode Mobile:
# F-Droid repo: https://dzianisv.github.io/opencode-mobile/fdroid/repo
# Or: download APK from https://github.com/dzianisv/opencode-mobile/releases/latest</code></pre>
<p>
Then in the app: tap <strong>Add Connection</strong>, enter <code>http://&lt;tailscale-ip&gt;:4096</code>
and your password. That's it. You're coding with AI from Android.
</p>
<div class="cta-box">
<p>Skip the Termux rabbit hole — get OpenCode Mobile.</p>
<div style="display:flex;gap:10px;flex-wrap:wrap">
<a class="btn" href="../download/">Download for Android</a>
<a class="btn btn-ghost" href="../guide/">Read the setup guide</a>
</div>
</div>
</div>
</section>
<section id="faq">
<div class="wrap">
<h2>Frequently asked questions</h2>
<div class="faq">
<details>
<summary>Can I run opencode on Android without Termux?</summary>
<p>Yes. OpenCode Mobile is a native Android client that connects to an opencode server running on your laptop, desktop, or VPS. You don't need Termux, SSH keys, or any terminal emulation on the phone itself — just the app and a URL.</p>
</details>
<details>
<summary>What is the difference between using Termux and OpenCode Mobile?</summary>
<p>With Termux you install Node.js, set up SSH tunneling, manage API keys inside the emulated shell, and use a small-screen terminal as your UI. With OpenCode Mobile you install the app, enter your server URL (or scan a QR code), and get a full native Android interface — streaming chat, diff viewer, tool call approval — with credentials stored in the Android Keystore.</p>
</details>
<details>
<summary>Does OpenCode Mobile run the AI model on the phone?</summary>
<p>No. The AI model calls happen on your opencode server. The phone is a pure UI client — it streams results over HTTP/SSE. This is why it uses very little battery and works on any Android device, even older or lower-end ones.</p>
</details>
<details>
<summary>Is my code safe? Does it go through any third-party servers?</summary>
<p>No. The app communicates only with your own opencode server over your private network or a Tailscale tunnel. Your code, prompts, and responses never pass through OpenCode Mobile's (or anyone else's) servers. Your API keys live on the server, not the phone.</p>
</details>
<details>
<summary>Do I need Tailscale, or can I use something else?</summary>
<p>Tailscale is the easiest option (free tier is sufficient) but not required. Any method that makes your server reachable from the phone works: same LAN Wi-Fi, Cloudflare Tunnel, ngrok, a reverse SSH tunnel, or a public VPS. See the <a href="../guide/">setup guide</a> for examples of each.</p>
</details>
</div>
</div>
</section>
</main>
<footer>
<div class="wrap">
<p>
<a href="../">Home</a>
<a href="../download/">Download</a>
<a href="../guide/">Setup guide</a>
<a href="../features/">Features</a>
<a href="../comparison/">Comparison</a>
<a href="../troubleshooting/">Troubleshooting</a>
<a href="https://github.com/dzianisv/opencode-mobile">GitHub</a>
<a href="../privacy/">Privacy policy</a>
</p>
<p class="muted">Free and open-source. Built by VIBE TECHNOLOGIES, LLC. Not affiliated with the OpenCode upstream project beyond using its open API.</p>
</div>
</footer>
</body>
</html>