- JavaScript 80.7%
- CSS 18.6%
- Kotlin 0.5%
- HTML 0.1%
Phandroid
This is a fork of Phanpy, with the goal of making it installable as an Android app.
It uses Capacitor to wrap the Phanpy web app into a native Android app — the same approach iPhanpy takes for iOS. Rather than reimplementing the UI natively, Phandroid ships the proven Phanpy web client inside an Android WebView shell and adds a thin, well-isolated layer of Android-specific tweaks (deep-link OAuth, native camera, in-app browser, hardware back button, edge-to-edge insets).
Built with LLM: this Android port — the Capacitor integration, the Android-specific override layer and the surrounding tooling — was created with the assistance of a large language model.
Status: released and installable via Obtainium from Codeberg (see Installation). Supports OAuth login, native camera, an in-app browser, an Android share target, edge-to-edge UI and optional FOSS push (UnifiedPush). See
CHANGELOG.mdandPHANDROID_CUSTOMIZATIONS.mdfor details.
App identity
- applicationId:
dev.umrath.android.phanpy - URL scheme (OAuth deep link):
phandroid:// - Display name: Phandroid
Installation
⚠️ Upgrading from a pre-2.0.0 build? Reinstall required. Version 2.0.0 changes the app package id to
dev.umrath.android.phanpy. Android treats the new package as a different app, so it cannot update in place: uninstall the old Phandroid, then install this one from the Codeberg URL below. Logged-in accounts, settings and push registration do not transfer and must be set up again (the signing key and thephandroid://login are unchanged). If you added the app in Obtainium from the old source, remove it there and re-add the Codeberg URL.
Phandroid is distributed as a signed APK — not on the Play Store.
Via Obtainium (recommended — auto-updates)
-
Install Obtainium (from F-Droid or its GitHub releases).
-
In Obtainium tap Add App and paste the Codeberg repo URL:
https://codeberg.org/umrath/PhandroidObtainium recognises it as a Forgejo (Codeberg) source and picks up the latest release APK automatically — no special source type and no version regex needed.
-
Tap Add, then Install. Obtainium offers future updates automatically.
Direct APK (sideload)
Download the latest phandroid-vX.Y.Z.apk from the
releases page and open it to
install (allow "install unknown apps" for your browser / file manager if prompted).
Push notifications (optional, FOSS — no Google)
Phandroid uses UnifiedPush: encrypted Web Push, decrypted on-device, with no Google/FCM.
- Install a UnifiedPush distributor, e.g. Sunup. Open it once and grant its permissions (notifications + battery-optimization exemption — it keeps the push connection alive).
- In Phandroid go to Settings → Push Notifications (beta), turn it on and choose which notification types you want.
- Allow the two prompts Phandroid then shows: the notification permission and the battery-optimization exemption (so push keeps working reliably).
Building
Phandroid is a Capacitor app: the web client is built with Vite, then wrapped by the
native Android project under android/.
Prerequisites
- Node.js 22+ and npm 10.x
- Android Studio with an Android SDK (platform android-35 and build-tools 35) — required to compile and run the APK
- A JDK 17–21 (Android Studio bundles a suitable JDK; JDK 21 is known to work)
1. Install and build the web app
npm install
npm run build # outputs to dist/
2a. Open in Android Studio (recommended)
npx cap sync android
npx cap open android
Then run the app on an emulator or a connected device from Android Studio.
2b. Or build a debug APK from the command line
Point Gradle at your SDK by creating android/local.properties with
sdk.dir=/absolute/path/to/Android/sdk, then:
npx cap sync android
JAVA_HOME="/Applications/Android Studio.app/Contents/jbr/Contents/Home" \
./android/gradlew -p android :app:assembleDebug
The APK is written to android/app/build/outputs/apk/debug/app-debug.apk.
Live reload during development
npx cap run android --livereload --external
Regenerating the launcher icon / splash
npx capacitor-assets generate --android
(reads assets/logo.png; the adaptive icon background colour is set in
android/app/src/main/res/values/ic_launcher_background.xml).
Credits
- Phanpy by @cheeaun — the web client Phandroid is built on.
- iPhanpy by @matfantinel — the iOS fork this approach is modeled after.