You Installed a 1.5 GB Suite to Click on a Folder
Ask why you run Nextcloud. For a lot of home labs the answer is “I have files on a server and I want to see them in a browser, with a login, and maybe send Aunt Linda a link.” That is a file browser job. Nextcloud is a groupware platform that happens to include a file browser, which is the forklift-moving-a-couch situation. It works, but your neighbors will have questions.
NextExplorer does that one job in a single 390 MB container that boots to a login page in under 4 seconds. Keep Nextcloud if you need sync clients, phone auto-upload, or calendars. And if you want both on the same files, never point them at Nextcloud’s data folder. We tested what happens. It is ugly.
Full example: Clone the working files at github.com/KingPin/sumguy-examples/…/nextexplorer-vs-nextcloud
One correction up front. NextExplorer gets described as “a native file browser for your Nextcloud”. It has no Nextcloud integration at all. No WebDAV client, no Nextcloud API, no sync. It is a standalone web explorer for folders that already exist on the disk. That makes it a replacement for Nextcloud in some setups and a neighbor in others.
What NextExplorer Actually Is
NextExplorer (GitHub nxzai/NextExplorer, GPL-3.0, repo created April 2024, about 1,200 stars) is a web UI over directories. Mount a host folder at /mnt/<Label> inside the container and it shows up as a top-level volume. The current release is v4.0.1 (2026-10-27). The image is Alpine with Node 24 and bundles ffmpeg 8.1.3, ripgrep 15.1.0, pdftotext, exiftool, rsync, and 7-Zip.
What you get:
- Local users and groups, plus optional OIDC single sign-on, TOTP 2FA, passkeys, and API tokens
- Previews for images, video, and PDF, with FFmpeg thumbnails
- A built-in text and code editor
- Link shares (read-only or read-write), guest access, and a “Shared with me” view
- ripgrep-backed search over filenames and file contents
- Grid, list, and column views with drag and drop
- Resumable TUS uploads, trash, and file versions
- Optional ONLYOFFICE or Collabora for office documents
There is no database server to babysit. A SQLite file and settings live in /config, and thumbnails plus search data live in /cache. Everything else is your folders, read straight from disk. File Browser (filebrowser/filebrowser) is the other lightweight option.
If you want single sign-on, the OIDC side takes an issuer URL in the Authelia, Authentik, or Keycloak style. Our auth proxy comparison covers picking the provider.
The Numbers
We ran both apps from the test kit on a 16-core desktop with Docker 29.9.2. Five full runs gave 15 cold starts per app.
| NextExplorer v4.0.1 | Nextcloud 35.0.2 (SQLite, web container only) | |
|---|---|---|
| Image size | 390 MB | 1.48 GB |
| Cold start to login page | 1.2 to 3.9 s (median 1.6) | 9.5 to 71.6 s (median 12.6) |
Idle memory (docker stats) | 60 to 86 MiB | 185 to 242 MiB |
Nextcloud’s cold start includes its first-boot installer, which is why it swings from 9.5 to 71.6 seconds. The memory number covers the web container only. A real install adds MariaDB or Postgres, Redis, and a cron job, so 185 to 242 MiB is the lowest Nextcloud footprint you will see. We used SQLite in one container on purpose, so the comparison stays one container against one container.
Also, the official 35-apache image tag was still on 35.0.2 when we tested, while server release 35.0.3 had landed the day before. The kit pins nextcloud:35.0.2-apache. Nothing here measures page load speed, upload throughput, or behavior under many users. It measures weight and boot time, and on those NextExplorer wins without breaking a sweat.
A NextExplorer Compose File You Can Use
This is the hardened version of the file we tested. The two environment variables at the bottom matter more than anything else in it.
services: nextexplorer: image: nxzai/explorer:v4.0.1 container_name: nextexplorer restart: unless-stopped ports: - "3000:3000" volumes: - ./config:/config - ./cache:/cache - /srv/media:/mnt/Media - /srv/documents:/mnt/Documents environment: NODE_ENV: production PUBLIC_URL: "https://files.example.com" PUID: "1000" PGID: "1000" SESSION_SECRET: "${SESSION_SECRET}" USER_VOLUMES: "true" TERMINAL_ENABLED: "false"A few notes on the settings:
PUBLIC_URLmust be the exact URL you browse to, with no trailing slash. It drives cookies, CORS, and the OIDC callback. Browse from a different URL and you get cookie and CORS errors that look unrelated.INTERNAL_URLadds extra allowed origins, such as a LAN IP.SESSION_SECRETshould be a long, random, stable value of at least 32 characters. The docs ask for it so sessions stay valid across restarts.PUIDandPGIDdefault to 1000:1000. The entrypoint starts as root, renumbers its internalappuserto your values, chowns only/configand/cache, then drops privileges with gosu. It does not chown your/mntvolumes, so files it writes land on the host as that UID and GID. If this part is fuzzy, our PUID/PGID explainer covers it.- To bootstrap an admin, set
AUTH_ADMIN_EMAILandAUTH_ADMIN_PASSWORDand the setup screen is skipped. The docs note thatAUTH_ADMIN_PASSWORDresets the password on every startup if the user exists. Remove it after first boot or treat the env file as the source of truth. AUTH_MODEtakeslocal,oidc,both, ordisabled. The default isboth.- For a read-only share, append
:roto the volume line, for example/srv/media:/mnt/Media:ro. That is plain Docker.
Two Defaults You Should Change
We hit one of these in testing and read the other in the source and docs. Both default to the permissive side.
Gotcha 1: USER_VOLUMES defaults to false. We created a fresh non-admin user (“bob”) and checked what he could do. He saw the mounted volume with read, write, delete, and share all allowed, and he uploaded a file without trouble. If you hand out accounts to family or coworkers on the defaults, everyone gets everything. Set USER_VOLUMES=true and non-admins see only the volumes an admin assigns to them. If you want each user to have a personal “My Files”, USER_DIR_ENABLED=true creates one under USER_ROOT (default /mnt/_users).
Gotcha 2: TERMINAL_ENABLED defaults to true. Admins get a browser shell (bash) inside the container, running as the app user, with every mounted volume reachable. It is admin-only. Still, a leaked admin password then means a shell on your files. Set TERMINAL_ENABLED=false unless you actually use it. Your 2 AM self will thank you.
Where Nextcloud Still Wins
Nextcloud does a pile of things NextExplorer does not try to do:
- Desktop and mobile sync clients
- Phone photo auto-upload
- WebDAV access
- Calendar, contacts, and Talk
- Federation between servers
- An app store
If your Nextcloud is mostly the sync client on your laptop and the auto-upload on your phone, NextExplorer cannot replace it. There is no sync protocol in it. If you are standing up Nextcloud fresh, our Docker install guide uses the proper database setup instead of the SQLite shortcut from our kit.
The rule we use:
- Folders on a server, browser access, share links: NextExplorer
- Sync clients, phone upload, groupware: Nextcloud
- Both, on the same files: read the next section before touching a compose file
Running Both on the Same Files: The Trap
The obvious move is to mount Nextcloud’s data directory into NextExplorer so you get a fast browser on top of the same files. We did that, step by step.
- We mounted Nextcloud’s
data/into NextExplorer as/mnt/Nextcloud. Inside it,data/admin/filesis owned by 33:33 (www-datain the official Debian-based image). - NextExplorer ran at the default 1000:1000. An upload into
Nextcloud/admin/filesreturned HTTP 403: “The server is not allowed to write in this folder.” - We re-ran NextExplorer with
PUID=33andPGID=33. The upload returned 200 and the file was on disk. - We asked Nextcloud’s WebDAV for a listing of admin’s files. The new file was not there. We checked twice, 5 seconds apart.
- We ran
occ files:scan admin. Now the file appeared. (The scan summary reported 0 new and 2 updated entries. We did not trace why the file counted that way.)
Nextcloud keeps a database index of everything in its data directory, and files written behind its back stay invisible until a scan runs. So you get one of two outcomes. Either you get permission errors, or you get a Nextcloud index that silently disagrees with the disk until somebody runs a scan. Both are bad, and the second is worse because nothing tells you.
If you already did this, the rescue is a full scan:
docker exec -u www-data nextcloud php occ files:scan --allThen undo the mount.
Running Both on the Same Files: The Setup That Works
Give both apps a neutral folder that is not Nextcloud’s data directory, and let Nextcloud mount it with its External Storage app. We chown the folder to 33:33 and run NextExplorer at that same UID and GID, so both sides can edit what the other wrote.
services: nextexplorer: environment: PUID: "33" PGID: "33" volumes: - ./shared:/mnt/Shared nextcloud: volumes: - ./shared:/srv/sharedThen enable the app and create a Local mount through occ:
docker exec -u www-data nextcloud php occ app:enable files_externaldocker exec -u www-data nextcloud php occ files_external:create Shared local null::null -c datadir=/srv/shared# prints "Storage created with id 1"docker exec -u www-data nextcloud php occ files_external:option 1 filesystem_check_changes 1That last line is the one people skip. A mount created through occ had no filesystem_check_changes option set. With the option unset, Nextcloud did not list a file we uploaded through NextExplorer. After setting it to 1, the file showed up on the next WebDAV PROPFIND with no scan needed.
In the UI this per-mount option is called “Filesystem check frequency”. “Once per direct access” rescans that directory level on each access. “Never” trusts the index. The Nextcloud docs also warn that rescans do not reliably detect renames, so rename files from the Nextcloud side when it matters.
The other direction needs nothing special. A file uploaded through Nextcloud WebDAV (HTTP 201) appeared in NextExplorer immediately, because NextExplorer reads the disk directly and keeps no index. Both files were owned by 33:33 on the host. We also saw the first PROPFIND right after creating the mount return 404 once, then 207 from then on.
The trade-off is ownership. With PUID 33, everything in that folder is owned by www-data on the host, not by your own user. You can live with that for a shared folder. You would not want it on your whole media library, which is why the neutral folder exists. For other ways to expose a server folder to machines, see our NFS vs SMB vs SSHFS vs WebDAV comparison.
The SumGuy Take
If your Nextcloud exists to browse and share folders that already live on a disk, swap it for NextExplorer. You drop from 1.48 GB to 390 MB, from a stack that wants a database, Redis, and cron in a real install to one container, and from a 12.6 second median boot to 1.6 seconds. Set USER_VOLUMES=true and TERMINAL_ENABLED=false before you give anyone an account.
If you need sync clients, phone upload, or groupware, keep Nextcloud and add NextExplorer next to it through a neutral shared folder. Do not let it touch the data directory. A listing that quietly disagrees with the disk is the kind of bug you find a month later, when a file you uploaded is “missing”.
Common Questions
Does NextExplorer work with Nextcloud?
No. NextExplorer has no Nextcloud integration: no WebDAV client, no Nextcloud API, and no sync. NextExplorer browses folders on disk. You can run both on one shared folder by mounting it into NextExplorer and into Nextcloud through the External Storage app.
Can NextExplorer sync files to my phone or laptop?
No. NextExplorer is a web file explorer and has no sync client or phone auto-upload. NextExplorer supports resumable TUS uploads through the browser. If you need desktop and mobile sync or photo auto-upload from a phone, keep Nextcloud running for that part.
Does NextExplorer need a database?
No. NextExplorer keeps its SQLite database and settings files under /config, and keeps thumbnails and search data under /cache. NextExplorer needs no MariaDB, Postgres, or Redis container. Back up the /config volume; the /cache volume rebuilds itself from your files.
Can NextExplorer edit Office documents?
Yes, with a separate document server. NextExplorer connects to ONLYOFFICE Document Server through ONLYOFFICE_URL and a shared JWT secret in ONLYOFFICE_SECRET, and it also supports Collabora. Without one of those servers, NextExplorer previews PDFs and edits plain text and code in its built-in editor, but not Word or Excel files.
How do I move my files from Nextcloud to NextExplorer?
Copy each user’s data/<user>/files folder out of Nextcloud’s data directory into a normal folder, then mount that folder into NextExplorer. The files are plain files on disk unless Nextcloud server-side encryption is on. Nextcloud shares, versions, and comments do not come along, so recreate share links in NextExplorer.