Drag file or folder rows onto a folder in the list or sidebar to move them when writes are enabled. Name clicks keep their existing behavior. Archive contents cannot be moved, and existing items are never overwritten.
A dependency-free, single-file web file browser built entirely with the Python standard library. It provides a responsive, Synology File Station-inspired SPA for browsing and managing files.
- Browse folders with browser Back navigation; search or sort by name, size, and modification date
- Expand, collapse, and navigate folders using the sidebar tree
- Browse ZIP and TAR archives as read-only folders without extracting them to disk
- Download folders as streamed ZIP files with no compression (
ZIP_STORED), including subfolders and empty folders - Preview browser-supported images, audio, video, plain text, and Markdown with links and tables; download any file
- Seek through audio and video with HTTP byte-range support; see a clear message when playback fails
- Upload multiple files using the file picker or drag and drop
- Track each file with its own progress bar, transferred size, and completion status
- Stream upload data to disk without buffering entire files in memory
- Create folders, rename items, and recursively delete files and folders
- Read-only mode by default
- CLI options and JSON configuration
- Protection against path traversal and symbolic-link escapes outside the configured root
- Responsive interface for desktop and mobile browsers
- Automatic UI language selection based on browser preferences:
- English:
en-USanden-* - Spanish:
es-ESandes-* - Japanese:
ja-JPandja-* - Korean:
ko-KRandko-* - Unsupported languages fall back to English
- English:
Click an archive name to browse its folders, or use its Download button to download the original archive. Supported formats are .zip, .tar, .tar.gz, .tgz, .tar.bz2, .tbz, .tbz2, .tar.xz, and .txz.
Archive contents support downloads, existing previews, the sidebar tree, and browser history. They are always read-only, including when uploads are enabled. Files inside an archive cannot be uploaded, renamed, deleted, or edited.
Folder Download buttons bundle the selected folder into an uncompressed ZIP, including folders inside an archive. ZIP data streams directly to the browser without creating a temporary ZIP file. Hidden entries follow show_hidden, and filesystem symbolic links are skipped.
Encrypted ZIP members cannot be opened. Unsafe member paths and archive links are excluded. Archives inside another archive are downloadable files, not additional virtual folders. Large compressed archives may take longer to browse or seek through; compression support depends on the Python runtime. RAR and 7z are not supported.
- Python 3.9 or later
- No third-party Python packages
Run the following command from the project directory:
python3 simple_http_file_browser.py --root /path/to/filesOpen this address in your browser:
http://localhost:8000
By default, the server listens on all network interfaces (0.0.0.0) and runs in read-only mode.
Use --upload to allow uploads, folder creation, renaming, and deletion:
python3 simple_http_file_browser.py \
--root /path/to/files \
--port 8080 \
--uploadThe default bind address already allows connections from other devices on your LAN:
python3 simple_http_file_browser.py \
--port 8080 \
--root /path/to/filesThen open the server computer's IP address from the other device:
http://SERVER_IP:8080
--config PATH JSON configuration file (default: config.json)
--host HOST Bind address (default: 0.0.0.0)
--port PORT Server port (default: 8000)
--root PATH Top-level accessible folder (default: current directory)
--upload Enable uploads and file-management operations
--read-only Disable write operations
--version Print the version
Display the complete help output with:
python3 simple_http_file_browser.py --helpConfiguration precedence is:
- CLI options
- JSON configuration file
- Program defaults
Copy the supplied example configuration:
cp config.example.json config.json
python3 simple_http_file_browser.pyExample:
{
"host": "0.0.0.0",
"port": 8000,
"root": ".",
"upload": false,
"title": "My File Station",
"show_hidden": false,
"max_upload_mb": 512,
"overwrite": false
}| Option | Description |
|---|---|
host |
Address on which the server listens |
port |
Server port |
root |
Top-level folder accessible through the browser |
upload |
Whether write operations are enabled |
title |
Title displayed in the web interface |
show_hidden |
Whether names beginning with . are shown |
max_upload_mb |
Maximum upload size per HTTP request, in MB |
overwrite |
Whether uploads replace an existing file with the same name |
Specify a different configuration file with:
python3 simple_http_file_browser.py --config /path/to/my-config.json- Files are deleted immediately.
- Deleting a folder recursively deletes all files and subfolders inside it.
- Symbolic links inside a deleted folder are removed without following their targets.
- There is no trash or recovery feature.
This server does not include user authentication or HTTPS.
- The default
0.0.0.0address exposes the server on every available network interface. Use it only on a trusted network. - To restrict access to the same computer, start the server with
--host 127.0.0.1. - Enable
upload: trueor--uploadonly when write access is required. - If internet exposure is required, place the server behind a reverse proxy configured with authentication and TLS.
- Do not select a broader
rootfolder than necessary.
Press Ctrl+C in the terminal running the server.