8.2.0 - 2026-10-26
❤️ Thanks to all contributors! ❤️
@AlexAndBear, @BloomyInDev, @JammingBen, @LetsDrinkSomeTea, @aduffeck, @dschmidt, @eriktews, @fredrikblau, @jay23606, @kulmann, @tammi-23, @tbsbdr, @v-scharf
📈 Enhancement
- feat(preview): open heic, heif and avif images [#4009]
- fix(preview): truncate long file names in the photo roll [#4018]
- Zoom images in the preview app with ctrl/cmd + mouse wheel [#3996]
- feat: disable guest sharing on spaces [#3994]
- fix: improve readability of the archive and vault icons [#3991]
- set folder color to blue 587DAB [#3972]
- feat: open permanent links as a guest [#3908]
- feat: list all shares for guest users [#3829]
- feat(extension-sdk): add the base element in unit tests [#3800]
- feat(web-pkg): allow following users in the yjs collaborators list [#3803]
- feat(app-store): add sorting and release dates [#3825]
- feat: accept route locations in buildUrl [#3798]
- Handle SSEs for resources in incoming shares [#3898]
- feat: resolve guest links into file listing [#3816]
- feat: renew expired guest sessions [#3811]
- feat: Guest auth [#3338]
- feat: folder first sorting [#3792]
- feat: custom font size and type [#3649]
- [full-ci] feat: support Apple Live Photos [#3548]
- feat: add norwegian nynorsk [#3623]
- feat(web-runtime): show the status of app tokens [#3607]
- feat(external): close the app via the collabora back button [#3612]
- feat: support image icons for apps and extensions [#3580]
- feat: add whiteboard icon for excalidraw files [#3584]
- feat: search for tags in the global search and enhance the visually reasoning for matching results [#3558]
- feat: add app version compatibility checks [#3568]
- feat(app-store): redesign the app store [#3534]
- feat: apply the OpenCloud brand colors to the CTA [#3521]
- feat(preview): preload next and previous image [#3529]
- feat(preview): add support for mkv video files [#3564]
- feat: filter favorites by tags and always show the tag filter [#3554]
- feat: remove condensed list view and switch view modes with toggle buttons [#3538]
- perf: load group memberships only on the account page [#3553]
- chore: use line icons for all sidebar panel actions [#3539]
- feat: add font and app illustrations to the empty states [#3556]
- feat(rclone-crypt): use the password generator and policy for vault passwords [#3537]
🐛 Bug Fixes
- fix: improve a11y semantics across files, sharing, editor and forms [#3970]
- Keep the file extension attached to a wrapping resource name [#4017]
- fix: save unsaved changes before deleting the open file [#3783]
- fix: announce search results to screen readers [#3990]
- fix(yjs): keep debounced keystrokes when a peer's recovery lands [#3582]
- fix: show a cancel button in confirmations of destructive actions [#3958]
- fix: revert the share role dropdown when the role change fails [#3909]
- fix: use the secondary color for markdown links and sync the default primary color [#3974]
- fix: sort space members and managers by name within a role [#3927]
- fix: check the matching actions before keyboard copy, cut and paste [#3925]
- fix: handle sse share events for guests [#3981]
- fix: let collaborator names use the full row width [#3926]
- fix: send isMobile information to server for collaboration service [#3971]
- fix(yjs): renew expired token [#3966]
- fix: keyboard focus and space handling from accessibility audit [#3824]
- fix: re-root unlocked vault engines when a vault or its parent folder is renamed [#3964]
- fix: keep filter values from the URL that no longer exist [#3951]
- fix: show a not found message for links to inaccessible project spaces [#3953]
- fix: update tab title and search location chip on language change [#3923]
- fix: drop the search app's /search/list route [#3965]
- fix: address partly fixed accessibility audit findings [#3939]
- fix: update the current folder when changing a resource field [#3948]
- fix: show a no results message in share views when only filters match nothing [#3919]
- fix: only undo the latest deletion with Ctrl+Z [#3949]
- fix: filter and search all shares before paginating the share views [#3875]
- fix: only change sync for the shares that need it in a mixed selection [#3906]
- fix: scale SVG previews to fit the preview stage [#3911]
- fix: address attribute-only accessibility audit findings [#3823]
- fix: reject a whitespace-only password when editing a user [#3907]
- fix: copy link without ClipboardItem and keep the clipboard when there is no single link [#3871]
- fix: show a clear message when a file drop link was deleted [#3905]
- Fix Guest SVG previews across Web and API origins [#3835]
- fix: deselect hidden files when they get hidden [#3870]
- fix: show an error when the user details can't be loaded in admin Users [#3775]
- fix: give the search list its own task so the preview can't cancel it [#3869]
- fix: normalize shortcut URLs without HTML sanitization [#3814]
- fix: keep Save as in folder edit links after a reload [#3784]
- fix: keep search scope in sync across reloads and view changes [#3703]
- fix: offer only keep both and skip for upload conflicts between file and folder [#3735]
- fix: distinguish default and unlimited space quotas [#3728]
- fix: follow the current folder when it is moved [#3873]
- fix: show errors for failed drag and drop moves [#3872]
- Make archiver work with guest link auth [#3900]
- Fix background flash with automatic theme [#3843]
- Keep Preview photo-roll icons centered when the sidebar opens [#3840]
- fix: don't confirm a modal while its confirm button is disabled [#3880]
- fix: leave a space when it gets disabled or deleted [#3774]
- fix: only renew the login when admins rename themselves [#3882]
- fix: wrap long names in notifications and keep placeholders in activity names [#3892]
- fix: show epub content in dark theme in chromium [#3888]
- fix: keep notifications and show an error when marking all as read fails [#3886]
- fix: show the no results message for a tag-only search [#3885]
- fix(preview): show an error for a deep link to a file that can't be previewed [#3773]
- fix: avoid batch name collisions when keeping both on paste and upload [#3697]
- fix: skip the conflict when closing the resource conflict modal [#3742]
- fix: let space toggle a focused checkbox in lists [#3752]
- fix: refresh files list and quota after cancelling uploads [#3701]
- fix: follow the search term in the admin users route query [#3753]
- fix: keep create user and group dialogs open while the name check runs and on errors [#3694]
- fix: address small optional accessibility audit findings [#3822]
- fix: address small accessibility audit findings [#3821]
- fix: only show the link copied message after a successful clipboard write [#3763]
- fix: use a separate upload endpoint per file in public file drops [#3762]
- fix: don't add a tag when only spaces are entered [#3764]
- fix: keep the public link token in the preferences link [#3778]
- Fix small WCAG accessibility failures [#3820]
- Fix modal Escape handling after focus loss [#3805]
- fix: name the existing item's type in the conflict dialog [#3776]
- fix: share the clicked folder from the breadcrumb menu, not the selection [#3813]
- fix: link space notifications once the space is loaded [#3777]
- fix: open the parent folder when a folder url points to a file [#3779]
- fix: show app not found for app store links with a percent sign [#3787]
- fix: show an error when the app store apps can't be loaded [#3789]
- fix: show and hide hidden search results without searching again [#3716]
- fix: keep shift-click ranges contiguous in admin settings lists [#3744]
- fix: ignore spaces around search terms [#3730]
- fix: start on the first page after a new search or filter change [#3708]
- fix: no unhandled error when the server rejects a link password [#3712]
- fix: reject whitespace-only public link names [#3731]
- fix: show a space's size in the details only inside the space [#3715]
- fix: sort unrestricted spaces as largest total quota [#3729]
- fix: show the last page instead of an empty list when the page is out of range [#3711]
- fix: close the notifications drop when a notification is clicked [#3734]
- fix: reject whitespace-only app token notes [#3732]
- fix: stop sending the cached space name on space and quota updates [#3705]
- fix: keep open context menus when a file in the list changes [#3785]
- fix: keep filter chips in sync with the URL on back and forward [#3699]
- fix: don't limit the length of vault passwords [#3727]
- fix: sum up all files in the upload quota check [#3698]
- fix: keep both on upload for special-character and same-named folders [#3693]
- fix: wait for user data before showing the user batch actions [#3733]
- fix: stop the share recipient search spinner when the search fails [#3717]
- fix: show the file name instead of the share id for single file shares in apps [#3714]
- fix: split pasted tags on commas [#3713]
- fix: show the new link type only after the link was updated [#3704]
- fix: no error when a drop is hidden while updating its position [#3702]
- fix(editor): keep escaped thematic breaks as paragraph text [#3765]
- fix: open mobile bottom drawers as named modal dialogs [#3645]
- fix: open external notification links in a new tab [#3743]
- fix: allow svg and webp images in the editor cloud image picker [#3707]
- fix: ignore desktop file drops on breadcrumb items [#3706]
- fix: round custom quotas to whole bytes [#3695]
- fix: keep the selection after link changes in shared via link and shared with others [#3696]
- fix: keep folder and extensionless names intact when renaming with hidden extensions [#3687]
- fix: reload app tokens once a token is created [#3692]
- fix: apply delegated token updates in embed mode [#3686]
- fix: don't add already selected rows again on shift arrow in admin settings [#3691]
- fix: stop the search preview from hanging when a provider search fails [#3690]
- fix(web-runtime): handle wrong passwords on the public link page [#3592]
- fix: select shares from notifications and show the highest share role [#3598]
- fix: make upload actions reactive [#3651]
- fix(editor): keep task list content and indented code fences in markdown [#3616]
- fix: keep public link uploads on the server origin after entering the password [#3688]
- fix: keep skipped files out of uploads [#3689]
- fix: ignore space key in admin settings lists without a selected row [#3685]
- fix: close embedded pickers with Escape [#3630]
- fix: list links on space roots as spaces in shared via link [#3605]
- fix: no image from the cloud in the text editor on public links [#3632]
- fix(design-system): OcSwitch keeps its focus, OcMobileDrop takes it when opened [#3627]
- fix: show folder loading errors in the app wrapper instead of an endless spinner [#3603]
- fix: wait for the sidebar resource before rendering the shares panel [#3639]
- fix(web-pkg): enforce the maximum password length of the password policy [#3599]
- fix: reject images that can't be decoded before cropping [#3600]
- fix: keep the file list up to date after uploads [#3587]
- fix: keep spaces in changed passwords and log out from the profile page without errors [#3597]
- fix(admin-settings): keep users and groups whose deletion failed [#3596]
- fix: let space managers enable disabled spaces [#3602]
- fix(web-pkg): check the event target for disabled key bindings [#3595]
- fix(search): fall back to the first provider on the search list [#3594]
- fix(rclone-crypt): skip the unlock page in the browser history [#3593]
- fix: public link actions and the password policy for anonymous visitors [#3591]
- fix(web-runtime): keep the public link context when unlocking a vault [#3606]
- fix: limit expiration dates to 100 years in the future [#3601]
- fix: update the sidebar preview when switching to a resource with the same mdate [#3615]
- fix: handle deep links to deleted or missing files [#3590]
- fix: show the whole image in the file details preview [#3609]
- fix(files): report moved files after cut & paste and block pasting into own subfolders [#3588]
- fix(web-runtime): keep upload progress sane after resume and show failed upload details [#3586]
- fix(tests): authenticate basic auth requests with the username [#3318]
- fix(design-system): derive a valid color for every icon name [#3585]
- fix(web-pkg): limit resource names to 255 bytes [#3589]
- fix: mobile fixes for form messages, the page size select, the floating action button, batch icons, preview swiping and Save as [#3578]
- fix(yjs): run initial hydration only on the first sync [#3581]
- fix(design-system): stop raw buttons from filling stroke-only shapes in resource icons [#3575]
- fix: mobile layout fixes for long names, search fields and space icons [#3573]
- fix: improve mobile usability of tooltips, switches, editor menus and admin tables [#3550]
- fix(admin-settings): respect the app icon fill type in the apps list [#3567]
- fix: prevent app token from being generated more than once [#3541]
- fix: text editor bugs found during exploratory testing [#3533]
- fix(web-pkg): align the rename button with the name when the path is shown [#3551]
- fix(web-app-files): highlight the search term in the names of the search results [#3555]
- fix: improve mobile layouts with css-only adjustments [#3549]
✅ Tests
- test(e2e): only fail on critical and serious best-practice a11y findings [#3980]
- test(e2e): extend a11y coverage and add keyboard checks [#3795]
- test: exclude Claude worktrees from Vitest discovery [#3815]
- test(e2e): cover sse events for share recipients [#3799]
- fix(e2e): retry open-with submenu click to fix flaky context menu [#3757]
- test: remove duplicated sidebar/context-menu variant coverage in e2e [#3520]
📦️ Dependencies
- fix(deps): update dependency @vueuse/core to v15 [#3391]
- chore(deps): update devdependencies (non-major) [#4014]
- chore(deps): update pnpm to v11.28.8 [#3995]
- chore(deps): update dependency filesize to v11.0.29 [#4015]
- chore(deps): update apache/tika docker tag to v4.2.1 [#4012]
- chore(deps): update dependency prettier to v3.9.10 [#3982]
- chore(deps): update dependency filesize to v11.0.28 [#3984]
- chore(deps): update pnpm to v11.28.7 [#3979]
- chore(deps): update dependency filesize to v11.0.27 [#3978]
- chore(deps): update dependency vite to v8.3.5 [#3977]
- chore(deps): update traefik docker tag to v3.7.16 [#3960]
- chore(deps): update node.js to v24.22.1 [#3968]
- chore(deps): update dependency happy-dom to v21.0.4 [#3959]
- chore(deps): update dependency knip to v6 [#3944]
- fix(deps): update dependency @casl/ability to v7.0.2 [#3936]
- chore(deps): update dependency @uppy/core to v6.3.0 [#3941]
- fix(deps): update dependency qs to v6.16.1 [#3940]
- chore(deps): update tiptap monorepo [#3791]
- chore(deps): update traefik docker tag to v3.7.15 [#3935]
- fix(deps): update dependency pinia to v4.1.0 [#3810]
- chore(deps): update dependency happy-dom to v21 [#3650]
- chore(deps): update typescript-eslint monorepo to v8.72.0 [#3747]
- chore(deps): update pnpm to v11.28.6 [#3931]
- chore(deps): update node.js to v24.22.0 [#3802]
- chore(deps): update dependency @pinia/testing to v2.0.2 [#3808]
- chore(deps): update dependency cropperjs to v2.3.1 [#3930]
- fix(deps): update dependency zod to v4.6.7 [#3644]
- chore(deps): update devdependencies (non-major) [#3613]
- chore(deps): update dependency filesize to v11.0.26 [#3643]
- chore(deps): update dependency p-queue to v9.3.5 [#3642]
- fix(deps): update dependency uuid to v14.0.3 [#3640]
- chore(deps): update hocuspocus monorepo to v4.7.1 [#3746]
- chore(deps): update dependency dompurify to v3.4.17 [#3745]
- chore(deps): update collabora/code docker tag to v26.04.5.1.1 [#3634]
- fix(deps): update dependency vue-router to v5.4.0 [#3611]
- chore(deps): update dependency cropperjs to v2.3.0 [#3608]
- chore(deps): update traefik docker tag to v3.7.14 [#3576]
- chore(deps): update uppy monorepo [#3515]
- chore(deps): update dependency vite to v8.3.3 [#3570]
- chore(deps): update pnpm to v11.28.5 [#3571]
- chore(deps): update typescript-eslint monorepo to v8.71.1 [#3566]
- chore(deps): update devdependencies (non-major) [#3528]
- [full-ci] chore: bump opencloud for tests to v8.1.0 [#3565]
- chore(deps): update dependency focus-trap to v8.2.3 [#3560]