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-react icons, 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.