Seafile
Fast file sync with block-level dedup, library versioning and a clear community/pro split
Seafile syncs files between desktops, phones and a server using a Git-like model of libraries, commits and content-defined blocks, which makes it noticeably faster than WebDAV-based alternatives on large or frequently changed files. It replaces Dropbox for teams that want sync and sharing without a groupware suite attached.
Our verdict on Seafile#
Seafile is the fastest self-hosted sync engine here and the one whose storage model you must understand before you trust it. Files are split into content-defined blocks; what sits under seafile-data/ is not your files, it is a Git-like object store of commits, fs objects and blocks. The upside is real dedup and quick sync of large files. The downside is that a backup of the data directory is useless without the matching database state, and browsing your data on the server requires seaf-fuse (read-only) or seaf-fsck --export. The manual is unambiguous about ordering: dump SQL first, copy the data directory second, so every database record points at an object that already exists. Version 13.0 arrived in January 2026 (13.0.25 in July) and made Redis the default cache and moved database and cache config into .env. Professional Edition remains free for 3 users and adds folder-level permissions, S3 backends, audit log and SAML.
Who Seafile is for#
Choose it if
- Teams pushing large files or big directory trees where Nextcloud's WebDAV sync feels slow
- Anyone who wants file sync and sharing without inheriting calendar, mail and an app store
- Small offices that can live inside the free 3-user Professional Edition and want folder permissions and audit logging
- Deployments heading for S3 or another object store rather than local disks
Look elsewhere if
- You want to be able to read your files directly off the server filesystem with
lsandcp - You need groupware: calendar, contacts and collaborative editing are not the point here
- You are unwilling to rehearse a restore, because block storage makes an untested backup much less trustworthy than a folder of files
What running it actually looks like#
Docker Compose with .env, seafile-server.yml and caddy.yml: the Seafile server, MariaDB, Redis and Caddy for TLS, publishing 80 and 443. Before first start you set SEAFILE_SERVER_HOSTNAME, INIT_SEAFILE_MYSQL_ROOT_PASSWORD, SEAFILE_MYSQL_DB_PASSWORD, JWT_PRIVATE_KEY (32 characters or more) and the initial admin email and password. Persistent state lands in /opt/seafile-data and /opt/seafile-mysql/db. Docs recommend at least 2 GB RAM and 2 cores for CE. Upgrades between majors are not a plain image bump: 12 to 13 means downloading new .yml files, adding cache provider variables and deleting the now-obsolete [memcached], [database] and [block_backend] sections from seafile.conf. Read that page before pulling.
Resource profile#
- Memory
- 700 MB idle, around 1400 MB in ordinary use. Docs recommend at least 2 GB and a 2-core CPU for a Docker CE install, 4 GB and 4 cores generally; Seahub's Python workers and MariaDB dominate, and full-text search or SeaSearch adds significantly more.
- CPU and acceleration
- Sync itself is cheap because the client does the chunking and only changed blocks move; CPU spikes come from thumbnail generation, full-text indexing and `seaf-fsck` runs.
- Storage growth
- Blocks are deduplicated across libraries, so shared files are stored once, but library history retains old blocks until you run garbage collection, and an untouched instance grows steadily from versions alone.
- Operational load
- 3 of 5, Moderate. Four containers with a real database and a documented upgrade path per major version that changes `.env` and config files each time. The restore is what earns the score: the data directory is opaque block storage that must be captured in the right order relative to the SQL dump.
Figures describe a small single-household install and are the working assumptions behind our stack planner. Your numbers will differ with library size, user count and hardware. See methodology.
Data and backup surface#
Back up in this order, and the order matters: dump ccnet_db, seafile_db and seahub_db first, then copy /opt/seafile-data/seafile/conf, /opt/seafile-data/seafile/seafile-data and /opt/seafile-data/seafile/seahub-data. The manual explains why: if you copy files first, objects written during the copy get referenced by a later SQL dump and the restore points at things that do not exist. Nothing in seafile-data/storage is human-readable, so verify a restore by running seaf-fsck and, if you need actual files out, seaf-fsck --export, which works from the data directory alone without the database.
Derived backup shape
MySQL dump. mariadb-dump / mysqldump with --single-transaction, then snapshot the dump plus the app's data volume.
Traps and surprises#
Your files are not files on the server
The manual states it directly: files in Seafile are split into blocks, so what is stored on the server is not complete files. Nothing under seafile-data/storage can be opened, grepped or served by another program. Administrator access to actual file content requires mounting seaf-fuse, which is read-only, or exporting with seaf-fsck --export. Plan for this before you commit an archive to Seafile that another tool needs to read.
Backup order determines whether a restore works
Dump the three databases first, then copy the data directory. Doing it the other way round means new objects written during the file copy are missing while the SQL dump written afterwards references them, and libraries come back corrupt. The documented tradeoff is that the correct order can lose the last few seconds of uploads, which is the right thing to lose. seaf-fsck --repair will then blank corrupted files rather than recover them.
History keeps blocks until you garbage collect
Library version history retains old blocks indefinitely at the storage layer. Deleting a large file from a library, or repeatedly saving a big document, does not free space until garbage collection runs, and GC on older versions wants the service stopped. Instances that look inexplicably large are almost always uncollected history rather than live data. Set library history limits, then schedule GC.
Major upgrades edit config files, not just image tags
Each major has its own migration page. Going 12 to 13 means new .yml files, moving database and cache settings into .env, adding a Redis or Memcached provider, and removing [memcached], [database] and [block_backend] blocks from seafile.conf. Skipping the page and just bumping the tag produces a server that starts and then fails on cache or storage config. Follow the per-version pages in sequence.
Community and Professional are different products
Fine-grained folder permissions, remote wipe, audit log, S3 storage backends, antivirus hooks and SAML/ADFS login are Professional only. Professional is free for 3 users with no licence file, which covers a household but not a team, and there are community reports of the free-tier behavior changing across the 12 to 13 upgrade. Check what your deployment relies on against the pricing page before you scale past three accounts.
Specifications#
- Category
- Photos, files and sync
- Licence
- GPL-2.0 with an OpenSSL linking exception (server, Community Edition); Professional Edition is proprietary (Copyleft)
- Written in
- C (storage engine), Python/Django (Seahub web UI), React frontend
- First release
- 2012
- Maturity
- Mature
- Datastore
- MariaDB/MySQL holding ccnet_db, seafile_db and seahub_db, plus Redis for cache; file content lives as blocks on disk or S3
- Default ports
80,443- Ships as
- docker compose, kubernetes (pro clusters)
- arm64 builds
- Yes
- Identity
- OIDC via plugin. OAuth/OIDC and basic LDAP are configurable in the Community Edition; SAML, ADFS, Shibboleth and LDAP group sync are Professional Edition features.
- Replaces
- Dropbox, Google Drive, Box, OneDrive
- Project site
- www.seafile.com
- Source
- github.com/haiwen/seafile
- Documentation
- manual.seafile.com
Alternatives to Seafile#
Everything else in photos, files and sync, closest in operational weight first.
| Tool | Ops load | Idle RAM | Licence |
|---|---|---|---|
| Immich | 3, Moderate | 900 MB | AGPL-3.0 |
| Nextcloud | 4, Heavy | 600 MB | AGPL-3.0-or-later |
| PhotoPrism | 2, Light | 450 MB | AGPL-3.0 (Community Edition); default images ship under the PhotoPrism Plus License |
| File Browser | 1, Set and forget | 20 MB | Apache-2.0 |
| Syncthing | 1, Set and forget | 60 MB | MPL-2.0 |
Where Seafile comes up elsewhere#
Migration guides
Calculators
Sources#
Facts on this page were checked against the project's own material. Where a number is our own estimate rather than a published figure, the text says so.
- Admin manual, Community Edition Docker setup
- Admin manual, backup and recovery ordering
- Admin manual, Docker upgrade path 12.0 to 13.0
- Admin manual, seaf-fuse and the block storage model
- Admin manual, seaf-fsck check, repair and export
- Official pricing, Community versus Professional and the 3-user free tier
Published . Last reviewed . Found something out of date? Tell us and we will fix it and log the change.