Repository navigation
🚀 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 #2697
- @gokul-debugger made their first contribution in #2608
- @Manixhor made their first contribution in #2708
- @dmonad made their first contribution in #2556
- @armandParser made their first contribution in #2719
- @berlewis made their first contribution in #2751
- @Marrrrrrrrry made their first contribution in #2753
- @gene1wood made their first contribution in #2766
- @sneko made their first contribution in #2682
- @RoeeSivan made their first contribution in #2771
Full Changelog: v5.7.0...v6.0.0