{"id":45474155,"url":"https://github.com/plainhub/plain-app","last_synced_at":"2026-04-26T12:02:43.995Z","repository":{"id":110839348,"uuid":"418086942","full_name":"plainhub/plain-app","owner":"plainhub","description":"🔥 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.","archived":false,"fork":false,"pushed_at":"2026-04-22T15:01:34.000Z","size":186239,"stargazers_count":4303,"open_issues_count":52,"forks_count":234,"subscribers_count":25,"default_branch":"main","last_synced_at":"2026-04-22T17:39:48.782Z","etag":null,"topics":["android","android-app","compose","compose-ui","f-droid","fdroid","filemanager","graphql","jetpack-compose","ktor","learning","material-you","music-player","note-taking","privacy-protection","productivity","rss","rss-reader","screen-mirroring","web"],"latest_commit_sha":null,"homepage":"https://plainapp.app","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/plainhub.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":null,"open_collective":"plainhub","ko_fi":"ismartcoding"}},"created_at":"2021-10-17T10:03:14.000Z","updated_at":"2026-04-22T16:42:30.000Z","dependencies_parsed_at":"2025-12-19T00:11:52.068Z","dependency_job_id":null,"html_url":"https://github.com/plainhub/plain-app","commit_stats":null,"previous_names":["ismartcoding/plain-app"],"tags_count":171,"template":false,"template_full_name":null,"purl":"pkg:github/plainhub/plain-app","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plainhub%2Fplain-app","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plainhub%2Fplain-app/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plainhub%2Fplain-app/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plainhub%2Fplain-app/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/plainhub","download_url":"https://codeload.github.com/plainhub/plain-app/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plainhub%2Fplain-app/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32296259,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-26T09:34:17.070Z","status":"ssl_error","status_checked_at":"2026-04-26T09:34:00.993Z","response_time":129,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","android-app","compose","compose-ui","f-droid","fdroid","filemanager","graphql","jetpack-compose","ktor","learning","material-you","music-player","note-taking","privacy-protection","productivity","rss","rss-reader","screen-mirroring","web"],"created_at":"2026-02-22T14:24:24.618Z","updated_at":"2026-04-26T12:02:43.967Z","avatar_url":"https://github.com/plainhub.png","language":"Kotlin","readme":"# PlainApp\n\n**PlainApp** is a free, open-source Android app that turns your phone into a self-hosted management hub you can access from any web browser on the same network — no accounts, no cloud, no subscriptions. Whether you need to transfer files, read SMS, browse photos, or mirror your screen, PlainApp puts full control back in your hands.\n\n[\u003cimg src=\"https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png\" alt='Get it on Google Play' height=\"80\"\u003e](https://play.google.com/store/apps/details?id=com.ismartcoding.plain)\n[\u003cimg src=\"https://fdroid.gitlab.io/artwork/badge/get-it-on.png\" alt='Get it on F-Droid' height=\"80\"\u003e](https://f-droid.org/packages/com.ismartcoding.plain/)\n[\u003cimg src=\"https://raw.githubusercontent.com/plainhub/plain-app/main/assets/get-it-on-github.png\" alt='Get it on GitHub' height=\"80\"\u003e](https://github.com/plainhub/plain-app/releases/latest)\n\n## Why PlainApp?\n\nMost phone-management tools either route your data through their own servers, lock features behind subscriptions, or plague you with ads. PlainApp is different:\n\n- **100% local** — your data never leaves your network\n- **End-to-end encrypted** — every connection is secured with TLS + XChaCha20-Poly1305\n- **Completely free and ad-free** — no purchases, no upsells, ever\n- **Fully open-source** — audit the code, build your own binary, or contribute\n\n## Features \n\n### 🌐 Web-Based Phone Management\nOpen a browser on any desktop or laptop connected to the same Wi-Fi network and get a full dashboard to manage your Android device — no app installation required on the computer side. Supports PWA so you can pin it to your desktop like a native app.\n\n| Category | What you can do |\n|---|---|\n| **Files** | Browse internal storage, SD card, and USB drives; upload, download, rename, delete |\n| **Media** | View and manage photos, videos, and audio; stream them directly in the browser |\n| **Contacts** | View, search, and manage your contacts |\n| **SMS \u0026 Calls** | Read messages and call logs; send SMS from your desktop |\n| **Apps** | List installed apps and export APKs |\n| **Notifications** | Mirror phone notifications to the browser in real time |\n| **Screen Mirror** | Live-stream the phone screen to the browser with audio and remote control support |\n| **Device Info** | Check battery, storage, network, and system details |\n\n### 📱 Built-in Android Tools\nPlainApp is also a capable standalone app — not just a server:\n\n- **Markdown Notes** — write and organize notes with a clean editor\n- **RSS Reader** — follow your favorite websites with a distraction-free reader\n- **Video \u0026 Audio Player** — full-featured media player with playlist support\n- **TV Cast** — cast media to any DLNA/Chromecast-compatible TV\n- **Peer-to-Peer Chat \u0026 File Sharing** — share files and messages directly between devices without a server\n- **Pomodoro Timer** — stay focused with a built-in work timer\n- **Sound Meter** — measure ambient noise levels in real time\n\n### 🔒 Privacy \u0026 Security\n- No Firebase Analytics or Messaging — crash reporting (via Firebase Crashlytics) is optional and opt-in\n- Zero data sent to any third-party server\n- All traffic between phone and browser is encrypted (TLS + XChaCha20-Poly1305)\n- No account registration required\n\nVideo: https://www.youtube.com/watch?v=TjRhC8pSQ6Q\n\nReddit: https://www.reddit.com/r/plainapp\n\nDiscord: https://discord.gg/RQWcS6DEEe\n\nQQ Group: 812409393\n\n## How PlainApp Compares\n\n| Feature | **PlainApp** | AirDroid | KDE Connect | AnExplorer | Pushbullet |\n|---|:---:|:---:|:---:|:---:|:---:|\n| Open source | ✅ | ❌ | ✅ | ✅ | ❌ |\n| 100% local / no cloud required | ✅ | ⚠️ partial | ✅ | ✅ | ❌ |\n| End-to-end encrypted (local) | ✅ | ⚠️ paid | ❌ | ❌ | ❌ |\n| Ad-free | ✅ | ⚠️ paid | ✅ | ⚠️ paid | ⚠️ paid |\n| Free all features | ✅ | ⚠️ freemium | ✅ | ⚠️ freemium | ⚠️ freemium |\n| Web browser access (no desktop app needed) | ✅ | ✅ | ❌ | ❌ | ✅ |\n| File manager (browser UI) | ✅ | ✅ | ⚠️ limited | ✅ | ❌ |\n| SMS from desktop | ✅ | ✅ | ✅ | ❌ | ✅ |\n| Screen mirroring | ✅ | ✅ | ✅ | ❌ | ❌ |\n| Media streaming in browser | ✅ | ⚠️ limited | ❌ | ❌ | ❌ |\n| Notification mirroring | ✅ | ✅ | ✅ | ❌ | ✅ |\n| Built-in RSS reader | ✅ | ❌ | ❌ | ❌ | ❌ |\n| Markdown notes | ✅ | ❌ | ❌ | ❌ | ❌ |\n| P2P chat \u0026 file sharing | ✅ | ⚠️ paid | ❌ | ❌ | ⚠️ limited |\n| TV casting (DLNA/Chromecast) | ✅ | ✅ | ❌ | ❌ | ❌ |\n| PWA support | ✅ | ❌ | ❌ | ❌ | ❌ |\n| No account required | ✅ | ❌ | ✅ | ✅ | ❌ |\n\n\u003e ✅ Fully supported \u0026nbsp; ⚠️ Partially supported or requires paid plan \u0026nbsp; ❌ Not supported\n\n## Donations :heart:\n\n**This project needs you!** If you would like to support this project's further development, the creator of this project or the continuous maintenance of this project, **feel free to donate**.\n\nYour donation is highly appreciated. Thank you!\n\n- [Buy me a cup of Ko-Fi!](https://ko-fi.com/ismartcoding)\n\n- Use WeChat to scan the code\n\n\u003cimg src=\"assets/donate-wechat.jpeg\" width=\"200\"/\u003e\n\n## Screenshots\n\n### Android App\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003cimg src=\"screenshots/app-files.png\" alt=\"files\"/\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cimg src=\"screenshots/app-home.png\" alt=\"home\"/\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cimg src=\"screenshots/app-music-player.jpg\" alt=\"music player\"/\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cimg src=\"screenshots/app-chat.png\" alt=\"chat\"/\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003cimg src=\"screenshots/app-audio.png\" alt=\"audio\"/\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cimg src=\"screenshots/app-images.jpg\" alt=\"images\"/\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cimg src=\"screenshots/app-videos.jpg\" alt=\"videos\"/\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cimg src=\"screenshots/app-rss.jpg\" alt=\"rss\"/\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n### Web Dashboard\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd colspan=\"2\"\u003e\u003cimg src=\"screenshots/web-home.png\" alt=\"home\" width=\"100%\"/\u003e\u003c/td\u003e\n    \u003ctd colspan=\"2\"\u003e\u003cimg src=\"screenshots/web-images.png\" alt=\"images\" width=\"100%\"/\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd colspan=\"2\"\u003e\u003cimg src=\"screenshots/web-videos.png\" alt=\"videos\" width=\"100%\"/\u003e\u003c/td\u003e\n    \u003ctd colspan=\"2\"\u003e\u003cimg src=\"screenshots/web-notes.png\" alt=\"notes\" width=\"100%\"/\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd colspan=\"2\"\u003e\u003cimg src=\"screenshots/web-files.png\" alt=\"files\" width=\"100%\"/\u003e\u003c/td\u003e\n    \u003ctd colspan=\"2\"\u003e\u003cimg src=\"screenshots/web-calls.png\" alt=\"calls\" width=\"100%\"/\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd colspan=\"2\"\u003e\u003cimg src=\"screenshots/web-messages.png\" alt=\"messages\" width=\"100%\"/\u003e\u003c/td\u003e\n    \u003ctd colspan=\"2\"\u003e\u003cimg src=\"screenshots/web-contacts.png\" alt=\"contacts\" width=\"100%\"/\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd colspan=\"2\"\u003e\u003cimg src=\"screenshots/web-audio.png\" alt=\"audio\" width=\"100%\"/\u003e\u003c/td\u003e\n    \u003ctd colspan=\"2\"\u003e\u003cimg src=\"screenshots/web-rss.png\" alt=\"rss\" width=\"100%\"/\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd colspan=\"2\"\u003e\u003cimg src=\"screenshots/web-encryption.png\" alt=\"encryption\" width=\"100%\"/\u003e\u003c/td\u003e\n    \u003ctd colspan=\"2\"\u003e\u003cimg src=\"screenshots/web-screen-mirror.png\" alt=\"screen mirror\" width=\"100%\"/\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd colspan=\"2\"\u003e\u003cimg src=\"screenshots/web-image.png\" alt=\"image viewer\" width=\"100%\"/\u003e\u003c/td\u003e\n    \u003ctd colspan=\"2\"\u003e\u003cimg src=\"screenshots/web-video.png\" alt=\"video player\" width=\"100%\"/\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd colspan=\"2\"\u003e\u003cimg src=\"screenshots/web-chat.png\" alt=\"chat\" width=\"100%\"/\u003e\u003c/td\u003e\n    \u003ctd colspan=\"2\"\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n## Compatibility\n\nPlainApp requires Android 9.0 or higher.\n\n## FAQ\n\n[http://docs.plain.icu/faq.html](http://docs.plain.icu/faq.html)\n\n## Support\n\nPlainApp is fully open-source.  \nIf you have any doubts, you're free to review the code, build your own version, or simply choose not to use it.\n\nIf you run into issues, feel free to open a GitHub issue — I'm always happy to help.\n\nPlease don’t leave a one-star review without giving it a fair try.\n\n## Build\n\n1. Generate `release.jks` file under `$rootProject/app` folder.\n\n```bash\nkeytool -genkeypair -v -keystore ./app/release.jks -alias release -keyalg RSA  -keysize 4096 -validity 36500\n```\n\n2. Create `keystore.properties` file with following content under `$rootProject` folder.\n\n```\nstorePassword=\nkeyPassword=\nkeyAlias=release\nstoreFile=release.jks\n```\n\n## Star history\n\n[![Star History Chart](https://api.star-history.com/svg?repos=ismartcoding/plain-app\u0026type=Date)](https://star-history.com/#ismartcoding/plain-app\u0026Date)\n\n\n\n","funding_links":["https://opencollective.com/plainhub","https://ko-fi.com/ismartcoding"],"categories":["Kotlin"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fplainhub%2Fplain-app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fplainhub%2Fplain-app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fplainhub%2Fplain-app/lists"}