Frequently asked questions.
Common questions about OpenCode Mobile, the connection model, and how KKCode uses OpenCode's official API.
Is KKCode an official OpenCode product?
No. KKCode is an independent client that uses OpenCode's official API. OpenCode and its trademarks belong to their respective owners.
What is OpenCode Mobile?
OpenCode Mobile is the category of phone apps that talk to an OpenCode server you run yourself. KKCode is one such app, available for iPhone and iPad, with the Android client actively tested ahead of public distribution.
Which devices can I install KKCode on?
KKCode is currently available for iPhone and iPad running iOS and iPadOS 16.4 or later. The Android client is actively tested, with public distribution planned separately.
Is it a general AI chatbot or mobile IDE?
No. KKCode is a workspace-aware control surface for an OpenCode server. It is not a replacement for a full desktop IDE or terminal emulator.
Which OpenCode version should I use?
Use a current release. KKCode targets the current OpenCode API contract and does not maintain compatibility with older removed endpoint shapes.
Should I run opencode web or opencode serve?
Use opencode serve when KKCode is the main consumer. If the browser UI occupies the root URL, the API may be mounted at a path such as /api; enter that complete API base URL in KKCode.
Which connection methods work?
Supported transports include trusted LAN, Tailscale, Cloudflare Tunnel, HTTPS reverse proxies (including path-prefixed APIs), the built-in QR tunnel from @kkcode-app/agent, and a loopback port created by a separate SSH forwarding client. See the Remote access guide for commands and security trade-offs.
Should I bind OpenCode to 0.0.0.0?
Only for direct access on a trusted LAN. Use authentication, restrict the port to the private firewall profile, and never expose it through router port forwarding. For remote access, prefer loopback plus Tailscale, Cloudflare Tunnel, a reverse proxy, or the built-in QR tunnel.
Do I need authentication with Tailscale or Cloudflare Tunnel?
Keep OpenCode authentication enabled. A tailnet or HTTPS tunnel controls transport and reachability, but KKCode still expects the server credentials when the server is protected.
Can the server URL contain /api or another path?
Yes. KKCode preserves a configured path prefix for generated requests and the SSE stream. Use the prefix only when the proxy or web deployment actually mounts the OpenCode API there.
Where are connection credentials stored?
Server URL, username, and password are stored encrypted in the iOS Keychain (or Android Keystore-backed SecureStore) so the app can reconnect. This is not equivalent to an operating-system-wide secret store and the device should still be treated as holding access to your dev machine.
What happens if realtime events disconnect?
KKCode reconnects the global event stream with backoff and falls back to polling while the stream is unavailable. Core session visibility should continue without a manual reconnect.
Does KKCode modify OpenCode or send data to a third-party server?
KKCode only uses OpenCode's official API and never runs OpenCode or stores a copy of your workspace. With a direct LAN, Tailscale, or reverse-proxy route, traffic goes between your phone and your server. The built-in QR tunnel relays traffic through KKCode to reach the local companion agent, so choose a direct route if your policy requires traffic to remain entirely in your own infrastructure. Anonymised crash and usage analytics are processed by Firebase when telemetry is enabled in your build.
Does KKCode support self-hosted language models?
Yes. Any model that OpenCode supports — including self-hosted models via Ollama, LM Studio, or custom API endpoints — works automatically. The OpenCode server on your dev machine handles model selection and inference; KKCode just streams the results to your phone.