OpenClient is a native iPhone and iPad companion for your own self-hosted OpenCode server.
Keep your coding sessions within reach when you are away from your desk. Browse projects, resume chats, answer permission and question prompts, follow active work, and reconnect quickly to the servers you use most.
- Native mobile control for OpenCode: connect to your OpenCode server from a fast SwiftUI interface built for iPhone and iPad.
- Project and session navigation: browse projects, inspect sessions, and jump back into the work that needs attention.
- Chat that follows server state: continue conversations with streamed assistant output, message history, and tool activity.
- First-class prompts: answer permission requests and questions from the same session-focused interface.
- Self-hosted by design: use your own local network, tailnet, reverse proxy, or HTTPS endpoint.
- Quick reconnect: save recent servers so you can move between machines without re-entering connection details.
OpenClient connects to the OpenCode server you configure. It supports private lab machines, local network addresses, Tailscale-style setups, and public HTTPS endpoints.
Authentication uses the OpenCode server's HTTP Basic Auth credentials, backed by OPENCODE_SERVER_PASSWORD and optional OPENCODE_SERVER_USERNAME on the host machine. Server passwords are stored in the iOS Keychain.
- Connect to an OpenCode server and verify server health.
- Browse known projects and project-scoped sessions.
- Create and open sessions.
- Send messages and receive streamed responses.
- Render session-local todos, permission prompts, questions, tool activity, and message parts.
- Follow active work with the included Live Activity extension.
- Generate deterministic App Store screenshots without a live backend.
This is an active native client for OpenCode, not an official OpenCode project. The app is intentionally aligned with upstream OpenCode client architecture where possible, especially around shared event streaming, typed events, bootstrap, reducer-style state updates, and project -> session -> chat navigation.
This repository is available under the PolyForm Noncommercial License 1.0.0. You may build, modify, and use OpenClient for personal, educational, research, public-sector, charitable, and other noncommercial purposes.
Commercial use, resale, paid distribution, or other commercialization is not permitted under this license without separate permission from the licensor.
For commercial licensing inquiries, contact the project maintainer through GitHub.
Note: because this license restricts commercial use, it is source-available rather than "open source" under the OSI definition.
- Xcode 16 or newer recommended.
- iOS 17.0 or newer.
- XcodeGen for regenerating
OpenCodeIOSClient.xcodeproj. - An OpenCode server reachable from the device or simulator.
- Optional: fastlane for deterministic screenshot capture.
OpenCodeIOSClient/: main SwiftUI app.OpenCodeShared/: shared code used by the app and Live Activity extension.OpenCodeChatActivityExtension/: Live Activity extension.OpenCodeIOSClientTests/: unit tests.OpenCodeIOSClientUITests/: UI tests and screenshot capture flow.docs/: marketing site, privacy policy, and curated screenshots.fastlane/: screenshot automation and local build helpers.project.yml: XcodeGen project definition.
Open the generated Xcode project, choose the OpenCodeIOSClient scheme, select a simulator or connected device, then press Run:
open OpenCodeIOSClient.xcodeprojBuild for Simulator from the command line:
xcodebuild -quiet -project OpenCodeIOSClient.xcodeproj -scheme OpenCodeIOSClient -destination 'platform=iOS Simulator,name=iPhone 17' buildBuild for a connected device:
xcodebuild -quiet -project OpenCodeIOSClient.xcodeproj -scheme OpenCodeIOSClient -sdk iphoneos buildRegenerate after changing project.yml or adding/removing source files:
xcodegen generateUse a local ignored XcodeGen override file for personal signing settings:
cp project.local.example.yml project.local.ymlThen set your team in project.local.yml and generate with:
INCLUDE_PROJECT_LOCAL_YAML=1 xcodegen generateIf xcodegen is installed only in the local user path on this machine, use:
/Users/mininic/.local/bin/xcodegen generateWhen installing manually, do not install from a stale repo-local DerivedData/Build/Products/... path unless that folder was the explicit -derivedDataPath for the build you just ran.
Prefer either Xcode's real TARGET_BUILD_DIR or the repo-controlled path when you intentionally build there:
.derived-data-device/Build/Products/Debug-iphoneos/OpenClient.appThe old product name OpenCodeIOSClient.app is stale and should not be used for install commands.
The GitHub Pages site lives in docs/:
docs/index.html: homepage.docs/privacy/index.html: privacy policy.docs/images/: curated marketing screenshots.
Generate deterministic screenshots with:
fastlane ios screenshotsGenerated PNGs land in:
fastlane/screenshots/en_US/The screenshot flow launches seeded in-app scenes for connection, recent servers, projects, sessions, chat, permission prompts, and question prompts. It does not require a live backend.
Useful local lanes:
fastlane ios build: simulator build sanity check.fastlane ios screenshots: capture App Store screenshots with deterministic UI tests.






