A lightweight, self-hosted file manager for Linux with a dual-pane interface, background transfers, rsync support, fast local copies and moves, browser uploads, and direct URL downloads. Built with security in mind.
Python
0
111 commits
updated Sep 23, 2026
Web-based file management and transfer for Linux.
Browse local directories, upload files, and transfer or move files between directories from a browser. LiteSync is designed to run on small Linux systems such as Raspberry Pi and home servers.
LiteSync is a small web application for managing files on a Linux machine without needing a traditional file manager or SSH session.
It was built primarily for Linux systems where files may live across different disks or mounted filesystems. The web interface provides directory browsing and file operations, while the backend handles the actual filesystem work and transfer processes.
The application is intentionally built around existing Linux and Python functionality rather than implementing its own file-transfer protocol.
For transfers, LiteSync can use either:
os.copy_file_range()Moves within the same filesystem use os.rename() directly instead of copying the file.
os.copy_file_range() for normal kernel-assisted copiesrsync when resumability or exclusion rules are requiredLiteSync provides a unified Upload modal with two options:
/tmp.Transfer state and activity information are stored in SQLite.
The application can therefore retain task history across application restarts rather than keeping all transfer information only in browser state.
LiteSync includes installation and removal scripts for running the application as a systemd service.
The service runs under a dedicated system user and restricts filesystem access to the directories configured in allowed_roots.
copy_file_range()?LiteSync does not try to replace rsync.
For straightforward local copies, invoking a separate rsync process adds functionality that may not be necessary. Linux provides copy_file_range() for copying data between file descriptors, so LiteSync can use it for simple transfers.
When a transfer needs features such as:
LiteSync starts an rsync subprocess instead.
This keeps the normal copy path simple while still allowing rsync to handle operations where it is useful.
rsyncpython3-venvSupported architectures include:
x86_64 / amd64aarch64 / arm64LiteSync is intended for systems such as:
os.copy_file_range() is used when available. LiteSync also has a fallback path for systems where the kernel/filesystem combination cannot use it for a particular copy.
For development or manual installation:
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp config.example.toml config.toml
Edit config.toml and configure:
allowed_rootssecret_keyGenerate a secret key:
python -c "import secrets; print(secrets.token_hex(32))"
Generate a password hash:
python -m app.auth hash "yourpassword"
Add the generated values to config.toml and protect the file:
chmod 600 config.toml
Start LiteSync:
uvicorn app.main:app --host 0.0.0.0 --port 8000 --workers 1
Open:
http://<host>:8000/
LiteSync currently expects a single Uvicorn worker. Transfer state, background task execution, and SSE connections are maintained by the application process.
The included installer can install LiteSync as a systemd service on Debian/Ubuntu-based Linux systems.
Download a release archive:
cd /tmp
curl -L https://codeload.github.com/avayadhakal/LiteSync/tar.gz/refs/tags/v0.1.0-beta \
-o LiteSync-0.1.0-beta.tar.gz
tar -xzf LiteSync-0.1.0-beta.tar.gz
cd LiteSync-0.1.0-beta
sudo bash install.sh
The installer:
/opt/litesync.litesync system user.systemd service.Check the service:
sudo systemctl status litesync
View logs:
sudo journalctl -u litesync -f
Restart:
sudo systemctl restart litesync
Stop:
sudo systemctl stop litesync
Start:
sudo systemctl start litesync
Enable at boot:
sudo systemctl enable litesync
Then open:
http://<host-or-pi-ip>:8000/
LiteSync is also available as a Docker image and supports both linux/amd64 and linux/arm64.
The published image is:
avayadhakal/litesync:latest
For Docker deployment instructions, including Docker Compose, storage mounts, configuration, permissions, and updates, see the Docker Deployment Guide.
Download the new release archive and run the installer again.
The installer is designed to be idempotent and preserves the existing configuration and application data.
In particular, existing installations should retain:
config.toml
data/litesync.db
data/tasks/
For Docker deployments, see the Docker Deployment Guide for update instructions.
Remove LiteSync and its service:
sudo bash uninstall.sh
To remove the application while keeping its configuration and data:
sudo bash uninstall.sh --keep-data
--keep-data preserves:
config.tomldata/LiteSync uses TOML configuration through Python's standard-library tomllib module.
The default configuration file is:
config.toml
A different configuration file can be selected with:
export LITESYNC_CONFIG=/path/to/config.toml
At minimum, the configuration needs:
allowed_rootssecret_keyFor containerized deployments (Docker), you can override configuration keys using environment variables:
LITESYNC_ALLOWED_ROOTS (Colon-separated list of allowed directories)LITESYNC_PORT (The external port, useful for CSRF validation when using Docker port mapping)LITESYNC_ALLOWED_ORIGINS (Comma-separated list of allowed origins)LITESYNC_MAX_UPLOAD_SIZE_MB (Max file upload size in MB)Docker tip: If using these variables via Docker Compose, your
config.tomlonly needs yoursecret_key,data_dir = "/data", and your[[users]]credentials.
LiteSync does not expose the entire filesystem to the web application.
Only paths listed in allowed_roots can be accessed.
The restriction applies to:
Only add directories that LiteSync should be able to access.
LiteSync is a Python/FastAPI application with a small browser-based frontend.
The backend is responsible for:
The frontend handles:
For the detailed component structure and transfer flow, see the Architecture Document.
LiteSync is intended to be used on a trusted Linux system and should not be exposed directly to the public internet without appropriate network controls.
The application includes several restrictions around filesystem access:
allowed_rootssystemd service usersystemd filesystem restrictionsThe systemd service limits LiteSync's filesystem access to the configured locations.
sudo systemctl status litesync
sudo journalctl -u litesync --no-pager -n 100
sudo journalctl -u litesync -f
sudo systemctl restart litesync
rsync --version
python3 --version
LiteSync requires Python 3.11 or newer.
Uploads use:
data/tmp
Make sure the filesystem containing this directory has enough free space for the files being uploaded.
Contributions are welcome.
See CONTRIBUTING.md for development setup, tests, and contribution guidelines.
LiteSync is released under the MIT License.
106 commits
5 commits
Python
47.6%
JavaScript
36.3%
CSS
9.3%
HTML
4.5%
Shell
2.0%
A lightweight, self-hosted file manager for Linux with a dual-pane interface, background transfers, rsync support, fast local copies and moves, browser uploads, and direct URL downloads. Built with security in mind.
Python
0
111 commits
updated Sep 23, 2026
Web-based file management and transfer for Linux.
Browse local directories, upload files, and transfer or move files between directories from a browser. LiteSync is designed to run on small Linux systems such as Raspberry Pi and home servers.
LiteSync is a small web application for managing files on a Linux machine without needing a traditional file manager or SSH session.
It was built primarily for Linux systems where files may live across different disks or mounted filesystems. The web interface provides directory browsing and file operations, while the backend handles the actual filesystem work and transfer processes.
The application is intentionally built around existing Linux and Python functionality rather than implementing its own file-transfer protocol.
For transfers, LiteSync can use either:
os.copy_file_range()Moves within the same filesystem use os.rename() directly instead of copying the file.
os.copy_file_range() for normal kernel-assisted copiesrsync when resumability or exclusion rules are requiredLiteSync provides a unified Upload modal with two options:
/tmp.Transfer state and activity information are stored in SQLite.
The application can therefore retain task history across application restarts rather than keeping all transfer information only in browser state.
LiteSync includes installation and removal scripts for running the application as a systemd service.
The service runs under a dedicated system user and restricts filesystem access to the directories configured in allowed_roots.
copy_file_range()?LiteSync does not try to replace rsync.
For straightforward local copies, invoking a separate rsync process adds functionality that may not be necessary. Linux provides copy_file_range() for copying data between file descriptors, so LiteSync can use it for simple transfers.
When a transfer needs features such as:
LiteSync starts an rsync subprocess instead.
This keeps the normal copy path simple while still allowing rsync to handle operations where it is useful.
rsyncpython3-venvSupported architectures include:
x86_64 / amd64aarch64 / arm64LiteSync is intended for systems such as:
os.copy_file_range() is used when available. LiteSync also has a fallback path for systems where the kernel/filesystem combination cannot use it for a particular copy.
For development or manual installation:
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp config.example.toml config.toml
Edit config.toml and configure:
allowed_rootssecret_keyGenerate a secret key:
python -c "import secrets; print(secrets.token_hex(32))"
Generate a password hash:
python -m app.auth hash "yourpassword"
Add the generated values to config.toml and protect the file:
chmod 600 config.toml
Start LiteSync:
uvicorn app.main:app --host 0.0.0.0 --port 8000 --workers 1
Open:
http://<host>:8000/
LiteSync currently expects a single Uvicorn worker. Transfer state, background task execution, and SSE connections are maintained by the application process.
The included installer can install LiteSync as a systemd service on Debian/Ubuntu-based Linux systems.
Download a release archive:
cd /tmp
curl -L https://codeload.github.com/avayadhakal/LiteSync/tar.gz/refs/tags/v0.1.0-beta \
-o LiteSync-0.1.0-beta.tar.gz
tar -xzf LiteSync-0.1.0-beta.tar.gz
cd LiteSync-0.1.0-beta
sudo bash install.sh
The installer:
/opt/litesync.litesync system user.systemd service.Check the service:
sudo systemctl status litesync
View logs:
sudo journalctl -u litesync -f
Restart:
sudo systemctl restart litesync
Stop:
sudo systemctl stop litesync
Start:
sudo systemctl start litesync
Enable at boot:
sudo systemctl enable litesync
Then open:
http://<host-or-pi-ip>:8000/
LiteSync is also available as a Docker image and supports both linux/amd64 and linux/arm64.
The published image is:
avayadhakal/litesync:latest
For Docker deployment instructions, including Docker Compose, storage mounts, configuration, permissions, and updates, see the Docker Deployment Guide.
Download the new release archive and run the installer again.
The installer is designed to be idempotent and preserves the existing configuration and application data.
In particular, existing installations should retain:
config.toml
data/litesync.db
data/tasks/
For Docker deployments, see the Docker Deployment Guide for update instructions.
Remove LiteSync and its service:
sudo bash uninstall.sh
To remove the application while keeping its configuration and data:
sudo bash uninstall.sh --keep-data
--keep-data preserves:
config.tomldata/LiteSync uses TOML configuration through Python's standard-library tomllib module.
The default configuration file is:
config.toml
A different configuration file can be selected with:
export LITESYNC_CONFIG=/path/to/config.toml
At minimum, the configuration needs:
allowed_rootssecret_keyFor containerized deployments (Docker), you can override configuration keys using environment variables:
LITESYNC_ALLOWED_ROOTS (Colon-separated list of allowed directories)LITESYNC_PORT (The external port, useful for CSRF validation when using Docker port mapping)LITESYNC_ALLOWED_ORIGINS (Comma-separated list of allowed origins)LITESYNC_MAX_UPLOAD_SIZE_MB (Max file upload size in MB)Docker tip: If using these variables via Docker Compose, your
config.tomlonly needs yoursecret_key,data_dir = "/data", and your[[users]]credentials.
LiteSync does not expose the entire filesystem to the web application.
Only paths listed in allowed_roots can be accessed.
The restriction applies to:
Only add directories that LiteSync should be able to access.
LiteSync is a Python/FastAPI application with a small browser-based frontend.
The backend is responsible for:
The frontend handles:
For the detailed component structure and transfer flow, see the Architecture Document.
LiteSync is intended to be used on a trusted Linux system and should not be exposed directly to the public internet without appropriate network controls.
The application includes several restrictions around filesystem access:
allowed_rootssystemd service usersystemd filesystem restrictionsThe systemd service limits LiteSync's filesystem access to the configured locations.
sudo systemctl status litesync
sudo journalctl -u litesync --no-pager -n 100
sudo journalctl -u litesync -f
sudo systemctl restart litesync
rsync --version
python3 --version
LiteSync requires Python 3.11 or newer.
Uploads use:
data/tmp
Make sure the filesystem containing this directory has enough free space for the files being uploaded.
Contributions are welcome.
See CONTRIBUTING.md for development setup, tests, and contribution guidelines.
LiteSync is released under the MIT License.
106 commits
5 commits
Python
47.6%
JavaScript
36.3%
CSS
9.3%
HTML
4.5%
Shell
2.0%