| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
SyncWings lets you sync files between multiple devices and manage them easily through a web-based file manager. It combines Syncthing for secure, peer-to-peer file synchronization with FileStash for convenient file browsing, downloading, renaming, and deleting—all from your browser.
Whether for a single user or multiple users, SyncWings gives each user their own isolated Syncthing (and optional FileStash) instance, managed automatically via Docker Compose for easy deployment and strong separation between users.
Demo: https://demo.syncwings.com
Feel free to use the demo to try things out. The demo instance is reset every hour.
Demo login details:
Admin user:
Username: admin
Password: R2r63&^NqgEPTSf4#5pj
Regular user:
Username: user
Password: jR7balz*Bczs9#^FNSY3
services:
syncwings:
image: loosetooth/syncwings:latest
environment:
# Set the data directory inside the container
- DATA_DIR=/data
# Set the external data directory (adjust this path as needed)
# This has to be equal to the bind mount for the DATA_DIR in the volumes section below
- DATA_DIR_EXTERNAL=/path/to/large/disk/syncwings/data
# Optionally set the port for the Next.js app (default: 3000)
- PORT=3001
# Set the session secret from the .env file
- SESSION_SECRET=${SESSION_SECRET}
# The ./data directory must be created and owned by the same UID:GID as set below
volumes:
# The host path should be the same as DATA_DIR_EXTERNAL
- /path/to/large/disk/syncwings/data:/data
# Mount the Docker socket to allow spawning Syncthing and FileStash containers
- /var/run/docker.sock:/var/run/docker.sock
# Set to UID:GID where GID matches the docker group on your host
# UID HAS TO BE "1000" because FileStash uses this UID internally
user: "1000:131"
restart: unless-stopped
network_mode: hostPlace the above docker-compose.yml in a directory on your server. Adjust /path/to/large/disk/syncwings/data to a suitable location on your host with enough space for user data. Currently, all user data, including Syncthing's config folder and database files, are stored in this directory.
Generate a strong session secret for signing cookies:
openssl rand -base64 64 | tr -d '\n'; echoCreate a .env file next to your docker-compose.yml and add the generated secret:
SESSION_SECRET=your-very-secret-stringReplace your-very-secret-string with the output from the command above. Make sure to keep this secret safe and do not share it publicly.
From the directory containing your docker-compose.yml and .env file, run:
docker compose up -dThe app will be available at http://localhost:3001 (or the port you specified in the PORT environment variable, defaults to 3000 if PORT is not set). The first user to register will be an administrator by default.
In order to allow multiple instances of Syncthing to run on the same host, each instance is configured to use a unique port range based on the user's ID. Depending on the number of users, you need to open the following ports in your firewall and/or router:
If these ports are not opened, Syncthing connections will still work via relays, but direct connections will not be possible. This might result in slower sync speeds.
SESSION_SECRET (required):
DATA_DIR (optional):
DATA_DIR_EXTERNAL (recommended for Docker Compose):
SYNCTHING_CONTAINER_TAG (optional):
PORT (optional):
NEXT_PUBLIC_ENABLE_FILE_STASH (optional):
FILESTASH_CONTAINER_TAG (optional):
FILESTASH_CONTAINER_DIGEST (optional):
EXPLICITLY_LISTEN_TO_LOCAL_IP (optional):
LOCAL_IP_ADDRESS (optional):
MAX_USERS (optional):
ENABLE_IPV6 (optional):
npm installnpm run devTo build the Docker image:
docker build -t syncwings .To run the app using Docker Compose, use the provided docker-compose.yml as an example:
docker compose upImportant Notes:
The Docker container must be run with a group that has permissions to access the Docker socket (usually the docker group on your host). Set the user: field in your docker-compose.yml to use a group ID (GID) that matches the Docker group on your system. You can find the GID with:
getent group dockerThen update the user: field, e.g. user: "1000:999" if the Docker group GID is 999.
The mounted DATA_DIR folder (e.g. ./data) must be created in advance and owned by the user specified in the docker-compose.yml file. For example, if you use user: "1000:999", run:
mkdir -p ./data
chown 1000:999 ./dataThis ensures the app can write to the data directory without permission issues.
The provided user ID (UID) must be 1000 because FileStash uses this UID internally.
Adjust the compose file and permissions as needed for your environment.
| Back | FazBrowse Home | New Git URL |