Nextcloud
File sync and share plus calendar, contacts, office and an app store, on your own server
Nextcloud is a PHP application that gives you file sync and sharing with desktop and mobile clients, then layers calendar, contacts, collaborative office documents, chat and several hundred community apps on top. It is the closest self-hosted equivalent to a full Google Workspace or Microsoft 365 tenant.
Our verdict on Nextcloud#
Nextcloud is the heaviest thing on this list to keep alive, and the reason is the release calendar, not the software. Majors ship every four months and each is supported for one year: 32 (Hub 25 Autumn) landed 27 September 2025, 33 on 18 February 2026, 34 (Hub 26 Spring) on 9 June 2026. You cannot skip a major. The documented rule is to reach the latest point release of your current major, then step to the next major's latest point release, one at a time. Fall two years behind and you are doing four sequential upgrades, each with its own PHP requirement: 32 wants PHP 8.1 to 8.4, 34 wants 8.2 to 8.5. Every third-party app has to be compatible at each step or it gets disabled. That is why All-in-One exists: it pins the whole stack, PHP included, and updates it as a unit. If you use anything else, occ becomes routine, not an emergency tool.
Who Nextcloud is for#
Choose it if
- Households or small teams that genuinely need calendar, contacts and shared documents together, not just file sync
- Anyone replacing a Microsoft 365 or Google Workspace tenant where the groupware is the point
- Operators willing to schedule two or three upgrade windows a year and read the release notes each time
- Deployments that need per-folder sharing, external storage mounts and group quotas
Look elsewhere if
- You only want files synced between machines; Syncthing or Seafile will cost you a fraction of the attention
- You cannot commit to upgrading every few months, because a version that has passed EOL gets no security fixes and you still cannot jump straight to current
- Your host is a low-power ARM board with spinning disks; preview generation and the 5-minute cron will make it feel broken
What running it actually looks like#
Two realistic shapes. The official image plus your own Postgres or MariaDB, Redis, and a reverse proxy is four containers and you own every version decision, including PHP, which is baked into the image tag. All-in-One is a mastercontainer that pulls and orchestrates Nextcloud, Postgres, Redis, an Apache proxy and Notify Push, with optional Office, Talk, ClamAV and Imaginary; its admin interface is on 8080 (self-signed) or 8443, and it wants ports 80 and 443 plus a real domain name. AIO refuses IP-only access and expects you to use its built-in BorgBackup. Either way: set up Redis for file locking before you have users, add background jobs via system cron rather than AJAX, and run occ db:add-missing-indices after the first upgrade that nags you about it.
Resource profile#
- Memory
- 600 MB idle, around 1800 MB in ordinary use. Docs specify 128 MB per PHP process minimum and 512 MB recommended, and at least 256 MB for the built-in updater; real footprint is php-fpm workers multiplied out, plus the database and Redis. Estimate for a small family instance.
- CPU and acceleration
- Idles near zero, then spikes on preview generation, full-text indexing and the cron run every 5 minutes; Collabora or OnlyOffice document editing is a separate and much larger CPU cost.
- Storage growth
- Your files plus a `previews/` tree that can reach a substantial fraction of the library if you enable previews for video and PDFs, plus versions and the trash, both of which retain copies until retention policy prunes them.
- Operational load
- 4 of 5, Heavy. Three major releases a year, each supported for exactly twelve months, and you cannot skip a major: staying supported means running two or three upgrade windows a year, each gated on PHP version compatibility and on every installed app being ready. Restores need the database and the data directory taken consistently in maintenance mode.
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#
Three things, taken together: config/, the data directory, and the database. Enable maintenance mode first (occ maintenance:mode --on), otherwise the dump and the files disagree about which uploads exist. Dump with mariadb-dump --single-transaction --default-character-set=utf8mb4 or pg_dump. Also copy themes/ and any custom apps/; the shipped apps come back with the image. Inside the data directory, appdata_*/preview is regenerable and often the largest single tree, so excluding it is the one safe saving. Restoring means the same version of Nextcloud, the same PHP major, files and database from the same moment, then occ maintenance:mode --off.
Derived backup shape
MySQL dump. mariadb-dump / mysqldump with --single-transaction, then snapshot the dump plus the app's data volume.
Traps and surprises#
You cannot skip a major version
The upgrade manual is explicit: reach the latest point release of your current major, then upgrade to the next major's latest point release, and repeat. An instance sitting on 31 cannot jump to 34; it goes 31 to 32 to 33 to 34, each with its own migration run. With three majors a year and a twelve-month support window, letting it drift for eighteen months turns a routine update into a weekend of sequential upgrades.
PHP version is coupled to the Nextcloud version
Each major supports a specific PHP window: 32 takes 8.1 through 8.4, 33 takes 8.2 through 8.4 with 8.5 supported, 34 takes 8.2 through 8.5. On a bare-metal LAMP install this means the OS PHP package and the Nextcloud version have to be moved in a compatible order, and distro upgrades can strand you. Container tags bundle a matching PHP, which removes the problem and is the main reason people move to All-in-One.
Third-party apps block upgrades
Apps that are not marked compatible with the incoming major are disabled during upgrade, and the updater will refuse or warn depending on the path. If a workflow depends on a community app that has not been updated, you either stay on the old major (and lose security support) or lose the feature. Check every installed app against the target version before you start, not after the migration has already run.
Missing indices and repair steps after upgrades
After major upgrades the admin overview commonly reports missing database indices, columns or primary keys, and the instance gets progressively slower until you fix it. The fixes are occ db:add-missing-indices, db:add-missing-columns and db:add-missing-primary-keys, run as the web server user (sudo -E -u www-data php occ ...). Running occ as root instead will leave files owned by root and break the next upgrade.
SQLite works and then does not
SQLite is offered by the installer and the docs are clear it is only recommended for testing and minimal instances. It survives a single-user trial and then collapses under concurrent sync clients with locking errors. Migrating later is possible via occ db:convert-type but it is a maintenance-window operation on a live dataset. Choose Postgres or MariaDB at install time even if the instance is small.
Specifications#
- Category
- Photos, files and sync
- Licence
- AGPL-3.0-or-later (Copyleft)
- Written in
- PHP, with Vue and TypeScript frontends
- First release
- 2016
- Maturity
- Mature
- Datastore
- MariaDB 10.11+/11.x or PostgreSQL 14 to 18, plus Redis for file locking and caching
- Default ports
80,443,8080- Ships as
- docker (official image), docker (All-in-One), snap (Nextcloud Snap), tarball on LAMP/LEMP
- arm64 builds
- Yes
- Identity
- OIDC via plugin. LDAP and SAML integration ship as bundled apps and OIDC comes via the maintained `user_oidc` app; all of it is app-store surface that has to survive every major upgrade.
- Replaces
- Google Drive, Dropbox, Microsoft 365 / OneDrive, Box
- Project site
- nextcloud.com
- Source
- github.com/nextcloud/server
- Documentation
- docs.nextcloud.com/server/latest/admin_manual
Alternatives to Nextcloud#
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 |
| Seafile | 3, Moderate | 700 MB | GPL-2.0 with an OpenSSL linking exception (server, Community Edition); Professional Edition is proprietary |
| 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 Nextcloud comes up elsewhere#
Head to head
Migration guides
Guides
- Backups that actually restore
- Backing up a running database without corrupting it
- Docker Compose conventions that survive year two
- Moving a self-hosted service to a new machine
- Remote access without port forwarding
- Single sign-on for self-hosters: the honest state of it
- An update strategy that does not lose data
Reference
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.
Published . Last reviewed . Found something out of date? Tell us and we will fix it and log the change.