⚠️ Before submitting, please verify the following: ⚠️
Bug description
Description
On Windows, the Explorer navigation pane entries for synced folders ("Show sync folders in the Explorer navigation pane" = enabled) are removed at every client startup and never written back. The Nextcloud folder disappears from the Explorer navigation pane after each Windows reboot / client restart, even though the setting is enabled and the client is running.
Environment
- Client version: 34.0.3 (build 20260826)
- Operating system: Windows 11 Version 25H2
- Sync folder:
C:\Users\<user>\Nextcloud (classic sync, no virtual files / VFS)
- Toggle
showInExplorerNavigationPane=true in nextcloud.cfg (persisted, unchanged across restarts)
- The folder's
navigationPaneClsid is persisted in next.cfg (0\Folders\1\navigationPaneClsid=…) and does not change across restarts.
Actual behavior
The client deletes its existing namespace entries at startup but never re-creates them.
Client log (%APPDATA%\Nextcloud\logs\…_nextcloud.log.0.gz, complete startup session, 22k+ lines):
14:54:12.173 [ info nextcloud.gui.folder.navigationpane …\navigationpanehelper.cpp:161 ]:
Explorer Cloud storage provider: now unused, removing own CLSID "{16f4a9d0-1df9-4035-adbf-dcba2381e791}"
That is the only navigationpane log line of the whole session. There is no
Explorer Cloud storage provider: saving path … to CLSID … line, i.e. updateCloudStorageRegistry()
performed the removal pass but never reached the save pass.
Registry state after client startup (HKCU):
Software\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace\{…} – missing (was removed)
Software\Classes\CLSID\{…} – orphaned leftover of an older GUID generation (no namespace link)
Root cause analysis
In src/gui/navigationpanehelper.cpp:
- The
NavigationPaneHelper constructor schedules an initial
updateCloudStorageRegistry() run ("Ensure that the folder integration stays persistent in
Explorer, the uninstaller removes the folder upon updating the client.").
updateCloudStorageRegistry() walks all Desktop\NameSpace sub keys and marks every entry
with a matching ApplicationName for removal, then re-saves only the folders currently present
in FolderMan's folder map:
for (const auto &folder : _folderMan->map()) { if (!folder->navigationPaneClsid().isNull()) … }
- At client startup the scheduled run fires before the folders are loaded into
FolderMan's map (accounts/folders are restored asynchronously). The removal pass therefore
deletes the old entries, the save loop iterates over an empty folder map and writes nothing.
The 500 ms single-shot timer is never re-armed afterwards, so the entries are never restored.
This matches the log exactly: one "removing own CLSID" line, zero "saving path" lines.
Suggested fix
One of the following:
- Re-schedule after folders are loaded: call
NavigationPaneHelper::scheduleUpdateCloudStorageRegistry() once FolderMan has finished
loading/restoring the folder list (e.g. at the end of FolderMan::setupFolders() /
after accounts are restored), instead of (or in addition to) scheduling it in the constructor.
- Guard the removal pass: in
updateCloudStorageRegistry(), skip the removal of existing
entries when _folderMan->map() is empty (folders not yet loaded) and re-schedule the update
instead of performing a destructive pass with incomplete state.
Workaround (what we use meanwhile)
A PowerShell script that reads the per-folder navigationPaneClsid from nextcloud.cfg
(QSettings @Variant QUuid blob), re-creates the full MSDN "Cloud storage provider – navigation
pane" registry set (steps 1–12, incl. Wow6432Node and HideDesktopIcons) for exactly that CLSID,
and sends SHChangeNotify(SHCNE_ASSOCCHANGED) so the running Explorer picks it up.
Note: registering the config-persisted CLSID is what makes the workaround durable – the
client's startup cleanup only removes entries whose GUID does not match a folder's persisted
navigationPaneClsid. Also worth mentioning: the client never calls SHChangeNotify, so even
when the entries are written correctly, a running Explorer instance only shows them after a
restart of the Explorer process (or an external SHChangeNotify).
Additional context
- The behavior is 100 % reproducible on this machine across multiple reboots.
- Toggling the setting off/on "fixes" it temporarily because that path runs
updateCloudStorageRegistry() while the folder map is populated.
Steps to reproduce
Steps to reproduce
- Enable "Show sync folder in Explorer navigation pane" in the client settings.
- Verify the folder is visible in the Explorer navigation pane.
- Reboot Windows (or exit and restart the client).
- Open Explorer → the Nextcloud entry is gone.
Expected behavior
Expected behavior
After client startup with the toggle enabled, the Desktop\NameSpace and CLSID registry entries for the sync folder exist and the folder is visible in the Explorer navigation pane.
Which files are affected by this bug
src/gui/navigationpanehelper.cpp and src/gui/folderman.cpp
Operating system
Windows
Which version of the operating system you are running.
Windows 11 25H2
Installation method
Official Linux AppImage
Nextcloud Server version
33.0.8
Nextcloud Desktop Client version
34.0.3
Did this occur after an update or on a clean installation?
Minor version update (i.e. 33.0.0 → 33.0.1)
Are you using the Nextcloud Server Encryption module?
No
Are you using an external user-backend?
Nextcloud Server logs
Additional info
No response
Bug description
Description
On Windows, the Explorer navigation pane entries for synced folders ("Show sync folders in the Explorer navigation pane" = enabled) are removed at every client startup and never written back. The Nextcloud folder disappears from the Explorer navigation pane after each Windows reboot / client restart, even though the setting is enabled and the client is running.
Environment
C:\Users\<user>\Nextcloud(classic sync, no virtual files / VFS)showInExplorerNavigationPane=trueinnextcloud.cfg(persisted, unchanged across restarts)navigationPaneClsidis persisted innext.cfg(0\Folders\1\navigationPaneClsid=…) and does not change across restarts.Actual behavior
The client deletes its existing namespace entries at startup but never re-creates them.
Client log (
%APPDATA%\Nextcloud\logs\…_nextcloud.log.0.gz, complete startup session, 22k+ lines):That is the only
navigationpanelog line of the whole session. There is noExplorer Cloud storage provider: saving path … to CLSID …line, i.e.updateCloudStorageRegistry()performed the removal pass but never reached the save pass.
Registry state after client startup (HKCU):
Software\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace\{…}– missing (was removed)Software\Classes\CLSID\{…}– orphaned leftover of an older GUID generation (no namespace link)Root cause analysis
In
src/gui/navigationpanehelper.cpp:NavigationPaneHelperconstructor schedules an initialupdateCloudStorageRegistry()run ("Ensure that the folder integration stays persistent inExplorer, the uninstaller removes the folder upon updating the client.").
updateCloudStorageRegistry()walks allDesktop\NameSpacesub keys and marks every entrywith a matching
ApplicationNamefor removal, then re-saves only the folders currently presentin
FolderMan's folder map:for (const auto &folder : _folderMan->map()) { if (!folder->navigationPaneClsid().isNull()) … }FolderMan's map (accounts/folders are restored asynchronously). The removal pass thereforedeletes the old entries, the save loop iterates over an empty folder map and writes nothing.
The 500 ms single-shot timer is never re-armed afterwards, so the entries are never restored.
This matches the log exactly: one "removing own CLSID" line, zero "saving path" lines.
Suggested fix
One of the following:
NavigationPaneHelper::scheduleUpdateCloudStorageRegistry()onceFolderManhas finishedloading/restoring the folder list (e.g. at the end of
FolderMan::setupFolders()/after accounts are restored), instead of (or in addition to) scheduling it in the constructor.
updateCloudStorageRegistry(), skip the removal of existingentries when
_folderMan->map()is empty (folders not yet loaded) and re-schedule the updateinstead of performing a destructive pass with incomplete state.
Workaround (what we use meanwhile)
A PowerShell script that reads the per-folder
navigationPaneClsidfromnextcloud.cfg(QSettings
@VariantQUuid blob), re-creates the full MSDN "Cloud storage provider – navigationpane" registry set (steps 1–12, incl.
Wow6432NodeandHideDesktopIcons) for exactly that CLSID,and sends
SHChangeNotify(SHCNE_ASSOCCHANGED)so the running Explorer picks it up.Note: registering the config-persisted CLSID is what makes the workaround durable – the
client's startup cleanup only removes entries whose GUID does not match a folder's persisted
navigationPaneClsid. Also worth mentioning: the client never callsSHChangeNotify, so evenwhen the entries are written correctly, a running Explorer instance only shows them after a
restart of the Explorer process (or an external
SHChangeNotify).Additional context
updateCloudStorageRegistry()while the folder map is populated.Steps to reproduce
Steps to reproduce
Expected behavior
Expected behavior
After client startup with the toggle enabled, the
Desktop\NameSpaceandCLSIDregistry entries for the sync folder exist and the folder is visible in the Explorer navigation pane.Which files are affected by this bug
src/gui/navigationpanehelper.cpp and src/gui/folderman.cpp
Operating system
Windows
Which version of the operating system you are running.
Windows 11 25H2
Installation method
Official Linux AppImage
Nextcloud Server version
33.0.8
Nextcloud Desktop Client version
34.0.3
Did this occur after an update or on a clean installation?
Minor version update (i.e. 33.0.0 → 33.0.1)
Are you using the Nextcloud Server Encryption module?
No
Are you using an external user-backend?
Nextcloud Server logs
Additional info
No response