A simple file manager for Django with S3 support
Project description
FileChest
A zero-configuration file browser for local directories and Amazon S3, built with Python/Django.
uvx filechest /path/to/directory
uvx filechest s3://bucket-name/prefix
No setup required. Just run the command and start browsing.
Features
- Browse local directories and S3 buckets
- Upload files (drag & drop supported)
- Download files
- Create, rename, delete files and folders
- Copy and move files between directories
- Preview images, videos, audio, PDF, and text files
- List/Grid view toggle
Installation
We recommend using uv for the best experience. See Installing uv for setup instructions.
# Using uvx (recommended, no installation needed)
uvx filechest /path/to/directory
# Or install globally with pipx
pipx install filechest
Usage
Browse a local directory:
filechest /path/to/directory
Browse an S3 bucket:
filechest s3://bucket-name/prefix
List all accessible S3 buckets:
filechest s3://
The command starts a web server and opens your browser automatically.
Command Line Options
usage: filechest [-h] [-p PORT] [--no-browser] [-g] [-a AWS_PROFILE]
[--max-buckets MAX_BUCKETS] [--max-entries MAX_ENTRIES]
path
Start a file manager for a directory or S3 bucket
positional arguments:
path Path to directory, S3 URL (s3://bucket/prefix), or "s3://" to list all buckets
options:
-h, --help show this help message and exit
-p, --port PORT Port to run the server on (default: 8000)
--no-browser Do not open browser automatically
-g, --gui Open GUI window (Experimental)
-a, --aws-profile AWS_PROFILE
AWS profile name to use (sets AWS_PROFILE environment variable)
--max-buckets MAX_BUCKETS
Maximum number of S3 buckets to load (default: 100)
--max-entries MAX_ENTRIES
Maximum number of files/directories to list (default: 1000)
S3 Configuration
FileChest uses your existing AWS credentials. Configure them using the AWS CLI:
# Standard credentials
aws configure
# SSO authentication
aws sso configure
Or set environment variables directly:
export AWS_ACCESS_KEY_ID=your-access-key
export AWS_SECRET_ACCESS_KEY=your-secret-key
export AWS_DEFAULT_REGION=us-east-1
Use the -a option to specify a named profile:
filechest -a my-profile s3://bucket-name
GUI Mode (Experimental)
FileChest can run as a standalone GUI application using pywebview.
filechest -g /path/to/directory
Installation for GUI
Install the appropriate variant for your platform:
# Windows / macOS
uv tool install filechest[webview]
# Linux (GTK)
uv tool install filechest[gtk]
System Dependencies
pywebview may require additional system libraries depending on your platform. See the pywebview installation guide for details.
For example, on WSL2 Ubuntu 24.04, the following packages are required:
sudo apt install pkg-config cmake libcairo2-dev libgirepository1.0-dev gir1.2-gtk-3.0 gir1.2-webkit2-4.1
Using as a Django Application
FileChest can also be run as a standard Django web application, enabling multi-user file management with access control.
Setup
git clone https://github.com/atsuoishimoto/filechest.git
cd django-filechest
uv sync
uv run python manage.py migrate
uv run python manage.py createsuperuser
uv run python manage.py runserver
Open http://127.0.0.1:8000/admin/ to configure volumes and permissions.
Key Concepts
Volume: A storage location (local directory or S3 bucket) that users can browse.
Role: Access level granted to a user for a volume.
- Editor – Full access: browse, upload, download, create, rename, delete, copy, move
- Viewer – Read-only: browse and download only
Creating a Volume
In Django Admin, go to Filechest > Volumes and add a new volume:
| Field | Description |
|---|---|
name |
URL-safe identifier used in the URL path |
verbose_name |
Human-readable name shown in UI |
path |
Local path (/data/files) or S3 URL (s3://bucket/prefix) |
public_read |
If checked, anyone can view without logging in |
max_file_size |
Maximum upload size in bytes (default: 10MB) |
is_active |
Uncheck to disable the volume |
Access Control
Access is determined by the following rules, evaluated in order:
-
Superusers always have Editor access to all volumes.
-
Users with VolumePermission get the assigned role:
- Go to Filechest > Volume permissions in Django Admin
- Select a user and volume, then assign
editororviewerrole
-
Public volumes (
public_read=True): Anyone without explicit permission gets Viewer access, including anonymous users. -
Private volumes (
public_read=False): Users without permission cannot access the volume at all.
Examples
Team shared drive: Create a volume, add VolumePermission for each team member with editor role.
Public file hosting: Create a volume with public_read=True. Anyone can browse and download. Add specific users as editor to allow uploads.
Personal storage: Create a volume per user with VolumePermission (editor). Leave public_read=False so only that user can access it.
License
MIT License
Links
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file filechest-0.3.0.tar.gz.
File metadata
- Download URL: filechest-0.3.0.tar.gz
- Upload date:
- Size: 417.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
098b30bd27d11cb6a328e8a65b5c376df10846383ead3b6f126e96e0058ac500
|
|
| MD5 |
2b7ae8aed7ccdd0c8509911dc31e4694
|
|
| BLAKE2b-256 |
294cd81bdfd0f0f6580be78de959a4f32c667b6a441d2618d38082288964ea3a
|
Provenance
The following attestation bundles were made for filechest-0.3.0.tar.gz:
Publisher:
publish.yml on atsuoishimoto/filechest
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
filechest-0.3.0.tar.gz -
Subject digest:
098b30bd27d11cb6a328e8a65b5c376df10846383ead3b6f126e96e0058ac500 - Sigstore transparency entry: 832882162
- Sigstore integration time:
-
Permalink:
atsuoishimoto/filechest@be08ff2df6d2507efb0959ec4fe06a1fd7b2977c -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/atsuoishimoto
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@be08ff2df6d2507efb0959ec4fe06a1fd7b2977c -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file filechest-0.3.0-py3-none-any.whl.
File metadata
- Download URL: filechest-0.3.0-py3-none-any.whl
- Upload date:
- Size: 487.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
98013611273390888d8c6f08121972d8ee1e7193690c706dcf42adf3349523a8
|
|
| MD5 |
f21dae6297cd04d865e777eed03dbe9a
|
|
| BLAKE2b-256 |
36a7adf940adef4c9aae80b52abafa3c4f08a954bcdb04522099b4026de93b11
|
Provenance
The following attestation bundles were made for filechest-0.3.0-py3-none-any.whl:
Publisher:
publish.yml on atsuoishimoto/filechest
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
filechest-0.3.0-py3-none-any.whl -
Subject digest:
98013611273390888d8c6f08121972d8ee1e7193690c706dcf42adf3349523a8 - Sigstore transparency entry: 832882165
- Sigstore integration time:
-
Permalink:
atsuoishimoto/filechest@be08ff2df6d2507efb0959ec4fe06a1fd7b2977c -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/atsuoishimoto
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@be08ff2df6d2507efb0959ec4fe06a1fd7b2977c -
Trigger Event:
workflow_dispatch
-
Statement type: