The problem
Moving files from my Android phone to my MacBook should be simple. For me it never was.
USB connections dropped. Network transfers failed halfway. Free tools were unreliable, and the good ones were paid.
So I stopped searching and built my own.
What I built
File Manager is an open-source desktop app built with Electron, React and Vite. It aims to feel like Windows Explorer or macOS Finder, with strong filtering and sorting.
Main features:
- Android transfer: over USB (via libmtp) and over Wi-Fi (via FTP)
- Navigation: tabs with per-tab history, breadcrumbs, drag and drop
-
Search: wildcard filters (
*.pdf,IMG_??.jpg) and recursive search - Sorting, grouping and filters: by type, size, date and extension, with live counts
- File operations: rename, copy, cut, paste, compress, undo
- Previews and thumbnails: quick preview with Space
(Add a screenshot or GIF of a phone transfer here.)
Tech stack
- Electron for the desktop shell
- React 18 and Vite for the UI
- Plain CSS and
lucide-reacticons, no UI framework - Vitest for unit tests and Playwright for end-to-end tests
What I learned
1. Electron security matters.
The app uses contextIsolation: true, nodeIntegration: false and sandbox: true. All filesystem work happens in the main process behind ipcMain.handle, and the renderer only sees a small API exposed through a preload script. It's more setup, but it's the right way to build.
2. Talking to phones is hard.
Android over USB uses MTP, which isn't natively supported on macOS. I used libmtp for this, and it needs a one-time brew install libmtp. For Wi-Fi, the phone runs an FTP server app and the file manager connects to it.
3. Testing a desktop app is different.
Unit tests cover the logic, and Playwright drives the real app for end-to-end checks.
4. Shipping is its own project.
Packaging builds, publishing releases on GitHub, and handling unsigned macOS apps all took real time.
Current status
- macOS (Apple silicon): available now
- Windows: build script exists, installer coming soon
- USB transfer: currently macOS and Linux only
- The app is unsigned, so on macOS you right-click and choose Open the first time
Try it and help
It's still early, and I'd love your help:
- Try it and tell me what breaks
- Star the repo if you find it useful
- Pick up an issue and send a PR
🔗 GitHub: https://github.com/shailesh-ss-19-11/filemanager
checkout the release section in github
Your turn
Have you ever struggled with Android ↔ Mac or Windows file transfers? What feature should I build next? Let me know in the comments.
Top comments (2)
For the cut/paste + Android-transfer combination, I'd prioritize one disconnect test before another feature: cut a large file from the Mac to the phone, disconnect halfway, then reconnect and retry while a same-name destination already exists.
The useful assertions are that the source survives until the destination copy is verified complete, the partial destination is distinguishable from a finished file, and retry/undo never deletes an unrelated same-name file. Running that sequence through both MTP and FTP would check the operation semantics beyond the UI happy path. I haven't run File Manager; this is a failure fixture suggested by the dropped-transfer problem and the cut/paste/undo features in the post.
Really nice project. I like that you didn't just build the UI, but also handled the harder parts like MTP, IPC security, testing, and packaging. The Android-to-Mac transfer problem is definitely something I've run into before. I'll check out the repo!