Skip to content
Go back

NextExplorer vs Nextcloud for Plain Files

By KingPin 12 min read
NextExplorer vs Nextcloud for Plain Files
Contents

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:

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.1Nextcloud 35.0.2 (SQLite, web container only)
Image size390 MB1.48 GB
Cold start to login page1.2 to 3.9 s (median 1.6)9.5 to 71.6 s (median 12.6)
Idle memory (docker stats)60 to 86 MiB185 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.

compose.yaml
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:

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:

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:

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.

  1. We mounted Nextcloud’s data/ into NextExplorer as /mnt/Nextcloud. Inside it, data/admin/files is owned by 33:33 (www-data in the official Debian-based image).
  2. NextExplorer ran at the default 1000:1000. An upload into Nextcloud/admin/files returned HTTP 403: “The server is not allowed to write in this folder.”
  3. We re-ran NextExplorer with PUID=33 and PGID=33. The upload returned 200 and the file was on disk.
  4. We asked Nextcloud’s WebDAV for a listing of admin’s files. The new file was not there. We checked twice, 5 seconds apart.
  5. 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:

Terminal window
docker exec -u www-data nextcloud php occ files:scan --all

Then 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.

compose.shared.yaml
services:
nextexplorer:
environment:
PUID: "33"
PGID: "33"
volumes:
- ./shared:/mnt/Shared
nextcloud:
volumes:
- ./shared:/srv/shared

Then enable the app and create a Local mount through occ:

Terminal window
docker exec -u www-data nextcloud php occ app:enable files_external
docker 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 1

That 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.


Share this post on:

Send a Webmention

Written about this post on your own site? Send a webmention and it'll show up above once verified.


Next Post
docker init: Fix These Before You Ship

Discussion

Powered by Garrul . Sign in with GitHub or Google, or post anonymously.

Related Posts