Important
This project is still under development and is not intended to be used on devices yet.
Arcane Mobile is the official Android companion for Arcane. It connects to any Arcane manager or agent and lets you browse and operate your Docker environments — containers, images, volumes, networks, and Compose projects — from your phone.
For setup instructions, configuration details, and development guides, visit the official documentation site.
For continuation context from the currently running Android app, see docs/current-app-state.md.
- Android 7.0 (API 24) or later
- An Arcane server reachable over HTTPS
This is a Jetpack Compose app written in Kotlin, using Material 3 and a single-Activity, multi-tab navigation shell.
| Toolchain | Version |
|---|---|
| Android Gradle Plugin | 9.1.1 |
| Gradle | 9.4.1 |
| Kotlin | 2.2.10 |
| JDK | 21 |
Open the project in Android Studio (Quail Feature Drop or later) and let it sync, or build from the command line:
./gradlew :app:installDebugRun the same checks used by CI with:
./gradlew :app:testDebugUnitTest :app:assembleDebugRelease APK signing is optional for local builds. To sign a release APK, provide:
ARCANE_RELEASE_STORE_FILE=/path/to/arcane-release.jks
ARCANE_RELEASE_STORE_PASSWORD=...
ARCANE_RELEASE_KEY_ALIAS=...
ARCANE_RELEASE_KEY_PASSWORD=...
./gradlew :app:assembleReleaseGitHub Actions builds and uploads a debug APK for pull requests and branch pushes.
For tags matching v*, it also builds a signed release APK and attaches it to the
GitHub Release when signing secrets are configured. Tags without signing secrets
still build and upload the debug APK artifact. Configure these repository secrets
before cutting a signed release tag:
ARCANE_RELEASE_KEYSTORE_BASE64ARCANE_RELEASE_STORE_PASSWORDARCANE_RELEASE_KEY_ALIASARCANE_RELEASE_KEY_PASSWORD
Fastlane/F-Droid metadata lives under fastlane/metadata/android/en-US/.
Open the repository root (the directory containing settings.gradle.kts) in
Android Studio. After Gradle sync, the project should expose a single Android
application module/source set named arcane-android.app.main (shown in some
Android Studio dialogs as app or app.main).
A shared Android App run configuration named Arcane Android is checked in
under .run/. If Android Studio does not pick it up automatically, create one
manually with:
- Module:
arcane-android.app.main(or theapp/app.mainentry Android Studio shows) - Launch: Default Activity (
app.getarcane.android/.MainActivity) - Deploy target: any API 24+ emulator or device
The checked-in manifest already marks MainActivity as the launcher activity,
so no custom activity arguments are required.
The app depends on libarcane-kotlin — the Kotlin SDK that talks to the Arcane API. By default, Gradle resolves the SDK from the sibling ../libarcane-kotlin Git checkout when it exists; otherwise it resolves the SDK from the public Git repository on the main branch and builds it on demand. No separate publish step is needed.
To force the public Git source dependency even when the sibling checkout exists, pass -Parcane.remoteSdk:
./gradlew :app:installDebug -Parcane.remoteSdkA helper script boots the arcane AVD with public DNS servers (needed for the hosted demo to resolve):
./run-emulator.shFound a bug or have a feature request? Open an issue on GitHub.
Help translate Arcane on Crowdin: https://crowdin.com/project/arcane-docker-management
Thank you for checking out Arcane Mobile! Your feedback and contributions are always welcome.
