Compatibility and stability
Wusel talks to Nextcloud, not to "any WebDAV server". That is a deliberate narrowing, and it comes with an obligation: to say exactly which parts of the conversation are standards, which are Nextcloud’s own, and what happens when one of the latter is missing.
wusel targets Nextcloud specifically, not "any WebDAV server". The read/data
plane is close to standard WebDAV and is the most stable; several load-bearing
pieces are Nextcloud extensions. What holds it together is not "it’s all
standard" — it is that these are the same APIs the official desktop/mobile
clients use, so Nextcloud keeps them backward-compatible, plus we degrade
gracefully when an extension is absent or changes (losing convenience, not
correctness).
| Touchpoint | Origin | Stability |
|---|---|---|
PROPFIND + multistatus, GET + |
WebDAV / HTTP standard |
very stable |
Standard props ( |
WebDAV standard |
very stable |
Quota props ( |
WebDAV standard |
very stable |
DAV path |
Nextcloud / ownCloud |
stable (long-standing) |
|
ownCloud / Nextcloud extension |
stable convention |
Chunked upload v2 ( |
Nextcloud extension |
stable, used by the official clients |
Login Flow v2 ( |
Nextcloud API |
stable, but not WebDAV |
|
ownCloud / Nextcloud extension |
stable convention |
|
Nextcloud extension |
stable convention |
OCS capabilities ( |
Nextcloud API |
stable |
Unified Search ( |
Nextcloud API |
stable |
Web links ( |
Nextcloud web UI |
stable convention |
notify_push WebSocket |
Nextcloud app |
most fluid; optional |
Graceful degradation, by design:
-
no
oc:fileid→ the file is served live, uncached (no crash); -
no
oc:permissions→ assumed writable, so the mount does not lock the user out of a file the server would in fact accept; a write the server does not allow is still rejected by the server itself; -
no
nc:mount-type→ no group-folder emblem, nothing else changes; -
no usable quota figure (unlimited, or not yet computed) →
statfskeeps a placeholder size; -
no notify_push / no OCS answer → TTL revalidation plus a periodic sync walk (
[sync] poll_secs); -
an unparsable date →
mtime0.
Diagnostics: login probes the OCS capabilities and reports the server version
(or warns "is this a Nextcloud instance?"); the mount logs the version on
connect (wusel_core::capabilities::fetch). The PROPFIND parser matches on the
local element name, so namespace-prefix changes do not break it.
The write path adds the most Nextcloud-specific and change-prone surface —
chunked upload v2 (/remote.php/dav/uploads/…) — so it is
inherently less "standard" than reading.
Which Nextcloud versions this covers is checked, not asserted: the nightly end-to-end test asks Docker Hub for the three newest Nextcloud majors and runs against each. The newest must pass; the two older ones are reported but do not fail the run.