手机与电脑必须处于同一 Wi-Fi 局域网,跨网段无法访问;自行编译前需先生成 release.jks 并填写 keystore.properties;构建依赖同级的 plain-core 仓库,需先用 ./scripts/core local 关联
plain-app
plainhubAGPL-3.0活跃维护在电脑浏览器里安全管理和访问手机上的文件、媒体、联系人、短信与通话记录,无需数据线或云同步。
🔥 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.
从 Google Play、F-Droid 或 GitHub Releases 安装 APK;自建需在 app 目录生成 release.jks 并在根目录配置 keystore.properties 后执行 ./gradlew :app:assembleDebug需要 Android 9.0 或更高版本的安卓手机;电脑端只需同网络下支持浏览器的设备,无需安装客户端。README 未提及 GPU 或显存要求。
开源安卓应用,把手机变成局域网自托管的文件与消息管理面板,浏览器直连
在电脑浏览器里安全管理和访问手机上的文件、媒体、联系人、短信与通话记录,无需数据线或云同步。
核心能力
- 浏览器访问手机文件、媒体、联系人、短信与通话记录
- TLS 加 XChaCha20-Poly1305 加密手机与浏览器间流量
- 实时镜像手机通知并支持带音频与远程控制的投屏
- 内置 Markdown 笔记、RSS 阅读器与 DLNA/Chromecast 投屏
- 支持 PWA,可像原生应用一样固定到桌面
容易踩的坑
- v3.3.25Release 3.3.25最新正式版2026-09-11 · 2026-09-11 14:10 UTC
What's Changed
Improvements
- Starts even when the port is taken — if another app already occupies the configured port, PlainApp now picks a free one automatically instead of failing to start
- Clearer certificate warning help — the in-app FAQ for the browser certificate warning now includes a step-by-step animated demo
Fixes
- Fixed the web login button taking several seconds to appear on some networks
- Fixed Stay Online mode: the screen no longer locks, a new "Go dark now" button blacks it out instantly, and there is no grey border on some phones (e.g. Samsung)
Security
VirusTotal Scan
File Status Scan Report PlainApp-3.3.25-64bit-Recommended.apk✅ 0/65 Clean View Report PlainApp-3.3.25-Old-32bit.apk✅ 0/63 Clean View Report PlainApp-3.3.25-Google-Play.aab✅ 0/56 Clean View Report SLSA Provenance (Level 3)
The
.intoto.jsonlfile is a signed SLSA provenance document covering all release artifacts (APKs + AAB). Verify with slsa-verifier:slsa-verifier verify-artifact PlainApp-3.3.25-64bit-Recommended.apk \ --provenance-path multiple.intoto.jsonl \ --source-uri github.com/plainhub/plain-app - v3.3.24Release 3.3.242026-09-10 · 2026-09-10 21:15 UTC
查看更新说明
What's Changed
New Features
- QR code pairing — pair with your desktop by scanning the QR code shown in its Nearby panel
- Feed sync retry banner — failed feeds show up in one banner with per-feed retry, no more pop-up dialogs
- Bulk move media (#360) — move multiple photos and videos into a folder from the web client in one go
Improvements
- More reliable large uploads — uploaded parts are assembled in the background, no more upload timeouts
- Fresh look for alert banners — Material You style across the app
Fixes
- Fixed a crash when stopping screen mirroring
- Fixed the version number reported to the desktop client
Security
VirusTotal Scan
File Status Scan Report PlainApp-3.3.24-64bit-Recommended.apk✅ 0/50 Clean View Report PlainApp-3.3.24-Old-32bit.apk✅ 0/50 Clean View Report PlainApp-3.3.24-Google-Play.aab✅ 0/38 Clean View Report SLSA Provenance (Level 3)
The
.intoto.jsonlfile is a signed SLSA provenance document covering all release artifacts (APKs + AAB). Verify with slsa-verifier:slsa-verifier verify-artifact PlainApp-3.3.24-64bit-Recommended.apk \ --provenance-path multiple.intoto.jsonl \ --source-uri github.com/plainhub/plain-app - v3.3.22Release 3.3.222026-09-09 · 2026-09-09 15:17 UTC
查看更新说明
What's Changed
Service & Permissions
- First-run permission wizard for starting the service: step-by-step guidance for notification and storage permissions, with clearer wording and no silent auto-start when required permissions are missing
Feeds
- New first-run discovery mode: browse the built-in feed catalog right on the Feeds page and subscribe with a per-feed button — no page switching, then tap "Start reading" when ready. Deleting your last feed returns to discovery mode
- Fixed the top bar getting stuck (unable to expand) after swiping to another article in the pager
- "Load full content" button now only appears for feeds that serve summaries
Web Client
- Fixed chunked upload file ID collisions that could corrupt uploaded files; the app now also verifies total chunk size before merging
Security
- File responses now include
Content-Security-Policy: sandboxandX-Content-Type-Options: nosniff, blocking stored XSS via SVG/HTML files in/fsand guest shares - Removed trust in client-supplied
Forwardedheaders: the/shutdownloopback guard, login rate limiting, and the DLNA allowlist now key on the real socket IP and cannot be spoofed
Security
VirusTotal Scan
File Status Scan Report PlainApp-3.3.22-64bit-Recommended.apk✅ 0/0 Clean View Report PlainApp-3.3.22-Old-32bit.apk✅ 0/66 Clean View Report PlainApp-3.3.22-Google-Play.aab✅ 0/61 Clean View Report SLSA Provenance (Level 3)
The
.intoto.jsonlfile is a signed SLSA provenance document covering all release artifacts (APKs + AAB). Verify with slsa-verifier:slsa-verifier verify-artifact PlainApp-3.3.22-64bit-Recommended.apk \ --provenance-path multiple.intoto.jsonl \ --source-uri github.com/plainhub/plain-app - v3.3.21Release 3.3.212026-09-08 · 2026-09-08 02:42 UTC
查看更新说明
What's Changed
- MP4 videos now play correctly in Chromium-based browsers when served from the web client (remuxed with mebx metadata track)
- Markdown editor toolbar strings are now localized across all languages
- XML reader now merges adjacent text and CDATA sections into a single text node
Security
VirusTotal Scan
File Status Scan Report PlainApp-3.3.21-64bit-Recommended.apk✅ 0/65 Clean View Report PlainApp-3.3.21-Old-32bit.apk✅ 0/64 Clean View Report PlainApp-3.3.21-Google-Play.aab✅ 0/61 Clean View Report SLSA Provenance (Level 3)
The
.intoto.jsonlfile is a signed SLSA provenance document covering all release artifacts (APKs + AAB). Verify with slsa-verifier:slsa-verifier verify-artifact PlainApp-3.3.21-64bit-Recommended.apk \ --provenance-path multiple.intoto.jsonl \ --source-uri github.com/plainhub/plain-app - v3.3.20Release 3.3.202026-09-07 · 2026-09-07 02:50 UTC
查看更新说明
What's Changed
New
- One-tap quick note card on ToolsPage, with undo toast
Fixed
- Migrated to Room 3 (bundled driver) to fix raw queries occasionally reading stale data; NotesViewModel is now a singleton shared with GraphQL
- Moved all Room entity state into primary constructors so data-class equals covers every column, with a guard test
- Pinned GraphQL ID/Instant scalar names to prevent R8 obfuscation breakage
Security
VirusTotal Scan
File Status Scan Report PlainApp-3.3.20-64bit-Recommended.apk✅ 0/65 Clean View Report PlainApp-3.3.20-Old-32bit.apk✅ 0/65 Clean View Report PlainApp-3.3.20-Google-Play.aab✅ 0/60 Clean View Report SLSA Provenance (Level 3)
The
.intoto.jsonlfile is a signed SLSA provenance document covering all release artifacts (APKs + AAB). Verify with slsa-verifier:slsa-verifier verify-artifact PlainApp-3.3.20-64bit-Recommended.apk \ --provenance-path multiple.intoto.jsonl \ --source-uri github.com/plainhub/plain-app
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
PlainApp
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.
Why PlainApp?
Most phone-management tools either route your data through their own servers, lock features behind subscriptions, or plague you with ads. PlainApp is different:
- 100% local — your data never leaves your network
- End-to-end encrypted — every connection is secured with TLS + XChaCha20-Poly1305
- Completely free and ad-free — no purchases, no upsells, ever
- Fully open-source — audit the code, build your own binary, or contribute
Features
🌐 Web-Based Phone Management
Open 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.
| Category | What you can do |
|---|---|
| Files | Browse internal storage, SD card, and USB drives; upload, download, rename, delete |
| Media | View and manage photos, videos, and audio; stream them directly in the browser |
| Contacts | View, search, and manage your contacts |
| SMS & Calls | Read messages and call logs; send SMS from your desktop |
| Apps | List installed apps and export APKs |
| Notifications | Mirror phone notifications to the browser in real time |
| Screen Mirror | Live-stream the phone screen to the browser with audio and remote control support |
| Device Info | Check battery, storage, network, and system details |
📱 Built-in Android Tools
PlainApp is also a capable standalone app — not just a server:
- Markdown Notes — write and organize notes with a clean editor
- RSS Reader — follow your favorite websites with a distraction-free reader
- Video & Audio Player — full-featured media player with playlist support
- TV Cast — cast media to any DLNA/Chromecast-compatible TV
- Peer-to-Peer Chat & File Sharing — share files and messages directly between devices without a server
- Pomodoro Timer — stay focused with a built-in work timer
- Sound Meter — measure ambient noise levels in real time
🔒 Privacy & Security
- Zero data sent to any third-party server
- All traffic between phone and browser is encrypted (TLS + XChaCha20-Poly1305)
- No account registration required
Video: https://www.youtube.com/watch?v=TjRhC8pSQ6Q
Reddit: https://www.reddit.com/r/plainapp
Discord: https://discord.gg/RQWcS6DEEe
QQ Group: 812409393
How PlainApp Compares
| Feature | PlainApp | AirDroid | KDE Connect | AnExplorer | Pushbullet |
|---|---|---|---|---|---|
| Open source | ✅ | ❌ | ✅ | ✅ | ❌ |
| 100% local / no cloud required | ✅ | ⚠️ partial | ✅ | ✅ | ❌ |
| End-to-end encrypted (local) | ✅ | ⚠️ paid | ❌ | ❌ | ❌ |
| Ad-free | ✅ | ⚠️ paid | ✅ | ⚠️ paid | ⚠️ paid |
| Free all features | ✅ | ⚠️ freemium | ✅ | ⚠️ freemium | ⚠️ freemium |
| Web browser access (no desktop app needed) | ✅ | ✅ | ❌ | ❌ | ✅ |
| File manager (browser UI) | ✅ | ✅ | ⚠️ limited | ✅ | ❌ |
| SMS from desktop | ✅ | ✅ | ✅ | ❌ | ✅ |
| Screen mirroring | ✅ | ✅ | ✅ | ❌ | ❌ |
| Media streaming in browser | ✅ | ⚠️ limited | ❌ | ❌ | ❌ |
| Notification mirroring | ✅ | ✅ | ✅ | ❌ | ✅ |
| Built-in RSS reader | ✅ | ❌ | ❌ | ❌ | ❌ |
| Markdown notes | ✅ | ❌ | ❌ | ❌ | ❌ |
| P2P chat & file sharing | ✅ | ⚠️ paid | ❌ | ❌ | ⚠️ limited |
| TV casting (DLNA/Chromecast) | ✅ | ✅ | ❌ | ❌ | ❌ |
| PWA support | ✅ | ❌ | ❌ | ❌ | ❌ |
| No account required | ✅ | ❌ | ✅ | ✅ | ❌ |
✅ Fully supported ⚠️ Partially supported or requires paid plan ❌ Not supported
Donations :heart:
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.
Your donation is highly appreciated. Thank you!
-
Use WeChat to scan the code
Screenshots
Android App
Web Dashboard
Compatibility
PlainApp requires Android 9.0 or higher.
FAQ
Support
PlainApp is fully open-source.
If you have any doubts, you're free to review the code, build your own version, or simply choose not to use it.
If you run into issues, feel free to open a GitHub issue — I'm always happy to help.
Please don’t leave a one-star review without giving it a fair try.
Work on plain-core
Keep plain-core next to this repository. Run from this repository root.
./scripts/core local # Use local plain-core
./scripts/core local --off # Stop using local paths
./scripts/core update # Lock this project to the latest remote commit
Before publishing Rust consumer changes, publish Core first, run ./scripts/core update, and commit the resulting plain-rs/Cargo.lock with the consumer source. Verify with local overrides disabled:
bash scripts/check-ui.sh
./gradlew :plain-common:testAndroidHostTest :shared:testAndroidHostTest
./gradlew :app:assembleDebug
Build
- Generate
release.jksfile under$rootProject/appfolder.
keytool -genkeypair -v -keystore ./app/release.jks -alias release -keyalg RSA -keysize 4096 -validity 36500
- Create
keystore.propertiesfile with following content under$rootProjectfolder.
storePassword=
keyPassword=
keyAlias=release
storeFile=release.jks