Important
Arcane Mobile is a public alpha. Use it with disposable or well-backed-up environments while the beta release matrix is being completed; it can perform destructive Docker operations.
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.
The parity target is the core mobile companion outcome, not every Arcane web administration feature. Optional expansion and advanced administration remain explicitly tracked in issues #62–#65.
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.
Release support, promotion gates, and known limitations are documented in
docs/release-readiness.md. Testing/security gates and the accessibility/
localization foundation are documented in docs/testing-and-quality-gates.md
and docs/accessibility-and-localization.md.
- Android 7.0 (API 24) or later
- Arcane 2.10.2 or later, reachable over HTTPS (newer features remain capability-gated)
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:assembleDebug
./gradlew :app:lintDebugThe API 30 instrumentation lane runs with ./gradlew :app:connectedDebugAndroidTest. Destructive or
streaming live-server checks are a separately reported disposable-server lane; see the testing guide
before supplying test credentials.
Release 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 metadata lives under fastlane/metadata/android/en-US/. F-Droid preparation and its current
dependency-eligibility blockers are documented in docs/fdroid-release-preparation.md;
the project has not been submitted to F-Droid.
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.
