Files
opencode-mobile/docs-site/index.html
engineer fb03a9af47 seo(site): add /features/ page (capabilities, use cases, comparison)
Targets "opencode mobile features", "AI coding android", and
"opencode vs ChatGPT for coding" queries not covered by existing pages.
Includes SoftwareApplication + BreadcrumbList structured data.
Adds /features/ to sitemap and internal footer nav on all 5 pages.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-05 10:00:05 -07:00

378 lines
17 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>OpenCode Mobile — OpenCode AI Coding Agent on Android</title>
<meta name="description" content="Free, open-source Android client for the OpenCode AI coding agent. Connect your phone to a self-hosted OpenCode server and code from anywhere. F-Droid or APK." />
<meta name="keywords" content="OpenCode Mobile, OpenCode Android client, AI coding agent on Android, self-hosted AI coding, mobile coding agent, OpenCode app, open source Android coding" />
<meta name="theme-color" content="#3b82f6" />
<link rel="canonical" href="https://dzianisv.github.io/opencode-mobile/" />
<link rel="icon" type="image/png" href="fdroid/repo/icons/icon.png" />
<!-- Open Graph -->
<meta property="og:type" content="website" />
<meta property="og:site_name" content="OpenCode Mobile" />
<meta property="og:title" content="OpenCode Mobile — OpenCode AI Coding Agent on Android" />
<meta property="og:description" content="Free, open-source Android client for the OpenCode AI coding agent. Connect to your own self-hosted OpenCode server and code from your phone." />
<meta property="og:url" content="https://dzianisv.github.io/opencode-mobile/" />
<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 — OpenCode AI Coding Agent on Android" />
<meta name="twitter:description" content="Free, open-source Android client for the OpenCode AI coding agent. Connect to your own self-hosted OpenCode server and code from your phone." />
<meta name="twitter:image" content="https://dzianisv.github.io/opencode-mobile/og.png" />
<!-- Structured data -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "SoftwareApplication",
"name": "OpenCode Mobile",
"applicationCategory": "DeveloperApplication",
"operatingSystem": "Android",
"description": "Free, open-source Android client for the OpenCode AI coding agent. Connect to your own self-hosted OpenCode server over Tailscale, a tunnel, or your local network and write, review, and ship code from your phone.",
"url": "https://dzianisv.github.io/opencode-mobile/",
"downloadUrl": "https://github.com/dzianisv/opencode-mobile/releases/latest",
"license": "https://opensource.org/licenses/MIT",
"isAccessibleForFree": true,
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "USD"
},
"author": {
"@type": "Organization",
"name": "VIBE TECHNOLOGIES, LLC"
}
}
</script>
<!-- Structured data: FAQ -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "Is OpenCode Mobile free?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Yes. OpenCode Mobile is completely free and open source under the MIT license. There is no feature gate, no ads, and no analytics you did not opt into."
}
},
{
"@type": "Question",
"name": "Do I need my own server?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Yes. OpenCode Mobile is a client, not a hosted service. You run an OpenCode server yourself with `opencode serve` (on a laptop, desktop, or VPS) and the app connects to it over the network."
}
},
{
"@type": "Question",
"name": "Is it on Google Play?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Not publicly yet — Google Play is in internal testing only. You can install it today on Android via our F-Droid self-hosted repo (https://dzianisv.github.io/opencode-mobile/fdroid/repo) or the direct signed APK."
}
},
{
"@type": "Question",
"name": "Is there an iOS app?",
"acceptedAnswer": {
"@type": "Answer",
"text": "No. OpenCode Mobile is Android only. There is no iOS or iPadOS build."
}
},
{
"@type": "Question",
"name": "Where do my API keys live?",
"acceptedAnswer": {
"@type": "Answer",
"text": "On your own OpenCode server. You bring your own AI provider keys (OpenAI, Anthropic, Gemini, etc.) and configure them on the server. The app never touches them and never proxies your code or conversations through anyone else's servers."
}
},
{
"@type": "Question",
"name": "How do I install it?",
"acceptedAnswer": {
"@type": "Answer",
"text": "On Android, add the F-Droid repo https://dzianisv.github.io/opencode-mobile/fdroid/repo in any F-Droid client and install OpenCode Mobile, or download the latest signed APK from https://github.com/dzianisv/opencode-mobile/releases/latest."
}
}
]
}
</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:48px 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}
h2{font-size:1.5rem}
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}
/* Hero */
.hero{
text-align:center;
padding:64px 0 56px;
background:radial-gradient(900px 360px at 50% -10%,rgba(59,130,246,.18),transparent 70%);
}
.logo{width:84px;height:84px;margin:0 auto 20px;display:block}
.hero h1{font-size:2.3rem;margin-bottom:.2em}
.tagline{font-size:1.15rem;color:var(--muted);max-width:560px;margin:0 auto 28px}
.cta{display:flex;gap:12px;flex-wrap:wrap;justify-content:center}
.btn{
display:inline-block;
padding:12px 22px;
border-radius:10px;
font-weight:600;
font-size:1rem;
border:1px solid var(--border);
background:var(--card);
color:var(--text);
}
.btn:hover{text-decoration:none;border-color:var(--accent)}
.btn-primary{background:var(--accent);border-color:var(--accent);color:#fff}
.btn-primary:hover{background:var(--accent-2);border-color:var(--accent-2)}
/* Features */
.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}
/* Notes */
.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)}
.muted{color:var(--muted)}
.steps{padding-left:1.2em}
.steps li{margin-bottom:10px}
/* 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){
.features{grid-template-columns:1fr 1fr}
.hero h1{font-size:2.8rem}
}
</style>
</head>
<body>
<header class="hero">
<div class="wrap">
<svg class="logo" viewBox="0 0 84 84" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="OpenCode Mobile logo">
<rect x="2" y="2" width="80" height="80" rx="20" fill="#161d2e" stroke="#3b82f6" stroke-width="3"/>
<path d="M33 30 L23 42 L33 54" stroke="#3b82f6" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M51 30 L61 42 L51 54" stroke="#3b82f6" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<line x1="46" y1="26" x2="38" y2="58" stroke="#9aa6be" stroke-width="5" stroke-linecap="round"/>
</svg>
<h1>OpenCode Mobile</h1>
<p class="tagline">The free, open-source Android client for the OpenCode AI coding agent. Connect to your own self-hosted OpenCode server and write, review, and ship code from your phone.</p>
<div class="cta">
<a class="btn btn-primary" href="download/">Download for Android</a>
<a class="btn" href="https://dzianisv.github.io/opencode-mobile/fdroid/repo">Get it on F-Droid</a>
<a class="btn" href="guide/">Setup guide</a>
<a class="btn" href="https://github.com/dzianisv/opencode-mobile">View on GitHub</a>
</div>
</div>
</header>
<main>
<section id="what">
<div class="wrap">
<h2>What is OpenCode Mobile?</h2>
<p>OpenCode Mobile is a thin Android client for the <a href="https://github.com/sst/opencode">OpenCode</a> AI coding agent, built with React Native and Expo. It is not a standalone agent — it connects to an OpenCode server that <strong>you</strong> run yourself (on your laptop, a VPS, or anywhere you control) and speaks its HTTP + SSE API to browse sessions, stream responses, and review file changes.</p>
<p>All AI model calls happen on your server using your own API keys. The app never proxies your code or conversations through anyone else's servers. It is <strong>free and open-source</strong> under the MIT license — no feature gate, no ads, and no analytics you did not opt into.</p>
</div>
</section>
<section id="features">
<div class="wrap">
<h2>Key features</h2>
<ul class="features">
<li><b>Multi-connection management</b><span>Manage multiple OpenCode servers — local network, Cloudflare Tunnel, ngrok, or Tailscale.</span></li>
<li><b>Streaming chat</b><span>Token-by-token streaming responses directly from your OpenCode server.</span></li>
<li><b>Diff viewer</b><span>Inline side-by-side diffs of every file change the agent makes.</span></li>
<li><b>Tool call approval</b><span>Review and approve or reject tool calls before the agent executes them.</span></li>
<li><b>Biometric unlock</b><span>Face ID, Touch ID, or Android fingerprint protects the app and individual message sends.</span></li>
<li><b>Secure credential storage</b><span>Server credentials stored in the Android Keystore via expo-secure-store.</span></li>
<li><b>Session management</b><span>Browse, create, and resume coding sessions on your server.</span></li>
</ul>
<p style="margin-top:16px"><a href="features/">Full feature list and use cases →</a></p>
</div>
</section>
<section id="install">
<div class="wrap">
<h2>How to install</h2>
<h3>Option A — F-Droid (recommended)</h3>
<p>Add this repository in any F-Droid client (F-Droid, Droid-ify, Neo Store), then install OpenCode Mobile and get automatic updates:</p>
<pre><code>https://dzianisv.github.io/opencode-mobile/fdroid/repo</code></pre>
<p class="muted">In F-Droid: Settings &rarr; Repositories &rarr; add the URL above (or scan the QR code in the client's "Add repository" screen), then search for "OpenCode Mobile". Your client will ask you to confirm the repo on first connect.</p>
<p style="text-align:center;margin:20px 0">
<img src="fdroid-qr.png" alt="QR code to add the OpenCode Mobile F-Droid repository" width="180" height="180" style="background:#fff;padding:10px;border-radius:12px" loading="lazy" />
<br><span class="muted">Scan to add the F-Droid repo</span>
</p>
<h3>Option B — Direct APK</h3>
<p>Download the latest signed APK and install it (you may need to allow installation from unknown sources):</p>
<p><a class="btn btn-primary" href="https://github.com/dzianisv/opencode-mobile/releases/latest">Download latest APK</a></p>
<p style="text-align:center;margin:20px 0">
<img src="apk-qr.png" alt="QR code to download the OpenCode Mobile APK" width="180" height="180" style="background:#fff;padding:10px;border-radius:12px" loading="lazy" />
<br><span class="muted">Scan to download the APK on your phone</span>
</p>
</div>
</section>
<section id="requirements">
<div class="wrap">
<h2>Requirements</h2>
<div class="note">
<p><strong>You need your own OpenCode server.</strong> OpenCode Mobile is a client, not a hosted service. Before it is useful you must run an OpenCode server somewhere you control and make it reachable from your phone.</p>
<ol class="steps" style="margin-bottom:0">
<li>Install and run OpenCode on your machine:<br>
<pre style="margin-top:8px"><code>npm install -g opencode
OPENCODE_SERVER_PASSWORD=yourpassword opencode serve --hostname 0.0.0.0 --port 4096</code></pre>
</li>
<li>Make it reachable from your phone — the simplest secure option is <strong>Tailscale</strong> (connect to your machine's Tailscale IP, e.g. <code>http://100.x.x.x:4096</code>). A Cloudflare Tunnel, ngrok, or the same local network also work.</li>
<li>In the app, tap <strong>Add Connection</strong>, enter your server URL and password, and connect.</li>
</ol>
</div>
<p class="muted" style="margin-top:14px">You bring your own AI provider keys (OpenAI, Anthropic, Gemini, etc.) on the server — your keys, your bill.</p>
<p style="margin-top:14px">New to this? Follow the <a href="guide/">full step-by-step setup guide</a>.</p>
</div>
</section>
<section id="faq">
<div class="wrap">
<h2>Frequently asked questions</h2>
<div class="faq">
<details>
<summary>Is it free?</summary>
<p>Yes. OpenCode Mobile is completely free and open source under the MIT license. There is no feature gate, no ads, and no analytics you did not opt into.</p>
</details>
<details>
<summary>Do I need my own server?</summary>
<p>Yes — it's a client, not a hosted service. You run an OpenCode server yourself with <code>opencode serve</code> on a machine you control (laptop, desktop, or VPS), and the app connects to it over the network.</p>
</details>
<details>
<summary>Is it on Google Play?</summary>
<p>Not publicly yet — Google Play is in internal testing only. You can install it on Android today via our <a href="https://dzianisv.github.io/opencode-mobile/fdroid/repo">F-Droid repo</a> or the <a href="https://github.com/dzianisv/opencode-mobile/releases/latest">direct signed APK</a>.</p>
</details>
<details>
<summary>Is there an iOS app?</summary>
<p>No. OpenCode Mobile is Android only. There is no iOS or iPadOS build.</p>
</details>
<details>
<summary>Where do my API keys live?</summary>
<p>On your own OpenCode server. You bring your own AI provider keys (OpenAI, Anthropic, Gemini, etc.) and configure them on the server — your keys, your bill. The app never touches them and never proxies your code or conversations through anyone else's servers.</p>
</details>
<details>
<summary>How do I install it?</summary>
<p>Add the F-Droid repo <code>https://dzianisv.github.io/opencode-mobile/fdroid/repo</code> in any F-Droid client and install OpenCode Mobile, or download the latest signed APK from <a href="https://github.com/dzianisv/opencode-mobile/releases/latest">GitHub Releases</a>. See the <a href="guide/">setup guide</a> for the full walkthrough.</p>
</details>
</div>
</div>
</section>
</main>
<footer>
<div class="wrap">
<p>
<a href="download/">Download</a>
<a href="guide/">Setup guide</a>
<a href="features/">Features</a>
<a href="troubleshooting/">Troubleshooting</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/privacy/">Privacy policy</a>
<a href="https://github.com/dzianisv/opencode-mobile/blob/main/LICENSE">MIT License</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>