Nextcloud Clients - Desktop and Mobile Sync
Status: Active
Last Updated: 2026-08-14
Category: Cloud - Phase 1: File Storage & Sync
Prerequisites: nextcloud-setup
Time: 1-2 hours
Tags: nextcloud, sync, desktop-client, mobile, webdav, file-sharing, selective-sync
Summary
A server is only half of a personal cloud โ this lesson connects every device you own to it. Install and tune the Nextcloud desktop client (with virtual files and selective sync), configure mobile apps for automatic photo upload, access files via WebDAV from any OS, and master the sharing model that keeps your data private while still being shareable.
๐ฏ What You'll Learn
By the end of this article, you'll be able to:
- โ Install and authenticate the Nextcloud desktop client on Linux/Windows/macOS
- โ Choose correctly between "sync everything", selective sync, and virtual files
- โ Configure mobile auto-upload of photos without filling your phone or server
- โ Mount your Nextcloud as a drive via WebDAV on Linux, macOS, and Windows
- โ Share files/folders with links, internal users, and groups โ with passwords and expirations
- โ Diagnose the classic sync conflicts and ignored-file pitfalls
Client Landscape
| Client | Platform | Protocol | Best for |
|---|---|---|---|
| Nextcloud Desktop | Win/Mac/Linux | Proprietary sync protocol over HTTPS | Primary workstation |
| Nextcloud Mobile | iOS/Android | Same | Photo auto-upload, on-the-go access |
| WebDAV mount | All OSes | WebDAV | Occasional access, no install rights |
| rclone | CLI everywhere | WebDAV/S3 | Scripts, servers, big transfers |
| Browser | Any | Web UI | Quick shares, no install |
All clients talk to the same server you deployed in nextcloud-setup; nothing new to install there.
Desktop Client Setup (Linux example)
# Debian/Ubuntu
sudo apt install nextcloud-desktop
# Fedora
sudo dnf install nextcloud-client
# Arch
sudo pacman -S nextcloud-client
Launch โ "Add account" โ enter https://cloud.example.com โ browser opens for OAuth2-style login โ authorize.
What Happens: the client registers itself as an OAuth application with your server; credentials never sit in the client config in plaintext โ a refresh token does. Revoke anytime under Settings โ Security โ Devices & sessions.
The Critical First Choice: What Syncs?
The wizard asks how to connect your folders:
- Sync everything โ full mirror of your Nextcloud on this disk.
- Use when: laptop has space, you want offline access to all files.
- Selective sync โ pick folders to mirror.
- Use when: server is bigger than laptop SSD.
- Virtual files (Windows/macOS) โ files appear in Explorer/Finder but download on open.
- Use when: huge libraries, small disks. Linux gets this via GNOME online accounts integration instead.
Decision rule:
Need offline + have space? โ Sync everything
Big library + Windows/macOS? โ Virtual files
Big library + Linux? โ Selective sync (or GNOME integration)
Bandwidth and Behavior Tuning
Settings worth flipping on day one:
- Pause during presentations: enable "Launch on startup" but learn
nctray pause hotkey - Bandwidth limits: cap upload to ~70% of your uplink so VoIP survives initial seeding
- Edit locally = sync immediately: keep default instant upload; disable battery optimization on laptops
- Ignored files: Settings โ Ignored Files โ patterns like
*.tmp,*~$*prevent Office lock-file chaos
Verify health at a glance:
ls ~/Nextcloud/.sync-exclude.lst # per-folder excludes
journalctl --user -u nextcloud-client # Linux client logs (if using systemd unit)
The status icon is your truth source: green โ synced, blue โณ syncing, yellow โ paused/partial, red โ error. Never ignore a persistent red โ click it and read the first failing item.
Mobile Apps
Install Nextcloud (Android/iOS) and optionally Nextcloud Notes/Talk/Cookbook companions.
Android photo auto-upload (the killer feature)
- โฐ โ Auto upload
- Choose source folder:
/DCIM/Camera - Choose destination:
/Photos/<device-name>/ - Behavior options:
- Upload over Wi-Fi only (default; change if you have generous cellular)
- "Upload existing pictures" once, then incremental
- Create dated subfolders (
2026/08/) โ recommended for large libraries
What Happens: the app registers an Android WorkManager job watching the media store. New camera items get queued and uploaded when constraints (Wi-Fi + charging optional) hold. EXIF data and timestamps are preserved; uploads are chunked and resumable.
iOS notes
- Background refresh is more aggressive about killing uploads; enable "Background App Refresh" for Nextcloud or open the app periodically
- Auto-upload lives under Settings within the app, same destination conventions
Battery/space tips
- Keep phone quota enforced server-side (
occ user:setquota alice 100 GB) - Photos are uploaded original-quality by default โ HEIC stays HEIC; plan transcode-on-server if you need JPEGs everywhere
WebDAV Access Without Installing Anything
Nextcloud exposes every account at:
https://cloud.example.com/remote.php/dav/files/<USERNAME>/
Linux (GNOME Files)
Other Locations โ Connect to Server:
davs://cloud.example.com/remote.php/dav/files/alice/
KDE Dolphin: webdavs://alice@cloud.example.com/remote.php/dav/files/alice/
Permanent mount (fstab via davfs2)
sudo apt install davfs2
sudo mkdir /mnt/cloud
echo "https://cloud.example.com/remote.php/dav/files/alice/ /mnt/cloud davfs user,rw,noauto 0 0" | sudo tee -a /etc/fstab
echo "/mnt/cloud alice APP-PASSWORD" >> ~/.davfs2/secrets && chmod 600 ~/.davfs2/secrets
mount /mnt/cloud
Use an app password (Settings โ Security โ Create new app password), not your login password โ scoped and revocable.
macOS Finder
Finder โ โK โ https://cloud.example.com/remote.php/dav/files/alice/
Windows Explorer
Map network drive โ https://cloud.example.com/remote.php/dav/files/alice/ โ check "Connect using different credentials".
Caveat table for WebDAV vs native client:
| Aspect | Native client | WebDAV mount |
|---|---|---|
| Offline copies | โ | โ |
| Change detection | Efficient state protocol | Polls on access; slow listings |
| Large trees | Fine | Painful (10k+ entries) |
| Best use | Daily driver | Occasional drag-drop, kiosk machines |
For scripts and bulk moves prefer rclone (rclone config โ type webdav โ vendor Nextcloud), which parallelizes where OS mounts serialize.
Sharing Model
Sharing happens in the web UI or right from the desktop client context menu.
Link shares (external people)
- Hover file โ Share โ Create public link
- Harden it:
- Password โ always for sensitive docs (server enforces if admin requires)
- Expiration date โ default policy suggestion: 30 days max
- Permissions: read-only vs allow upload/edit ("file drop" = upload-only, great for intake folders)
# Scriptable equivalent:
occ share:create --link --password 'shared-secret' --expire-date '+30 days' \
/Photos/vacation/album.zip
What Happens: a row lands in oc_share with token+hash; link recipients hit /s/<token> which proxies through your auth-free route. Revocation = delete share; the token dies instantly.
Internal shares (other users/groups)
- Share with user/group/federated (@user@other-cloud)
- Permission matrix per share: read / edit / create / delete / re-share
- Recipient can see it under Shared with you; storage counts against owner's quota by default
Housekeeping policies (admin side)
occ config:app:set shareapi enforce_link_password --value=yes
occ config:app:set shareapi default_expire_date --value=yes
occ config:app:set shareapi expire_after_n_days --value=30
occ config:system:set sharing federation --value=true # if you want cross-server shares
Versioning & Trash (Your First Safety Net)
Every client benefits from these server-side features automatically:
- Versions: each save creates a version (kept per retention policy). Restore from web UI โ file details โ Versions.
- Deleted files: deletions land in trash for N days (default 30) before purge.
- Version expiry:
occ config:system:set versions_retention_obligation --value="auto, 90"โ keep versions up to 90 days subject to space.
Remember from cloud-storage-concepts: this is history within sync โ it complements, not replaces, Restic snapshots.
Common Gotchas & Troubleshooting
"File locked" errors after crashes.
Stale Redis locks. Clear safely: occ files:scan --path="alice" plus flush stale locks:
docker compose exec redis redis-cli -a $REDIS_HOST_PASSWORD --scan --pattern '*lock*' | xargs ... del (stop the client first).
Conflict copies file (conflicted copy ...).txt.
Two devices edited while offline. Not a bug โ merge manually, then delete one. Reduce frequency: close documents before shutting laptops.
Client ignores a folder entirely.
It matched an ignore pattern or .sync-exclude.lst. Check Settings โ Ignored Files.
Photo uploads duplicated after reinstall.
Destination folder changed; the app tracks uploads by target path. Keep destinations stable per device (/Photos/<device-name>/) and don't rename them.
WebDAV painfully slow on huge folders. Expected โ listings are O(n). Use rclone or the native client for big trees.
Clock skew causes endless re-sync loops.
NTP matters: timedatectl status should show synchronized on both server and client.
Practical Exercises
- Set up the desktop client with selective sync, then add a new folder server-side and watch discovery behavior.
- Configure Android/iOS auto-upload into a dated structure; verify EXIF preserved by checking Properties in the web UI.
- Create a password-protected, 7-day-expiry read-only link; test it from a private window; revoke early.
- Mount via WebDAV on a machine without the desktop client and time listing a 5,000-file folder vs the native client.
- Delete a file, restore it from trash; then edit a file twice and restore yesterday's version. You've now exercised the safety nets.
๐ Related
- Previous: nextcloud-setup โ the server these clients attach to
- Next: nextcloud-collaboration โ OnlyOffice, Talk, Calendar, Deck
- cloud-storage-concepts โ sync vs backup theory behind the safety nets
- restic-setup โ real backups beneath the sync layer
- kb/basics/ssh-basics โ remote management of the box running all this
- kb/sysadmin/system-admin-basics โ users/quota administration habits
Change Log
- 2026-08-14 โ Initial publication as part of the cloud course build-out.