A cloud drive for your own server that leaves your files exactly as they are.
Synclet turns a folder on your server into a cloud drive you can use from the browser, your Mac, your iPhone and your Android phone. Underneath it's still just a folder: no blobs in a database, no metadata files in your folders. Stop using Synclet tomorrow and your files are exactly where you left them.
- Plain files, always. Synclet works with the files already on your disk. Change something over SMB or in a shell and Synclet picks it up. Rename it in the app and it's renamed on disk.
- Apps that feel at home. Your files show up in Finder, in the iOS Files app and in Android's file picker, and download only when you open them.
- Made for sharing at home. Shared folders for the family and the NAS shares you already have, with read or write access per person or group.
- One small stack. Server, worker, PostgreSQL and Caddy in one Docker Compose file. Updates are a version bump.
- Web app: upload, browse and search, including the text inside your documents. Previews for photos (HEIC too), videos, PDFs and text. Select many files at once to move, copy or download them as a ZIP.
- Apps for Mac, iPhone & iPad and Android.
- Share links with an optional password and expiry date.
- Trash for 30 days, and optional file versions.
- Optional: edit Office documents in the browser (Euro-Office) and sign in with your identity provider (OIDC or forward-auth).
Everything in detail: Documentation.
You need a Linux machine or NAS with Docker. Synclet runs from prebuilt images for amd64 and arm64.
1. Download two files
mkdir synclet && cd synclet
curl -fsSLO https://raw.githubusercontent.com/eltomato89/synclet/main/deploy/compose.yml
curl -fsSL -o .env https://raw.githubusercontent.com/eltomato89/synclet/main/deploy/.env.example2. Create the folders and fill in .env
Synclet needs a folder for your files and a separate one for its own data (thumbnails, trash, versions). The second must not be inside the first.
sudo mkdir -p /srv/files /srv/synclet-meta
sudo chown "$(id -u):$(id -g)" /srv/files /srv/synclet-meta
mkdir -p teams
sed -i.bak -e "s/^PUID=.*/PUID=$(id -u)/" -e "s/^PGID=.*/PGID=$(id -g)/" \
-e "s/^POSTGRES_PASSWORD=.*/POSTGRES_PASSWORD=$(openssl rand -hex 24)/" .env && rm .env.bakThen check SYNCLET_DATA and SYNCLET_META in .env, and set SYNCLET_VERSION to a release (for example 0.1.7) instead of latest.
3. Start it
docker compose up -dOpen http://localhost:8080 and create your account. Your username becomes your folder in /srv/files. If a folder with that name already exists, its files show up right away.
Next steps: put it behind your reverse proxy, add shared folders and NAS shares, install the apps.
Set the new SYNCLET_VERSION in .env, then run docker compose pull && docker compose up -d. Synclet updates its database on start, and you can't go back to an older version afterwards. Back up the database first and read the release notes. More in Installing and updating.
- Installing and updating: image tags, updates, building from source
- Configuration: every setting, PostgreSQL, running behind a reverse proxy
- Files and storage: what Synclet writes where, disk usage, what it may put in your folders
- Team folders and external storage
- Office: editing documents in the browser with Euro-Office
- Versions: keeping earlier versions of your files
- Single sign-on: OIDC, forward-auth, emergency access
- Apps: signing in from the apps, Mac, Android
- Admin area
- Known limitations and security notes
- Development: building, tests, database migrations, architecture
- Sync API: for client developers
- Deleting on the server's disk skips the trash. Only deletes made through Synclet can be restored.
- Network shares (SMB/NFS) don't report changes reliably. Set the space to "scan only" and Synclet checks it on a schedule instead.
- On a Mac host with Docker Desktop, moves made in Finder look like delete + create, so the apps download the file again. Linux hosts don't have this problem.
More in Known limitations and security notes.
docker compose down -v removes the containers and Synclet's database. Your files stay where they are, untouched.
A NestJS server and worker, PostgreSQL for the index, and Caddy serving the React web app, packed into two images for amd64 and arm64. Apps in Swift (Mac, iPhone, iPad) and Kotlin (Android). Want to help? See Development.
MIT © 2026 Jens Köhler. Built with the help of AI coding assistants (Anthropic's Claude), under human direction and review. Issues and contributions are welcome.