A file manager that doesn't feel like one.
No clutter. No bloat. Just your files, shown the way you want.
It manages your files. That's it. But it does it well.
You open it. You see your recent files right there — no digging through folders. You want to browse? Tap a category. Downloads, Pictures, Documents, Audio, Videos — one tap, you're in.
Every file can be renamed, copied, moved, or deleted. Long press → pick what you want → done. If you're copying or moving, you pick the folder — we show you a clean folder picker with a "paste here" button at the bottom.
It shows image thumbnails instantly. Folders show their sizes. Everything loads fast because it only loads what you can see.
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
No shortcuts. No tutorials copy-pasted. This is built from scratch to learn Android properly.
The UI is Jetpack Compose with Material 3. Every screen — Home, File Browser, Recents, Destination Picker — is its own composable with its own ViewModel. The theme follows the device — light or dark, it adapts.
The architecture is MVVM with a repository layer. ViewModels hold the state. The repository talks to the file system. State flows down, events flow up. No weird callbacks, no spaghetti.
File operations use Kotlin's Result<T>. Every operation — rename, delete, copy, move — either succeeds or fails with a specific error. Not "something went wrong". You get "File not found" or "Permission denied" or "Name already exists". The exact problem.
Navigation uses Navigation3 with a simple back stack. No fragments. No XML. Just a list of screens.
| Layer | What | Why |
|---|---|---|
| Language | Kotlin | Only choice for modern Android |
| UI | Jetpack Compose | Declarative, fast, less code |
| Design | Material 3 | Looks native, supports dynamic color |
| DI | Hilt | Inject once, use everywhere |
| Images | Coil 3 | Async loading, caching, thumbnails |
| Navigation | Navigation3 | Type-safe, composable-first |
| Async | Coroutines + Flow | Non-blocking, lifecycle-aware |
| Serialization | Kotlinx Serialization | Type-safe route args |
This is a learning project. It's not done. Here's what's next:
- Snackbar system using
Channelinstead of StateFlow strings - Use cases for file operations (domain layer)
- Split the shared ViewModel — it's too big right now
- Search
- Favorites / pinned folders
- Multi-select for batch operations
- Sort and filter options in file browser
# Clone
git clone https://github.com/CodePandaaAI/Secure-Box.git
# Open in Android Studio, sync gradle, run on device/emulator
# Needs "All Files Access" permission — the app will ask on first launchNote: Needs Android 11+ (API 30) for
MANAGE_EXTERNAL_STORAGE. Works best on a real device — emulator file system is mostly empty.
Built by learning, not by copying.
Made with Kotlin, Compose, and a lot of late nights.






