La Suite Docs
Open-source, web-native text editor for real-time collaborative documents and sub-documents.
Alternative to: notion, google docs

v6.0.0
2026-10-09π Docs 6.0: welcome yhub
With this release, the collaboration server moves to yhub. This is a significant change of stack, so please read the upgrade guide before updating your instance.
yhub is a collaboration server made by @dmonad, the creator of Yjs itself, and Docs now runs on it through yhub-server, a thin wrapper tailored for Docs. It should bring better stability, and it opens the door to some amazing features that we will be able to ship soon!
A huge thank you to Kevin (@dmonad) for building it with us and for the time and care he put into this migration. π
Letβs ship! π’
Added
- π·(ci) lint, typecheck, build and test the collaboration server (yhub) by @lunika #2757
- π·(ci) check the load-test tooling: swarm, canary, k6 and dashboards by @lunika #2757
- π·(ci) cancel the superseded runs of a pull request by @lunika #2757
- β¨(backend) add mention endpoint with cooldown-limited email notification by @maboukerfa #2447
- π©(setting) add feature flag on Duplicate with Children by @AntoLC #2721
- π(frontend) redesign 404 error standalone page by @Ovgodd #2696
- π(frontend) redesign 403 access denied page by @Ovgodd #2720
- β¨(frontend) duplicate with subdocuments by @AntoLC #2584
- β¨(frontend) add markdown download option by @gokul-debugger #2608
- β¨(frontend) turn pasted doc links into interlinks by @AntoLC #2713
- β¨(helm) allow disallowing search engine indexing per instance by @AntoLC #2694
- β¨(backend) expose the attachment max size in the config endpoint by @RISK-alt #2577
- β¨(frontend) warn before uploading an attachment over the size limit by @RISK-alt #2577
- β¨(loadtest) add a websocket load generator for the collaboration server by @lunika #2556
- β¨(loadtest) add k6 scenarios for the page-open sequence and the heavy endpoints by @lunika #2556
- β¨(loadtest) add browser canaries measuring what a user feels under load by @lunika #2556
- β¨(loadtest) add the grafana dashboards of the load-test campaign, valkey included by @lunika #2556
- π(documentation) add the load-testing guide by @lunika #2556
- π§(helm) run grafana with those dashboards in the dev cluster, in place of the prometheus console by @lunika #2556
- β¨(backend) measure the calls to yhub and to the converters, the database pool and the celery queue by @lunika #2556
- β¨(backend) add a
LoadTestconfiguration and itsloadtestapplication, minting sessions for load tests by @lunika #2556 - β¨(collaboration) add opt-in prometheus metrics to yhub, server and worker, protected by a bearer token by @lunika #2556
- β¨(collaboration) report yhub errors to sentry, configured through
SENTRY_*by @lunika #2556 - β¨(backend) add opt-in prometheus metrics on
/metrics, protected by a bearer token by @lunika #2556 - β¨(helm) add a dedicated ingress for the prometheus metrics of the backend and of yhub by @lunika #2556
- β¨(helm) add a ServiceMonitor and a PodMonitor per component whose metrics are enabled, and
backend.metrics.enabledby @lunika #2556 - π§(helm) scrape the metrics of the dev cluster with a trimmed kube-prometheus-stack and the ServiceMonitors of the chart by @lunika #2556
- π§(helm) serve the example console of django-prometheus on the dev Prometheus by @lunika #2556
- β¨(backend) add a service generating cached RS256 JWT tokens by @lunika #2556
- β¨(backend) publish the JWT public key on a JWKS endpoint by @lunika #2556
- π§(dev) generate the JWT signing key when bootstrapping the dev stack by @lunika #2556
- β¨(collaboration) add an admin reset-connections endpoint on yhub by @dmonad #2556
- β¨(collaboration) add a create-ydoc endpoint on yhub by @dmonad #2556
- β¨(collaboration) soft-migrate legacy S3 documents into yhub by @dmonad #2556
- β¨(collaboration) replay legacy s3 version history into yhub by @dmonad #2556
- β¨(backend) add a service to call the yhub REST API by @lunika #2556
- β¨(backend) call YHubService to seed initial document content by @lunika #2556
- β¨(collaboration) add a get-ydoc endpoint on yhub by @lunika #2556
- β¨(backend) duplicate a document through the collaboration server by @lunika #2556
- β¨(backend) serve
documents/{id}/formatted-content/from yhub by @lunika #2556 - β¨(collaboration) notify the backend when the worker persists new content by @lunika #2556
- β¨(collaboration) let a user read the documentβs editing history by @dmonad #2556
- β¨(frontend) fall back to http polling when the websocket cannot be opened. by @dmonad #2556
- π§(collaboration) make the version-history granularity configurable through
COLLABORATION_VERSION_GRANULARITY_MSby @AntoLC #2556 - β¨(frontend) keep a local copy of documents, so they open and stay editable offline by @AntoLC #2556
Changed
- π(backend) let users allowed to comment list each otherβs accesses by @maboukerfa #2447
- β»οΈ(collaboration) migrate the collaboration server from hocuspocus to yhub by @dmonad #2556
- π₯(y-provider) y-provider becomes converter-only by @dmonad #2556
- π₯(backend) move the resource server JWKS from
/api/{version}/jwksto/external_api/{version}/jwksby @lunika #2556 - π§(collaboration) adapt docker stack for development purpose by @lunika #2556
- π§(helm) run a valkey for the backend and one for yhub in dev and feature by @lunika #2556
- π(frontend) redesign 401 error standalone page by @Ovgodd #2716
Fixed
- π(frontend) never list two versions ending at the same moment by @AntoLC #2781
- π(documentation) fix minio port and keycloak realm in the k8s guide by @berlewis #2751
- π(collaboration) bound the calls yhub makes to the backend with a timeout,
YHUB_BACKEND_REQUEST_TIMEOUT_MS, 5s by default by @Marrrrrrrrry #2753 - π(frontend) cache hashed
/_next/static/assets and revalidate HTML by @AntoLC #2770 - π(backend) compensate document duplication failures by @Marrrrrrrrry #2755
- π(frontend) open search results in a new tab with ctrl/cmd+click by @armandParser #2719
- π(docker) pull minio images from pgsty by @AntoLC #2739
- π(backend) retry the duplicate of a document on a tree path collision by @lunika #2726
- π(frontend) keep caption and alignment when replacing an image by @Ovgodd #2730
- π(backend) reset the collaboration connections on every access change by @lunika #2725
- β‘οΈ(backend) coalesce and pace the resets of collaboration connections by @lunika #2725
- π(frontend) clear callout background on Backspace by @Manixhor #2052
- π(export) keep image aspect ratio in PDF columns by @Ovgodd #2670
- π(frontend) fix redirect after deleting a document by @AntoLC #2706
- π(frontend) keep documents draggable with a mouse when zoomed by @Ovgodd #2727
- π(docs) fix markdown typo in installation README by @gene1wood #2766
- π(i18n) export locale correctly by @Marrrrrrrrry #2750
- π(frontend) keep login and logout out of the service worker cache by @RoeeSivan #2771
- π(frontend) reduce PostHog volume from web vitals and opt_in spam by @AntoLC #2701
- π(frontend) stop reconnecting to the websocket based on the status code by @lunika #2556
- π(frontend) stop the service worker from caching the collaboration serverβs rest api by @AntoLC #2556
Removed
- π₯(backend) remove the unused
CollaborationServiceby @lunika #2556 - π₯(backend) remove the
documents/{id}/can-edit/endpoint by @lunika #2556 - π₯(backend) remove the
documents/{id}/content/endpoint by @lunika #2556 - π₯(backend) remove the document version endpoints. by @lunika #2556
- π₯(backend) remove
Document.contentby @lunika #2556
Security
- ποΈ(collaboration) stop read-only users from sharing their cursor by @dmonad #2556
- ποΈ(backend) fix race conditions between actions updating a docs by @lunika #2781
New Contributors
- @anveetpal01 made their first contribution in https://github.com/suitenumerique/docs/pull/2697
- @gokul-debugger made their first contribution in https://github.com/suitenumerique/docs/pull/2608
- @Manixhor made their first contribution in https://github.com/suitenumerique/docs/pull/2708
- @dmonad made their first contribution in https://github.com/suitenumerique/docs/pull/2556
- @armandParser made their first contribution in https://github.com/suitenumerique/docs/pull/2719
- @berlewis made their first contribution in https://github.com/suitenumerique/docs/pull/2751
- @Marrrrrrrrry made their first contribution in https://github.com/suitenumerique/docs/pull/2753
- @gene1wood made their first contribution in https://github.com/suitenumerique/docs/pull/2766
- @sneko made their first contribution in https://github.com/suitenumerique/docs/pull/2682
- @RoeeSivan made their first contribution in https://github.com/suitenumerique/docs/pull/2771
Full Changelog: https://github.com/suitenumerique/docs/compare/v5.7.0β¦v6.0.0