Skip to content

v6.0.0

Latest

Choose a tag to compare

@lunika lunika released this 09 Oct 10:19
dbf8fec

🚀 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 LoadTest configuration and its loadtest application, 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.enabled by @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_MS by @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}/jwks to /external_api/{version}/jwks by @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 CollaborationService by @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.content by @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

Full Changelog: v5.7.0...v6.0.0