PlainApp: manage an Android phone from a browser on the same Wi-Fi
🔥 PlainApp is an open-source app that lets you securely manage your phone from a web browser. Access files, media, contacts, SMS, calls, and more through a simple, easy-to-use interface on your desktop.
At a glance
- What is it?
- PlainApp is an AGPL-3.0 Android app that serves a web dashboard for files, SMS, media and screen mirroring over the local network. It is the right tool when you want browser access without a cloud account, and the wrong one when you need remote access or iPhone support.
- Who is it for?
- Adopt PlainApp if you want browser access to an Android phone's files, messages and screen without sending anything to a third-party server, and you accept that both devices must be on the same Wi-Fi. Skip it if you need remote access from outside your network, iPhone support, or a desktop client: the README documents none of these, and the repository does not describe a relay or tunnel.
- Can I use it commercially?
- Yes, with strict conditions. AGPL-3.0 is a network copyleft licence: if people use a modified version over a network, for example as a hosted service, you must offer them its source code under the same licence.
- Is it still maintained?
- Yes. The repository last received commits 1 day ago.
- What is it written in?
- Mainly Kotlin, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 29, 2026, and from our analysis. They are not legal advice.
Editorial analysis
The problem PlainApp solves, and for whom
Moving a file off an Android phone usually means a cable, a USB mode dialog, and a desktop driver that may or may not cooperate. Reading an SMS while typing on a keyboard usually means a cloud service that stores the message somewhere you do not control. PlainApp takes a third path: the phone runs a local web server, and any browser on the same Wi-Fi network opens a dashboard for files, media, contacts, SMS, call logs, installed apps, notifications and the screen itself.
The README frames the audience directly. It is for people who want phone management without accounts, cloud routing or subscriptions, and the comparison table it publishes positions PlainApp against AirDroid, KDE Connect, AnExplorer and Pushbullet on exactly those axes: open source, local-only operation, encryption, ad-free, and browser access with no desktop app. The project is written in Kotlin with Jetpack Compose and Ktor, and the repository topics list GraphQL, Material You, F-Droid and screen mirroring. That stack tells you the maintainers are building an Android-first product, not a cross-platform one. There is an iosApp/ directory at the repository root, but the README's feature tables and screenshots describe Android only, and no iOS build instructions appear in the excerpt.
How the phone-as-server model actually works
The architecture is inverted compared with most remote-access tools. Nothing is installed on the computer. The Android app starts an HTTP server on the device, and the browser is the client. The README states that every connection is secured with TLS plus XChaCha20-Poly1305, so the transport is encrypted even though both endpoints sit on the same LAN, and it states that no account registration is required.
The web dashboard is a PWA, which the README says can be pinned to the desktop like a native app. That matters for the data flow: after the first load, the browser shell can be cached locally, and the requests it makes are the same local ones. Feature coverage is broad rather than deep in any single area. Files covers internal storage, SD card and USB drives with upload, download, rename and delete. Media streams photos, videos and audio in the browser. SMS and calls are readable, and SMS can be sent from the desktop. Notifications mirror in real time. Screen mirroring streams the display with audio and remote control support.
The Android side is not just a server. The README lists a Markdown notes editor, an RSS reader, a video and audio player with playlists, DLNA and Chromecast casting, peer-to-peer chat and file sharing between devices without a server, a Pomodoro timer and a sound meter. The repository layout reflects that split: app/, shared/, shared-lib/, room-db/, kgraphql-ksp/ and litert-stubs/ sit alongside apitest/ and scripts/. The kgraphql-ksp module suggests the phone exposes a GraphQL API generated at build time, which is consistent with the GraphQL topic tag. The README does not document the API surface or publish a schema, so anyone wanting to script against it would have to read the source.
Installing PlainApp and opening the dashboard
The README points to three distribution channels: Google Play under the package id com.ismartcoding.plain, F-Droid under the same id, and GitHub Releases for the latest APK. There is no desktop installer and no server package, because the server is the phone.
If you build from source, the repository root contains Gradle wrapper scripts (gradlew, gradlew.bat), build.gradle.kts and settings.gradle.kts. The README does not spell out a build command, and no build invocation appears in the excerpt, so the build is an exercise in reading build.gradle.kts and gradle.properties rather than following a published recipe.
Once the app is running on the phone, the workflow is browser-side. The README says to open a browser on any desktop or laptop connected to the same Wi-Fi network, and the dashboard appears. The first connection is where the TLS and XChaCha20-Poly1305 setup described in the README applies. The README does not document a pairing code, a port number or a QR flow, so expect the app itself to be the source of the address you type.
Because the dashboard is a PWA, the browser can install it as a pinned app. The README gives no manifest details, but the PWA support row in its comparison table is marked as fully supported and not offered by AirDroid, KDE Connect, AnExplorer or Pushbullet in the same table.
Where PlainApp stops being the right tool
The same-network requirement is the hard boundary. The README describes access from a browser on the same Wi-Fi network, and it does not describe a relay, a tunnel, a VPN mode or a hosted rendezvous service. That is a deliberate consequence of the local-only design, but it means PlainApp does not replace a remote-access tool. If you need to reach your phone from a hotel network, this is the wrong product, and no configuration flag in the README changes that.
Platform coverage is the second boundary. The published feature set, screenshots and download links are Android. The iosApp/ directory exists in the repository tree, but the README does not present an iOS build, an App Store link or a feature list for it. Anyone searching for PlainApp on an iPhone should treat the Android app as the supported target until the project says otherwise.
Permissions are the third. Reading SMS, call logs, contacts, notifications and the screen are all privileged operations on modern Android. The README does not enumerate the permission set or describe what happens when a user denies one. In practice, the dashboard's breadth is also its attack surface: a browser session on the same network can read messages and mirror the screen, so the encryption described in the README is doing real work rather than being decorative. The README does not document session expiry, device revocation or a way to review active connections, which is a gap worth knowing about before you leave the server running.
KDE Connect and AirDroid as the real alternatives
KDE Connect is the closest philosophical match: open source, local network, no account. The difference is the client model. KDE Connect pairs a desktop application with the phone and exposes integration points into the desktop environment, such as notifications and clipboard sharing, while PlainApp pushes everything through a browser and needs nothing installed on the computer. If you want deep desktop integration on Linux, KDE Connect's approach fits better. If you want to sit at a borrowed laptop and open a tab, PlainApp's approach fits better. The README's own table marks KDE Connect as lacking browser access, SMS from desktop, screen mirroring and media streaming in the browser.
AirDroid is the commercial counterpart and the one most people have already tried. It requires an account, routes through its own infrastructure for remote access, and gates features behind a paid plan according to the README's comparison table. The real difference is not the feature list but the trust model: AirDroid's remote access works because your traffic leaves your network, and PlainApp's does not work remotely for exactly the same reason. Pushbullet is a lighter comparison: notification and SMS forwarding rather than a full file manager and screen mirror, and the README marks it as closed source and account-based.
Licence, maintenance and what an upgrade costs
PlainApp is licensed under AGPL-3.0. For an end user installing the APK from F-Droid or GitHub Releases, that means the source is available and the network-copyleft terms apply to modified versions offered as a service. If you fork the app and expose it to other users over a network, the AGPL's source-availability obligation is the part to read carefully. This is not legal advice, and the LICENSE file in the repository root is the authority.
The maintenance signal is strong by the only measures available here. The repository is not archived, and the last push was on 2026-09-20. Releases v3.3.22, v3.3.24 and v3.3.25 landed between 2026-09-09 and 2026-09-11, which indicates a fast release cadence rather than a dormant project. Fast cadence has a cost: if you build from source, expect to rebase against moving shared/ and shared-lib/ modules, and expect the GraphQL layer generated by kgraphql-ksp to change shape between versions. The README does not document a migration path or a stable API contract, so pinning to a release tag is the practical approach for anyone building on top of it. The upgrade path for ordinary users is the app store or a new APK, and the README does not mention data migration between versions.
Editorial conclusion
Adopt PlainApp if you want browser access to an Android phone's files, messages and screen without sending anything to a third-party server, and you accept that both devices must be on the same Wi-Fi. Skip it if you need remote access from outside your network, iPhone support, or a desktop client: the README documents none of these, and the repository does not describe a relay or tunnel. Before relying on it, verify that the release you install matches the package id com.ismartcoding.plain, and check whether your Android version still grants the SMS and call-log permissions the web dashboard needs.
Frequently asked questions
What does PlainApp do?
It is an open-source Android app that runs a local web server so a browser on the same Wi-Fi network can manage the phone: files, media, contacts, SMS, call logs, installed apps, notifications and screen mirroring. The Android app also includes a Markdown notes editor, an RSS reader, a media player, TV casting, peer-to-peer chat and file sharing, a Pomodoro timer and a sound meter.
Is PlainApp safe to use?
The README states that no data is sent to any third-party server, that every connection is secured with TLS plus XChaCha20-Poly1305, and that no account registration is required. It does not document session expiry, device revocation or a way to review active connections, so those are the parts to verify yourself before leaving the server running.
how to use plain app
Install PlainApp on the Android phone from Google Play, F-Droid or GitHub Releases, then open a browser on a desktop or laptop connected to the same Wi-Fi network. The README says the dashboard appears there, and the web app supports PWA so it can be pinned to the desktop.
what is plain app
PlainApp is a free, open-source Android app that turns the phone into a self-hosted management hub reachable from any browser on the same network, with no accounts, cloud or subscriptions. It is licensed under AGPL-3.0 and written in Kotlin with Jetpack Compose and Ktor.
is plain app safe
The README describes local-only operation with TLS and XChaCha20-Poly1305 encryption on every connection and no account registration. It does not describe a relay or tunnel, so access is limited to the same Wi-Fi network, and the documentation is silent on connection revocation and session expiry.
plain app alternative
The README's comparison table places PlainApp against AirDroid, KDE Connect, AnExplorer and Pushbullet. KDE Connect is the closest on open source and local-only operation but pairs a desktop application rather than a browser, while AirDroid offers remote access through its own infrastructure and requires an account.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/plainhub-plain-app)