v1 · self-hosted · runs anywhere Docker runs

Browse your Linux drives
like it's Windows Explorer.

A fast, browser-based file manager for a Linux host — full filesystem access, durable background copy/move/delete jobs, a proper Trash, permissions editing, and keyboard navigation that actually feels native.

ASP.NET Core 10 Angular + PrimeNG SQLite Docker Compose Apache 2.0
https://files.your-server.lan
Explorer details view with date grouping and file listing
4 drivesmounted & live
Copy jobrunning in background

Built for admins who live on the terminal — but want a Windows-Explorer-grade UI when they don't.

Features

Everything a real file manager needs

Not a toy uploader — a Details-view explorer with the operations you'd expect from a desktop OS, running entirely in the browser.

Details-view listing

Sortable columns, Windows-style date grouping (Today / Yesterday / Last week…), multi-select via click, Shift/Ctrl, or a mouse rubber-band drag, and a right-click context menu.

Full keyboard navigation

Arrows, Shift+arrows, Ctrl+A, Enter, Backspace, F2, Delete, Ctrl+C/X/V, and instant type-ahead search — the grid is fully operable without a mouse.

Durable background jobs

Copy, move, and delete run as background jobs that keep going even if you close the tab, with live progress on the Tasks page pushed over SignalR.

Safe deletes

Deleting moves items to a per-drive hidden Trash instead of removing them immediately — restore or permanently purge from the dedicated Trash page.

Drive sidebar

Left-hand drive list with free-space usage bars. The sidebar is resizable and its width is shared across Explorer, Tasks, and Trash.

Properties & permissions

A Properties dialog shows size/type/dates, plus a Permissions tab to view and change owner, group, and rwx bits (chmod/chown) when the API runs on Linux.

File preview

Inline preview for images, text, PDF, audio, and video, without ever leaving the folder listing.

Recursive search

Search the current folder and everything beneath it — instant type-ahead search finds what you need without switching views.

JWT-based auth

Login with a change-password flow baked in — no anonymous access. Bring your own reverse proxy for TLS termination.

See it in action

A UI that feels like home

Screenshots straight from the local dev sandbox — the same views you get once it's running against your own drives.

Under the hood

Two containers. One clean API boundary.

The API treats one configured physical directory as its "root" (FileSystem:RootPath, default /host_root) — every path the client sees is relative to that. In Docker, the host's real / is bind-mounted there, so the API can reach anything the host can.

The API is designed to run as root so it can browse, chmod, and chown anywhere on the host. Keep it off the public internet, put it behind a trusted network/VPN, and always set a strong JWT_KEY and admin password.

Read the full architecture doc →
project layout
# backend — ASP.NET Core 10 Web API
backend/FileExplorer.Api/
├── Controllers/        # auth, files, drives, operations,# tasks, trash, permissions, search
└── Services/Jobs/      # background job queue + worker

# frontend — Angular (standalone + signals) + PrimeNG
frontend/src/app/
├── features/           # shell, explorer, tasks, trash, login
└── core/                # axios client, auth, typed API services

# two containers, wired by docker-compose.yml
api   Kestrel · EF Core · SQLite · SignalR
web   nginx serving Angular + proxying /api /hubs
Keyboard navigation

Fully operable without a mouse

Click a row, or Tab into the grid, to give the listing focus — then everything below just works.

Selection & navigation

  • / Move focus to previous/next row
  • Shift+/Extend the current selection
  • Page Up/DownJump focus to first/last row
  • Ctrl+ASelect every item in the folder
  • EscClear the current selection

Opening & navigating

  • EnterOpen folder, or open/preview file
  • BackspaceGo up one folder level
  • Click-dragRubber-band (lasso) select
  • Type to searchInstant quick-search, no click needed

File operations

  • Ctrl+CCopy the selected items
  • Ctrl+XCut the selected items
  • Ctrl+VPaste (runs as a background job)
  • F2Rename the focused item
  • DeleteMove to Trash (with confirmation)
Quick start

Running in five steps

The recommended path is Docker Compose — two containers, wired together, nothing else to install.

1

Clone the repository

git clone https://github.com/pavangayakwad/linux-drive-explorer.git
cd linux-drive-explorer
2

Configure environment variables

cp .env.example .env
openssl rand -base64 48   # paste output into JWT_KEY
3

Choose what the app can see

By default the entire host filesystem (/) is bind-mounted into the API container at /host_root. Narrow this in docker-compose.yml if you only want specific paths exposed.

4

Build and start the containers

docker compose up -d --build
5

Open the app

Navigate to http://<host>:8080. If ADMIN_PASSWORD was left blank, fetch the generated password from the logs:

docker compose logs api | grep -A2 "Password:"

Point it at your server. Browse in seconds.

Self-hosted, open source under Apache 2.0, and built to sit behind your own VPN or reverse proxy.