Files
lasuite-docs/CHANGELOG.md
T
Manuel Raynaud 2dfdae59b1 (yhub) allow optional usage of s3 persistent plugin
Yhub has a s3 persistent plugin, since now we didn't use it but we wanto
to give the possibility to use it optionnaly. To enable it set the
YHUB_S3_PERSISTENCE environment value to true and configure it.
2026-08-17 15:34:53 +02:00

71 KiB
Raw Blame History

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Unreleased

Fixed

  • 🐛(frontend) stop reconnecting to the collaboration server when it has refused the connection for good. Close codes 4400-4499 are a refusal, not a lost socket — the document was deleted (4404) or the access of this connection changed (4401) — and retrying only asked the same question again, twice a minute, for as long as the tab stayed open. The editor now stops and refetches the document instead: it reconnects when the document is still there (an access upgraded from reader to editor is a refusal too, and has to reconnect to carry its new rights) and stays closed when it is not, where the page already tells the user what happened. Everything else — a dropped socket, a restart, an unreachable server — keeps its retry loop untouched

Added

  • (collaboration) let the collaboration server keep the document blobs in a bucket instead of its own PostgreSQL database, through yhub's S3 persistence plugin: YHUB_S3_PERSISTENCE=true, plus YHUB_S3_ENDPOINT_URL, YHUB_S3_ACCESS_KEY_ID, YHUB_S3_SECRET_ACCESS_KEY, YHUB_S3_BUCKET_NAME and, when the provider needs one told rather than discovered, YHUB_S3_REGION_NAME. Off by default, which keeps everything in postgres — the configuration Docs has been running. Turned on, every compaction writes its four blobs (the garbage-collected document, the one that keeps its history, the content map and the content ids) to the bucket and leaves a reference in the row: postgres holds the index of the corpus, the bucket holds its bytes. It is a third bucket, configured under a prefix of its own next to the backend's AWS_S3_* and the legacy document store's LEGACY_S3_*, since the three may sit on three providers and each is read by the process it belongs to. Note that it is a one-way setting: a row pointing at an object is unreadable without the plugin that wrote it, and yhub reports such a version as having no content rather than as an error, so removing the setting after a compaction serves those documents empty. That, the permissions the credentials need and what the objects are is in src/yhub-server/README.md, worth reading before enabling it. An incomplete configuration is refused at startup, naming what is missing, rather than surfacing on the first compaction — a background task, where it would look like documents quietly not being persisted
  • (collaboration) erase the content of a document on the collaboration server when clean_document resets it. The command cleared the database and the object storage, but the content lives on the collaboration server now: it kept serving the document the reset was supposed to erase, and the manual remediation was to run SQL against yhub's own database. It goes through the new backend-internal POST /collaboration/reset-ydoc/v1/{org}/{docid}, which hard-deletes the room and then drops the deletion record so it stays usable — the document keeps its id and goes on being edited, which is why neither of yhub's deletions fits on its own. The documents it could not erase are named on stderr: their content is still served, and the reset is not done until they are dealt with. Note that erasing the room does not erase the copy each editor holds — reset a document when nobody is editing it
  • (collaboration) delete a document on the collaboration server when it is deleted in Docs, and restore it when it comes back out of the trashbin. The content lives there now, so until it was told, the clients already editing a deleted document went on editing it and its content outlived it. Both go through sync_service_deletions_in_cascade, which walks the deleted subtree and reports what each of its documents is now — a restored document only brings back the part of its subtree that was deleted with it. Deleting uses yhub's built-in DELETE .../ydoc/ (a soft deletion: connected clients are disconnected with the close code 4404 and every route answers 404, the content is left untouched), restoring the new backend-internal POST /collaboration/restore-ydoc/v1/{org}/{docid}, since yhub 0.6.0 has no built-in route for it. Erasing the content for good stays out of reach, as it is in Docs: a document that is no longer restorable is not erased either
  • ⬆️(collaboration) upgrade yhub to 0.6.0, which needs a schema change: a yhub_ydoc_tombstones_v1 table (it adds document deletion) and four *_is_reference markers on yhub_ydoc_v1. Neither is optional — every document read joins the tombstone table, so without them yhub answers relation "yhub_ydoc_tombstones_v1" does not exist. Existing rows read as "may be a reference", exactly as before the markers existed, so there is no backfill and no downtime beyond applying the DDL
  • 🔧(collaboration) let yhub own its schema: npm run init-db in src/yhub-server runs the DDL script yhub ships (bin/init-db.js), which creates the database when missing and every table the installed version needs. It replaces the copy of the schema we kept in docker/files/yhub/initdb/, which only replayed on a fresh postgres volume — so an upgrade that added a table silently skipped an existing database, and the copy had to be updated by hand on every upgrade. make migrate-yhub runs it against the dev stack, the counterpart of make migrate for the Django database, and is part of make bootstrap; CI runs the same script instead of applying the SQL by hand. It is the only thing that runs DDL — the server and the worker never do — and it is idempotent, so re-running it is always safe
  • (collaboration) add integration tests covering both legacy migrations, running against a real yhub: CI now starts the collaboration server and a valkey alongside the backend test job. They skip themselves when nothing answers on COLLABORATION_API_URL, so a make test without the dev stack still passes
  • (collaboration) soft-migrate legacy S3 documents into yhub on first access (SOFT_MIGRATION=true): when yhub does not know a document yet, its legacy snapshot ({id}/file, base64 Yjs update) is fetched from the Django S3 media bucket and seeded server-side (attributed to system, with no timestamp — a lazy seed is not an editing event, and stamping one would collide with the real per-version times the migrate endpoint writes) before the connection is admitted. A missing S3 object means a brand-new document and yields an empty room. Seeding never decides access: a legacy object that cannot be migrated (it does not decode) opens as a new document, logged per access, since no retry could fix it and refusing would make the document permanently unopenable. Every other failure — an unreachable store, but also any refusal from S3 such as AccessDenied on a rotated key or a wrong bucket name — answers a retryable 503, so an empty document is never started on top of content that exists. Backend reads carrying the admin JWT are seeded too, so a server-side read of an unmigrated document never answers with an empty one. Enabled in the dev stack through env.d/development/yhub, the collaboration server's own environment file. The bucket it reads is configured under LEGACY_S3_* (_ENDPOINT_URL, _ACCESS_KEY_ID, _SECRET_ACCESS_KEY, _REGION_NAME, _BUCKET_NAME, _SIGNATURE_VERSION), a set of its own and not the backend's AWS_S3_*: this is the bucket the collaboration server migrates out of, while the one it persists into when YHUB_S3_PERSISTENCE is on is a separate bucket that may well sit on another provider with credentials of its own. It is read with the AWS SDK for JavaScript v3, whose signature version is configurable (s3v4 by default, as in Django) because a provider expecting another one answers 403, which reads exactly like wrong credentials
  • (collaboration) add a migrate endpoint on yhub: POST /collaboration/migrate/v1/docs/{id} replays a document's full legacy version history from the versioned S3 media bucket into a gc: false Yjs document, crediting each S3 version with its own S3 timestamp — so activity?group=false reports the same timeline as the backend's /documents/{id}/versions/, instead of the single migration-time change the lazy soft migration leaves behind. Purely additive: the result is stored as one new row at clock 0, so nothing existing is deleted and the next compaction merges it like any other row. Idempotent by construction (the clock-0 insert is ON CONFLICT DO NOTHING, and migrated ids are recorded in a valkey set), lock-free, admin JWT only, and the intended way to backfill the corpus before SOFT_MIGRATION is turned off
  • (collaboration) add a create-ydoc endpoint on yhub: POST /collaboration/create-ydoc/v1/docs/{id} seeds a document's initial Yjs state from a raw binary update posted as application/octet-stream, so the Django backend can create documents without speaking yhub's lib0 wire encoding. Strict create (409 when the document already has content), initial content attributed to the optional X-User-Id header; guarded by standard document write access (the aud: "yhub" admin JWT, or a user session with update ability)
  • (collaboration) add an admin reset-connections endpoint on yhub: POST /collaboration/reset-connections/v1/docs/{id} re-checks the authorization of the document's connected clients and disconnects (close code 4401) only those whose access changed. Authenticated with an admin JWT verified against the backend JWKS and required to carry aud: "yhub", so an admin token Django issued for another service (e.g. the y-converter one) cannot be replayed here; not yet triggered by the backend on permission changes (follow-up)
  • ⬆️(collaboration) upgrade yhub to 0.5.0 and serve all its routes under the /collaboration/ prefix (server.apiPrefix): the websocket moves to /collaboration/ws/v1/docs. All /collaboration/ routes are meant to be publicly exposed except reset-connections and migrate, which stay backend-internal (admin JWT only). Following 0.5.0's error semantics (4xx permanent, 5xx/429 retryable), the auth plugin now reports a temporarily unreachable Django backend, JWKS endpoint or legacy S3 store as 503 instead of denying access like a permission failure, so clients retry instead of giving up. The built-in endpoints can also answer JSON on Accept: application/json
  • (backend) add a migrate_documents command replaying the legacy content of the documents into the collaboration server, one call to its migrate endpoint per document. Resumable and safe to re-run: what became of every document is recorded (impress_document_migration), a server that is unwell is retried with a backoff and a document it refuses is left for a later run (--retry-failed). Bounded by --concurrency, --rate and --limit, most recently edited documents first
  • (collaboration) notify the backend when the worker persists new content for a document, so the lists ordered by updated_at follow the edits made on the collaboration server. The backend serves it on POST /api/v1.0/documents/{id}/content-updated/, authenticated with a short lived RS256 JWT the collaboration server signs (aud: "docs-backend") and the backend verifies against the JWKS the collaboration server publishes on /collaboration/jwks/v1 — the mirror of the admin token the backend signs to call it, so no long lived secret is shared and either side can roll its key on its own
  • 🔧(dev) generate the JWT signing key of the collaboration server when bootstrapping the dev stack, alongside the backend one
  • (helm) generate the JWT signing keys of the services on the cluster (jwtKeys.enabled, off by default): a job generates the backend and the collaboration server keys with openssl, hands them to a secret both mount read-only, and sets the *_FILE variables pointing at them. No key is templated into a manifest or kept in a values file, and the job is the only thing granted a write: its role may create a secret and read whether that one exists, nothing else, and the services never call the kubernetes API. Idempotent — an existing secret is left alone, so it re-runs on every sync, and rolling the keys is deleting the secret and letting the next run create it again. jwtKeys.existingSecret points at keys of your own instead, and skips both the job and its rights
  • (collaboration) split the yhub server and worker with YHUB_ROLE: unset (or all) runs both halves in one process as before, server holds the websockets and the routes without claiming a task, worker drains the redis stream into postgres without binding a port. They share the two stores and nothing else, so each scales on what drives it — connected editors on one side, write throughput on the other. Any other value is refused at startup. In the helm chart, yhub.worker.enabled turns the single deployment into two, sets the variable on each, and gives the worker no service and no probes since it binds nothing; everything not named under yhub.worker is the server's. YHUB_TASK_CONCURRENCY (default 5, unchanged) sets how many tasks one worker process claims at once — the other half of the throughput knob the replica count is, since redis hands each task to a single worker
  • (collaboration) configure the two stream timings that were compiled into the yhub wrapper: YHUB_TASK_DEBOUNCE_MS (default 10000, unchanged), how long an update waits on the redis stream before a worker persists it — the delay between an edit and its row in postgres, and the window over which the edits of a busy document are merged into one task — and YHUB_MIN_MESSAGE_LIFETIME_MS (default 60000, unchanged), how long persisted updates stay replayable from redis rather than being read back out of postgres. Neither is a durability setting: the trim never goes past what postgres holds. Like the concurrency, they are refused at startup when they are not whole numbers in range, and all of them are logged with the role on the first line a pod writes
  • (collaboration) serve two probes on yhub: GET /collaboration/ping/v1 answers pong without touching a store — being answered is what a liveness check should conclude, and restarting a server over a store it cannot reach would drop the websockets it serves — and GET /collaboration/ready/v1 asks postgres and redis in parallel, answering 503 with the offending one marked unreachable so the pod leaves the service endpoints while its siblings keep serving. Both unauthenticated, like the JWKS; neither names the error in its body, which a postgres client would gladly fill with its connection string. The helm probes point at them
  • (helm) deploy the collaboration server: the chart gains a yhub deployment, its service, and the job running the init-db script that creates and upgrades its schema — next to the backend migrate job, retrying while the postgres server does not answer, since nothing in the chart creates it. Configured under the yhub values key, where REDIS and POSTGRES are required and have no default; the image is published as lasuite/impress-yhub
  • (backend) serve documents/{id}/formatted-content/ from yhub
  • (backend) duplicate a document through the collaboration server
  • (backend) call YHubService to seed initial document content
  • (backend) reset the yhub connections of a document and its descendants when an access or the link configuration changes
  • (backend) add a service to call the yhub REST API
  • (backend) add a service generating cached RS256 JWT tokens
  • (backend) publish the JWT public key on a JWKS endpoint
  • 🔧(dev) generate the JWT signing key when bootstrapping the dev stack
  • (frontend) restore skip to content link after header redesign #2510
  • 🌐(i18n) rename cn_CN to zh_CN, add eo_PL and zh_TW locales #2486
  • (backend) conditional email notification in server to server api #2554

Changed

  • 💥(backend) move the resource server JWKS from /api/{version}/jwks to /external_api/{version}/jwks
  • (frontend) use semantic <dl> structure in document info card #2379
  • 💄(frontend) use the same highlight color for cells and moves #2575

Fixed

  • 🐛(frontend) refresh pins after document deletion and restoration
  • 🐛(frontend) redirect homepage to login when homepage feat is disabled #2521
  • 🐛(backend) ignore CSPs for API docs in development
  • 🐛(frontend) export images embedded with a relative url #2573
  • 🐛(y-provider) fix sentry init #2579
  • 🐛(helm) show the database error while jobs wait for it to be ready #2578
  • ♻️(collaboration) migrate the collaboration server from hocuspocus to yhub: the dev stack gains dedicated valkey and postgres services for yhub. The kick flow is deferred with TODO(yhub) stubs (the reset-connections endpoint added above is its server-side replacement, backend wiring pending). The get-connections API is dropped for good: its only consumer was the removed can-edit mechanism, so it is not needed anymore
  • ♻️(backend) index the content of a document as the collaboration server has it: the search indexer reads it with YHubService, and the indexation of an edited document is triggered by the content-updated call the collaboration server makes — nothing else sees the content change anymore. It is queued as a celery task, throttled like the other updates, so no indexation ever runs in the process serving the request. A document whose content cannot be read is left out of the batch rather than indexed empty, which would have erased it from the search backend
  • ♻️(backend) duplicate the onboarding sandbox document through the collaboration server: its content is read from there and copied under the identity of the user the sandbox is created for. A collaboration server that cannot be reached skips the sandbox, as a missing template already did, and never fails the signup
  • ♻️(backend) read the content of a document from the built-in ydoc endpoint of the collaboration server: YHubService asks for JSON, which yhub speaks since 0.5.0, so the custom get-ydoc endpoint it used to need is gone. create-ydoc stays, no built-in offers what it does — a strict create, and content credited to the user rather than to the backend
  • ♻️(backend) seed the content of the demo documents in the collaboration server: create_demo no longer writes it to the object storage, which nothing reads anymore, and fails with an explicit message when the collaboration server is not running rather than building a corpus of documents that would open empty
  • 🔥(backend) remove the unused CollaborationService
  • 💥(backend) remove the documents/{id}/content/ endpoint
  • 💥(backend) remove the documents/{id}/can-edit/ endpoint
  • 💥(y-provider) the published lasuite/impress-y-provider image becomes converter-only and no longer serves /collaboration/ws/
  • 💥(helm) route /collaboration/ to yhub instead of the y-provider: both collaboration ingresses now point at the yhub service, and ingressCollaborationApi serves the routes yhub exposes to browsers (ingressCollaborationApi.paths, one ingress rule each) instead of the single /collaboration/api/ path — what is not listed stays in-cluster, so create-ydoc, reset-connections, migrate, restore-ydoc and reset-ydoc are not published. The upstream-hash-by: $arg_room annotation is dropped: yhub replicas exchange updates through redis, so a room needs no sticky upstream — and hashing on a query argument its urls do not carry would pin every connection to a single pod
  • 💥(helm) drop the yProvider.converter values, its deployment and its service: the y-provider serves nothing but the conversion API since the collaboration moved to yhub, so the yProvider release is the converter and there is no second one to enable. Deployments that had it on lose the -converter suffix on the url the backend calls — Y_PROVIDER_API_BASE_URL: http://impress-docs-y-provider:443/api/ — and yProvider.converter.* values are now ignored, their yProvider.* counterparts taking over
  • 🔧(collaboration) split the yhub image into a development and a production stage, like the other services: the dev stack now bind-mounts src/yhub-server and runs the server through nodemon, so editing a source file restarts it instead of needing make build-yhub. The production stage gains the un-privileged user and the entrypoint the other images have, and both are now built from the repository root like the rest of them

v5.4.1 - 2026-07-09

Changed

  • ♻️(backend) reset collaboration connection in cascade for all children #2507

Fixed

  • 💄(frontend) fix some UI/UX in the left panel #2516
  • 🐛(frontend) fix tree dnd firefox #2516

v5.4.0 - 2026-07-07

Added

  • (y-provider) preserve callouts, PDFs, page breaks, interlinking links and commented text on HTML/markdown export #2296
  • (frontend) add a user menu #2463
  • (frontend) new header and responsive harmonization #2471
  • (backend) add management command to reset a Document #1882

Changed

  • (frontend) hide mobile left panel from screen readers when collapsed #2450
  • (frontend) enable blocknote heading ids for toc anchors #2449
  • (frontend) focus export modal on format select #2421
  • (frontend) configurable legal submenu in HelpMenu, remove Crisp #2416
  • ♻️(frontend) new create button for docs #2423
  • (frontend) align search modal field label with placeholder #2384
  • 🚚(frontend) move Waffle to bottom left #2455
  • (frontend) remove redundant aria-label on table of contents links #2459
  • ♻️(core) fix typo in settings COLLABORATION_WS_NOT_CONNECTED_READY_ONLY #2481
  • ♻️(backend) scope document search by document id instead of path #2501

Fixed

  • 🐛(backend) prevent owner from leaving a soft-deleted document #2456
  • 🐛(frontend) fix removed item in the tree #2420
  • 🐛(frontend) fix service worker causing reload on tab focus #2454
  • 🐛(backend) update restore ability for inherited deletion #2148
  • 🔧(dev) make the dev stack domain-agnostic #2498
  • 🐛(frontend) stop force index redirect when delete doc #2490
  • 🐛(frontend) fix CTA on move modal on mobile #2502

Removed

  • 🔥(backend) remove unused default authentication backend #2480

v5.3.0 - 2026-06-19

Added

  • (backend) add limit on distinct reactions per comment #1978
  • (frontend) leave a document #2410
  • (frontend) add top parent on sub docs search #1952
  • (frontend) unauthenticated users can search #2407
  • (backend) specific user delete method to delete its relations #2437

Changed

  • 👷(CI) remove test-e2e-other-browser job #2404
  • (frontend) use heading element for pinned documents section title #2380
  • (frontend) use anchor links for table of contents entries #2390
  • (frontend) improve presenter mode screen reader and keyboard support #2383
  • (frontend) link export modal name to its heading #2422

Fixed

  • 🐛(frontend) overlap of block menu dropdown #2406
  • (backend) fix N+1 queries when serializing thread comments #2415

v5.2.1 - 2026-06-05

Changed

  • 💄(frontend) display emoji button on hover #2396

Fixed

  • 🐛(backend) close thread DB connections to fix test teardown OperationalError #2385
  • 🐛(frontend) fix crash when orphaned threads #2395
  • 🐛(backend) order trashbin response by most recently deleted #2392
  • 🐛(backend) stream document content with an async iterator under ASGI #2381
  • 🐛(frontend) fix long titles in table of content #2399

v5.2.0 - 2026-06-03

Added

  • (backend) support creating subdoc from file #1987
  • (frontend) comment side panel #2279
  • (buildpack) add PaaS deployment support, tested with Scalingo #2293
  • 🔧(backend) allow configuring settings OIDC_OP_USER_ENDPOINT_FORMAT #2306
  • (helm) create a dedicated svc and deployment for yprovider converter #2358
  • (backend) allow to leave a document #2365
  • (frontend) add the presenter mode #2321
  • 📈(backend) create a utils to capture event with posthog #2363
  • 🔧(backend) new setting DOCUMENT_ALL_ENDPOINT_ENABLED #2378

Changed

  • ♻️(frontend) centralize allowed conversion formats in ContentTypes #2215
  • ♻️(backend) allow global search in sub documents #2310
  • (backend) add a breadcrumb in the search response #2310
  • ♻️(frontend) move doc action buttons to fix toolbar #2360
  • (frontend) add aria-hidden to decorative avatar SVGs in share modal #2324
  • 🏗️(frontend) move comments to its own folder feature #2374
  • (frontend) align mobile header menu aria-label i18n pattern #2377

Fixed

  • 🐛(docs) run migration 0027 without superuser role #2284
  • 🐛(backend) prevent admins/owners from overwriting other users comments #2323
  • 🐛(y-provider) return empty output when converting empty Yjs document #2328
  • 🐛(backend) use computed_link_reach in handle_onboarding_document #2305
  • 🐛(frontend) fix toolbar blocknote hidden #2373
  • 🐛(frontend) fix application crashes when using GTranslate and zoom #2372
  • 🐛(frontend) fix emoji pdf not matching #2375
  • 🐛(backend) fix UnorderedObjectListWarning for DocumentAskForAccess viewset #2382

v5.1.0 - 2026-05-11

Added

  • (frontend) add skeleton on content loading #2254
  • (frontend) close websocket connection when user change tab #2264

Changed

  • 🏗️(core) migrate from pip to uv

Fixed

  • 🩺(project) reload app if front and back unsync #2276
  • 🐛(frontend) fix patch and comments #2273
  • 🐛(frontend) interlinking are exported correctly in print mode #2269
  • 💬(frontend) add missing link in onboarding description #2233
  • 🐛(frontend) sanitize pasted and dropped content in document title #2210
  • 🐛(frontend) Emoji menu doesn't display above comment box #2229
  • 🐛(frontend) Block menu doesn't stay open on 1st line #2229
  • 🐛(frontend) The "+" on the first line of a new doc doesn't work #2229
  • 🐛(backend) manage race condition between GET and PATCH content #2271
  • 🐛(backend) replace document creation table locks with retry strategy #2274

Security

  • 🔒(frontend) sanitize color during collaboration #2270

v5.0.0 - 2026-05-05

Added

  • (backend) create a dedicated endpoint to update document content #2171
  • (backend) stream s3 file content with a dedicated endpoint #2171
  • (backend) allow to use new ai feature using mistral sdk #2193

Changed

  • ♻️(backend) rename documents content endpoint in formatted-content (BC)
  • 🚸(frontend) show Crisp from the help menu #2222
  • (frontend) structure correctly 5xx error alerts #2128
  • (frontend) make doc search result labels uniquely identifiable #2212
  • ⬆️(backend) upgrade docspec to v3.0.x and adapt converter API #2220
  • (backend) make forward auth request uri header configurable #2241
  • (frontend) fix sidebar resize handle for screen readers #2122

Fixed

  • 🚸(frontend) redirect on current url tab after 401 #2197
  • 🐛(frontend) abort check media status unmount #2194
  • (backend) order pinned documents by last updated at #2028
  • 🐛(frontend) fix app shallow reload #2231
  • 🐛(frontend) fix interlinking modal clipping #2213
  • 🛂(frontend) fix cannot manage member on small screen #2226
  • 🐛(backend) load jwks url when OIDC_RS_PRIVATE_KEY_STR is set
  • 🐛(backend) Prevent moving document to its own descendant or self #2208
  • 🐛(backend) return 400 when restoring a non-deleted document #2225
  • 🐛(backend) fix race condition in reconciliation requests CSV import #2153
  • 🐛(backend) create_for_owner: add accesses before saving doc content #2124
  • 🐛(backend) enforce emoji validation for reactions #1965

Removed

  • 🔥(backend) remove deprecated descendants endpoint #2243
  • 🔥(backend) remove content in document responses #2171

v4.8.6 - 2026-04-08

Added

  • 🚸(frontend) allow opening "@page" links with ctrl/command/middle-mouse click #2170
  • E2E - Any instance friendly #2142

Changed

  • ♻️(backend) do not paginate threads list response #2186
  • 💄(frontend) Use StyledLink for sub doc tree #2188

Fixed

  • 🐛(frontend) Fix drop cursor creating columns #2185
  • 🐛 Fixed side effects between comments and versioning #2183
  • 🐛(frontend) Firefox child doc visual #2188

v4.8.5 - 2026-04-03

Added

  • 🔧(backend) settings CONVERSION_UPLOAD_ENABLED to control usage of docspec
  • 🥚(frontend) add easter egg on doc emoji creation #2155

Changed

  • (frontend) use aria-haspopup menu on DropButton triggers #2126
  • (frontend) add contextual browser tab titles for docs routes #2120
  • (frontend) fix empty heading before section titles in HTML export #2125

Fixed

  • (frontend) add jitter to WS reconnection #2162
  • 🐛(frontend) fix tree pagination #2145
  • 🐛(nginx) add page reconciliation on nginx #2154

v4.8.4 - 2026-03-25

Added

  • 🚸(frontend) hint min char search users #2064

Changed

  • 💄(frontend) improve comments highlights #1961
  • (frontend) improve BoxButton a11y and native button semantics #2103
  • (frontend) improve language picker accessibility #2069
  • (frontend) add aria-hidden to decorative icons in dropdown menu #2093
  • 🐛(backend) move lock table closer to the insert operation targeted
  • (frontend) replace ARIA grid pattern with list in docs grid #2131

Fixed

  • 🐛(y-provider) destroy Y.Doc instances after each convert request #2129
  • 🐛(backend) remove deleted sub documents in favorite_list endpoint #2083

v4.8.3 - 2026-03-23

Changed

  • (frontend) improve version history list accessibility #2033
  • (frontend) focus skip link on headings and skip grid dropzone #1983
  • (frontend) add sr-only format to export download button #2088
  • (frontend) announce formatting shortcuts for screen readers #2070
  • (frontend) add markdown copy icon for Copy as Markdown option #2096
  • ♻️(backend) skip saving in database a document when payload is empty #2062
  • ♻️(frontend) refacto Version modal to fit with the design system #2091
  • (frontend) add debounce WebSocket reconnect #2104

Fixed

  • (frontend) fix more options menu feedback for screen readers #2071
  • (frontend) fix more options menu feedback for screen readers #2071
  • 💫(frontend) fix the help button to the bottom in tree #2073
  • (frontend) fix aria-labels for table of contents #2065
  • 🐛(backend) allow using search endpoint without refresh token enabled #2097
  • 🐛(frontend) fix close panel when click on subdoc #2094
  • 🐛(frontend) fix leftpanel button in doc version #9238
  • 🐛(y-provider) fix loop when no cookies #2101

v4.8.2 - 2026-03-19

Added

  • (backend) add resource server api #1923
  • (frontend) activate Find search #1834
  • handle searching on subdocuments #1834
  • (backend) add search feature flags #1897

Changed

  • (frontend) ensure doc title is h1 for accessibility #2006
  • (frontend) add nb accesses in share button aria-label #2017
  • (backend) improve fallback logic on search endpoint #1834

Fixed

  • 🐛(frontend) fix image resizing when caption #2045
  • 🙈(docker) add **/.next to .dockerignore #2034
  • (frontend) fix share modal heading hierarchy #2007
  • (frontend) fix Copy link toast accessibility for screen readers #2029
  • (frontend) fix modal aria-label and name #2014
  • (frontend) fix language dropdown ARIA for screen readers #2020
  • (frontend) fix waffle aria-label spacing for new-window links #2030
  • 🐛(backend) stop using add_sibling method to create sandbox document #2084
  • 🐛(backend) duplicate a document as last-sibling #2084

Removed

  • 🔥(api) remove documents/<document_id>/descendants/ endpoint #1834
  • 🔥(api) remove pagination on documents/search/ endpoint #1834

v4.8.1 - 2026-03-17

Added

  • 🔧(backend) add DB_PSYCOPG_POOL_ENABLED settings #2035

Changed

  • ⬇️(backend) downgrade django-treebeard to version < 5.0.0 #2036

v4.8.0 - 2026-03-13

Added

  • (backend) add a is_first_connection flag to the User model #1938
  • (frontend) add onboarding modal with help menu button #1868

Changed

  • (frontend) localize LaGaufre label fallback in Docs #1979
  • (backend) add a migration cleaning on-boarding document accesses #1971
  • ⬆️(frontend) upgrade Next.js to v16 #1980
  • (frontend) fix aria-label and landmark on document banner state #1986
  • 🌐(i18n) add "new window" translation key for waffle aria-label #1984

Fixed

  • 🐛(backend) create a link_trace record for on-boarding documents #1971
  • 🐛(backend) manage race condition when creating sandbox document #1971
  • 🐛(frontend) fix flickering left panel #1989
  • (frontend) improve doc tree keyboard navigation #1981
  • 🔧(helm) allow specific env var for the backend and celery deploy

v4.7.0 - 2026-03-09

Added

  • (helm) allow all keys in configMap as env var #1872

Changed

  • 📝(docs) improve README and add documentation hub #1870
  • (frontend) restore focus to triggers after closing menus and modals #1863
  • 🚸(frontend) change position elements toolbar #1957
  • (frontend) add focus on open to modals #1948

Fixed

  • 🐛(frontend) analytic feature flags problem #1953
  • 🐛(frontend) fix home collapsing panel #1954
  • 🐛(frontend) fix disabled color on icon Dropdown #1950
  • 🐛(frontend) fix zIndex table of content #1949
  • 🐛(frontend) fix bug when language not supported by BN #1957
  • 🐛 (backend) prevent privileged users from requesting access #1898

v4.6.0 - 2026-03-03

Added

  • (frontend) integrate new Blocknote AI feature #1847
  • 👷(docker) add arm64 platform support for image builds #1901
  • (tracking) add UTM parameters to shared document links #1896
  • (frontend) add floating bar with leftpanel collapse button #1876
  • (frontend) Can print a doc #1832
  • (backend) manage reconciliation requests for user accounts #1878
  • 👷(CI) add GHCR workflow for forked repo testing #1851
  • (frontend) Move doc modal #1886
  • (backend) remove content from Document serializer when asked #1910
  • (backend) allow the duplication of subpages #1893
  • (backend) Onboarding docs for new users #1891
  • 🩺(trivy) add trivyignore file and add minimatch CVE #1915
  • 🚩 Add feature flags for the AI feature #1922
  • 🍱(frontend) add icons ui-kit #1943

Changed

  • (frontend) prevent dates from being focusable #1855
  • (frontend) Focus main container after navigation #1864
  • 💄(frontend) align colors and logo with ui-kit v2 #1869
  • 🚸(backend) sort user search results by proximity with the active user #1802
  • 🚸(oidc) ignore case when fallback on email #1880
  • (CI) optimize Docker Hub workflow #1919

Fixed

  • 🐛(frontend) fix broadcast store sync #1846
  • 🐛(helm) use celery resources instead of backend resources #1887
  • 🐛(helm) reverse liveness and readiness for backend deployment #1887
  • 🐛(y-provider) use CONVERSION_FILE_MAX_SIZE settings #1913
  • 🐛(frontend) fix callout block spacing for old browsers #1914

v4.5.0 - 2026-01-28

Added

  • (frontend) integrate configurable Waffle #1795
  • Import of documents #1609
  • 🚨(CI) gives warning if theme not updated #1811
  • (frontend) Add stat for Crisp #1824
  • (auth) add silent login #1690
  • 🔧(project) add DJANGO_EMAIL_URL_APP environment variable #1825

Changed

  • (frontend) improve accessibility:
    • (frontend) fix subdoc opening and emoji pick focus #1745
  • (backend) add field for button label in email template #1817

Fixed

  • (e2e) fix e2e test for other browsers #1799
  • 🐛(export) fix export column NaN #1819
  • 🐛(frontend) add fallback for unsupported Blocknote languages #1810
  • 🐛(frontend) fix emojipicker closing in tree #1808
  • 🐛(frontend) display children in favorite #1782
  • 🐛(frontend) preserve typed text after @ on escape #1833

Removed

  • 🔥(project) remove all code related to template #1780
  • 🔥(api) remove documents/<document_id>/descendants/ endpoint #1834
  • 🔥(api) remove pagination on documents/search/ endpoint #1834

Security

  • 🔒(trivy) fix vulnerability about jaraco.context #1806

v4.4.0 - 2026-01-13

Added

  • (backend) add documents/all endpoint with descendants #1553
  • (export) add PDF regression tests #1762
  • 📝(docs) Add language configuration documentation #1757
  • 🔒(helm) Set default security context #1750
  • (backend) use langfuse to monitor AI actions #1776

Changed

  • (frontend) improve accessibility:
    • (frontend) make html export accessible to screen reader users #1743
    • (frontend) add missing label and fix Axes errors to improve a11y #1693

Fixed

  • (backend) reduce flakiness on backend test #1769
  • 🐛(frontend) fix clickable main content regression #1773
  • 🐛(backend) fix TRASHBIN_CUTOFF_DAYS type error #1778
  • 💄(frontend) fix icon position in callout block #1779

Security

  • 🔒(backend) validate more strictly url used by cors-proxy endpoint #1768
  • 🔒(frontend) fix props vulnerability in Interlinking #1792

v4.3.0 - 2026-01-05

Added

  • (helm) redirecting system #1697
  • 📱(frontend) add comments for smaller device #1737
  • (project) add custom js support via config #1759

Changed

  • 🥅(frontend) intercept 401 error on GET threads #1754
  • 🦺(frontend) check content type pdf on PdfBlock #1756
  • ✈️(frontend) pause Posthog when offline #1755

Fixed

  • 🐛(frontend) fix tables deletion #1739
  • 🐛(frontend) fix children not display when first resize #1753

v4.2.0 - 2025-12-17

Added

  • (backend) allow to create a new user in a marketing system #1707
  • (backend) add async indexation of documents on save (or access save) #1276
  • (backend) add debounce mechanism to limit indexation jobs #1276
  • (api) add API route to search for indexed documents in Find #1276
  • 🥅(frontend) add boundary error page #1728

Changed

  • 🛂(backend) stop throttling collaboration servers #1730
  • 🚸(backend) use unaccented full name for user search #1637
  • 🌐(backend) internationalize demo #1644
  • (frontend) improve accessibility:
    • Improve keyboard accessibility for the document tree #1681

Fixed

  • 🐛(frontend) paste content with comments from another document #1732
  • 🐛(frontend) Select text + Go back one page crash the app #1733
  • 🐛(frontend) fix versioning conflict #1742

v4.1.0 - 2025-12-09

Added

  • (frontend) export html #1669

Changed

  • (frontend) improve accessibility:
    • (frontend) add skip to content button for keyboard accessibility #1624
    • (frontend) fix toggle panel button a11y labels #1634
  • 🔒(frontend) remove dangerouslySetInnerHTML from codebase #1712
  • (frontend) improve Comments feature #1687

Fixed

  • 🐛(nginx) fix / location to handle new static pages #1682
  • 🐛(frontend) rerendering during resize window #1715

v4.0.0 - 2025-12-01

Added

  • Add comments feature to the editor #1330
  • (backend) Comments on text editor #1330
  • (frontend) link to create new doc #1574

Changed

  • (sw) stop to cache external resources likes videos #1655
  • 💥(frontend) upgrade to ui-kit v2 #1605
  • (frontend) improve perf on upload and table of contents #1662
  • (frontend) improve accessibility:
    • (frontend) improve share modal button accessibility #1626
    • (frontend) improve screen reader support in DocShare modal #1628

Fixed

  • 🐛(frontend) fix toolbar not activated when reader #1640
  • 🐛(frontend) preserve left panel width on window resize #1588
  • 🐛(frontend) prevent duplicate as first character in title #1595

v3.10.0 - 2025-11-18

Added

  • (export) enable ODT export for documents #1524
  • (frontend) improve mobile UX by showing subdocs count #1540

Changed

  • ♻️(frontend) preserve @ character when esc is pressed after typing it #1512
  • ♻️(frontend) make summary button fixed to remain visible during scroll #1581
  • ♻️(frontend) pdf embed use full width #1526

Fixed

  • (frontend) improve accessibility:
    • (frontend) improve ARIA in doc grid and editor for a11y #1519
    • (frontend) improve accessibility and styling of summary table #1528
    • (frontend) add focus trap and enter key support to remove doc modal #1531
  • 🐛(frontend) fix alignment of side menu #1597
  • 🐛(frontend) fix fallback translations with Trans #1620
  • 🐛(export) fix image overflow by limiting width to 600px during export #1525
  • 🐛(export) fix table cell alignment issue in exported documents #1582
  • 🐛(export) preserve image aspect ratio in PDF export #1622
  • 🐛(export) Export fails when paste with style #1552

Security

  • mitigate role escalation in the ask_for_access viewset #1580

Removed

  • 🔥(backend) remove api managing templates

v3.9.0 - 2025-11-10

Added

  • (frontend) create skeleton component for DocEditor #1491
  • (frontend) add an EmojiPicker in the document tree and title #1381
  • (frontend) ajustable left panel #1456

Changed

  • ♻️(frontend) adapt custom blocks to new implementation #1375
  • ♻️(backend) increase user short_name field length #1510
  • 🚸(frontend) separate viewers from editors #1509

Fixed

  • 🐛(frontend) fix duplicate document entries in grid #1479
  • 🐛(backend) fix trashbin list #1520
  • (frontend) improve accessibility:
    • (frontend) remove empty alt on logo due to Axe a11y error #1516
  • 🐛(backend) fix s3 version_id validation #1543
  • 🐛(frontend) retry check media status after page reload #1555
  • 🐛(frontend) fix Interlinking memory leak #1560
  • 🐛(frontend) button new doc UI fix #1557
  • 🐛(frontend) interlinking UI fix #1557

v3.8.2 - 2025-10-17

Fixed

  • 🐛(service-worker) fix sw registration and page reload logic #1500

v3.8.1 - 2025-10-17

Fixed

  • (backend) improve trashbin endpoint performance #1495
  • 🐛(backend) manage invitation partial update without email #1494
  • (frontend) improve accessibility:
    • add missing aria-label to add sub-doc button for accessibility #1480
    • add missing aria-label to more options button on sub-docs #1481

Removed

  • 🔥(backend) remove treebeard form for the document admin #1470

v3.8.0 - 2025-10-14

Added

  • (frontend) add pdf block to the editor #1293
  • List and restore deleted docs #1450

Changed

  • ♻️(frontend) Refactor Auth component for improved redirection logic #1461
  • ♻️(frontend) replace Arial font-family with token font #1411
  • (frontend) improve accessibility:
    • (frontend) enable enter key to open documents #1354
    • (frontend) improve modal a11y: structure, labels, title #1349
    • improve NVDA navigation in DocShareModal #1396
    • improve accessibility by adding landmark roles to layout #1394
    • add document visible in list and openable via enter key #1365
    • add pdf outline property to enable bookmarks display #1368
    • hide decorative icons from assistive tech with aria-hidden #1404
    • fix rgaa 1.9.1: convert to figure/figcaption structure #1426
    • remove redundant aria-label to avoid over-accessibility #1420
    • remove redundant aria-label on hidden icons and update tests #1432
    • improve semantic structure and aria roles of leftpanel #1431
    • add default background to left panel for better accessibility #1423
    • restyle checked checkboxes: removing strikethrough #1439
    • add h1 for SR on 40X pages and remove alt texts #1438
    • update labels and shared document icon accessibility #1442
  • 🍱(frontend) Fonts GDPR compliants #1453
  • ♻️(service-worker) improve SW registration and update handling #1473

Fixed

  • 🐛(backend) duplicate sub docs as root for reader users #1385
  • ⚗️(service-worker) remove index from cache first strategy #1395
  • 🐛(frontend) fix 404 page when reload 403 page #1402
  • 🐛(frontend) fix legacy role computation #1376
  • 🛂(frontend) block editing title when not allowed #1412
  • 🐛(frontend) scroll back to top when navigate to a document #1406
  • 🐛(frontend) fix export pdf emoji problem #1453
  • 🐛(frontend) fix attachment download filename #1447
  • 🐛(frontend) exclude h4-h6 headings from table of contents #1441
  • 🔒(frontend) prevent readers from changing callout emoji #1449
  • 🐛(frontend) fix overlapping placeholders in multi-column layout #1455
  • 🐛(backend) filter invitation with case insensitive email #1457
  • 🐛(frontend) reduce no access image size from 450 to 300 #1463
  • 🐛(frontend) preserve interlink style on drag-and-drop in editor #1460
  • (frontend) load docs logo from public folder via url #1462
  • 🔧(keycloak) Fix https required issue in dev mode #1286

Removed

  • 🔥(frontend) remove custom DividerBlock ##1375

v3.7.0 - 2025-09-12

Added

  • (api) add API route to fetch document content #1206
  • (frontend) doc emojis improvements #1381
    • add an EmojiPicker in the document tree and document title
    • remove emoji buttons in menus

Changed

  • 🔒(backend) configure throttle on every viewsets #1343
  • ⬆️ Bump eslint to V9 #1071
  • (frontend) improve accessibility:
    • fix major accessibility issues reported by wave and axe #1344
    • unify tab focus style for better visual consistency #1341
    • improve modal a11y: structure, labels, and title #1349
    • improve accessibility of cdoc content with correct aria tags #1271
    • unify tab focus style for better visual consistency #1341
    • hide decorative icons, label menus, avoid accessible name… #1362
  • ♻️(tilt) use helm dev-backend chart
  • 🩹(frontend) on main pages do not display leading emoji as page icon #1381
  • 🩹(frontend) handle properly emojis in interlinking #1381

Removed

  • 🔥(frontend) remove multi column drop cursor #1370

Fixed

  • 🐛(frontend) fix callout emoji list #1366

v3.6.0 - 2025-09-04

Added

  • 👷(CI) add bundle size check job #1268
  • (frontend) use title first emoji as doc icon in tree #1289

Changed

  • ♻️(docs-app) Switch from Jest tests to Vitest #1269
  • (frontend) improve accessibility:
    • 🌐(frontend) set html lang attribute dynamically #1248
    • (frontend) inject language attribute to pdf export #1235
    • (frontend) improve accessibility of search modal #1275
    • (frontend) add correct attributes to icons #1255
    • 🎨(frontend) improve nav structure #1262
    • (frontend) keyboard interaction with menu #1244
    • (frontend) improve header accessibility #1270
    • (frontend) improve accessibility for decorative images in editor #1282
    • #1338
    • #1281
  • ♻️(backend) fallback to email identifier when no name #1298
  • 🐛(backend) allow ASCII characters in user sub field #1295
  • (frontend) improve fallback width calculation #1333

Fixed

  • 🐛(makefile) Windows compatibility fix for Docker volume mounting #1263
  • 🐛(minio) fix user permission error with Minio and Windows #1263
  • 🐛(frontend) fix export when quote block and inline code #1319
  • 🐛(frontend) fix base64 font #1324
  • 🐛(backend) allow creator to delete subpages #1297
  • 🐛(frontend) fix dnd conflict with tree and Blocknote #1328
  • 🐛(frontend) fix display bug on homepage #1332
  • 🐛link role update #1287

v3.5.0 - 2025-07-31

Added

  • (helm) Service Account support for K8s Resources in Helm Charts #780
  • (backend) allow masking documents from the list view #1172
  • (frontend) subdocs can manage link reach #1190
  • (frontend) add duplicate action to doc tree #1175
  • (frontend) Interlinking doc #904
  • (frontend) add multi columns support for editor #1219

Changed

  • ♻️(frontend) search on all docs if no children #1184
  • ♻️(frontend) redirect to doc after duplicate #1175
  • 🔧(project) change env.d system by using local files #1200
  • (frontend) improve tree stability #1207
  • (frontend) improve accessibility #1232
  • 🛂(frontend) block drag n drop when not desktop #1239

Fixed

  • 🐛(service-worker) Fix useOffline Maximum update depth exceeded #1196
  • 🐛(frontend) fix empty left panel after deleting root doc #1197
  • 🐛(helm) charts generate invalid YAML for collaboration API / WS #890
  • 🐛(frontend) 401 redirection overridden #1214
  • 🐛(frontend) include root parent in search #1243

v3.4.2 - 2025-07-18

Changed

  • (docker) Optimize Dockerfile to use apk with --no-cache #743

Fixed

  • 🐛(backend) improve prompt to not use code blocks delimiter #1188

v3.4.1 - 2025-07-15

Fixed

  • 🌐(frontend) keep simple tag during export #1154
  • 🐛(back) manage can-edit endpoint without created room in the ws #1152
  • 🐛(frontend) fix action buttons not clickable #1162
  • 🐛(frontend) fix crash share modal on grid options #1174
  • 🐛(frontend) fix unfold subdocs not clickable at the bottom #1179

v3.4.0 - 2025-07-09

Added

  • (frontend) multi-pages #701
  • (frontend) Duplicate a doc #1078
  • Ask for access #1081
  • (frontend) add customization for translations #857
  • (backend) add ancestors links definitions to document abilities #846
  • (backend) include ancestors accesses on document accesses list view #846
  • (backend) add ancestors links reach and role to document API #846
  • 📝(project) add troubleshoot doc #1066
  • 📝(project) add system-requirement doc #1066
  • 🔧(frontend) configure x-frame-options to DENY in nginx conf #1084
  • (backend) allow to disable checking unsafe mimetype on attachment upload #1099
  • (doc) add documentation to install with compose #855
  • Give priority to users connected to collaboration server (aka no websocket feature) #1093

Changed

  • ♻️(backend) stop requiring owner for non-root documents #846
  • ♻️(backend) simplify roles by ranking them and return only the max role #846
  • 📌(yjs) stop pinning node to minor version on yjs docker image #1005
  • 🧑‍💻(docker) add .next to .dockerignore #1055
  • 🧑‍💻(docker) handle frontend development images with docker compose #1033
  • 🧑‍💻(docker) add y-provider config to development environment #1057
  • (frontend) optimize document fetch error handling #1089

Fixed

  • 🐛(backend) fix link definition select options linked to ancestors #846
  • 🐛(frontend) table of content disappearing #982
  • 🐛(frontend) fix multiple EmojiPicker #1012
  • 🐛(frontend) fix meta title #1017
  • 🔧(git) set LF line endings for all text files #1032
  • 📝(docs) minor fixes to docs/env.md
  • support _FILE environment variables for secrets #912

Removed

  • 🔥(frontend) remove Beta from logo #1095

v3.3.0 - 2025-05-06

Added

  • (backend) add endpoint checking media status #984
  • (backend) allow setting session cookie age via env var #977
  • (backend) allow theme customization using a configuration file #948
  • (frontend) Add a custom callout block to the editor #892
  • 🚩(frontend) version MIT only #911
  • (backend) integrate malware_detection from django-lasuite #936
  • 🏗️(frontend) Footer configurable #959
  • 🩺(CI) add lint spell mistakes #954
  • (frontend) create generic theme #792
  • 🛂(frontend) block edition to not connected users #945
  • 🚸(frontend) Let loader during upload analyze #984
  • 🚩(frontend) feature flag on blocking edition #997

Changed

  • 📝(frontend) Update documentation #949
  • (frontend) Improve tests coverage #949
  • ⬆️(docker) upgrade backend image to python 3.13 #973
  • ⬆️(docker) upgrade node images to alpine 3.21 #973

Fixed

  • 🐛(y-provider) increase JSON size limits for transcription conversion #989

Removed

  • 🔥(back) remove footer endpoint #948

v3.2.1 - 2025-05-06

Fixed

  • 🐛(frontend) fix list copy paste #943
  • 📝(doc) update contributing policy (commit signatures are now mandatory) #895

v3.2.0 - 2025-05-05

Added

  • 🚸(backend) make document search on title accent-insensitive #874
  • 🚩 add homepage feature flag #861
  • 📝(doc) update contributing policy (commit signatures are now mandatory) #895
  • (settings) Allow configuring PKCE for the SSO #886
  • 🌐(i18n) activate chinese and spanish languages #884
  • 🔧(backend) allow overwriting the data directory #893
  • (backend) add django-lasuite dependency #839
  • (frontend) advanced table features #908

Changed

  • (frontend) reduce unblocking time for config #867
  • ♻️(frontend) bind UI with ability access #900
  • ♻️(frontend) use built-in Quote block #908

Fixed

  • 🐛(nginx) fix 404 when accessing a doc #866
  • 🔒(drf) disable browsable HTML API renderer #919
  • 🔒(frontend) enhance file download security #889
  • 🐛(backend) race condition create doc #633
  • 🐛(frontend) fix breaklines in custom blocks #908

v3.1.0 - 2025-04-07

Added

  • 🚩(backend) add feature flag for the footer #841
  • 🔧(backend) add view to manage footer json #841
  • (frontend) add custom css style #771
  • 🚩(frontend) conditionally render AI button only when feature is enabled #814

Changed

  • 🚨(frontend) block button when creating doc #749

Fixed

  • 🐛(back) validate document content in serializer #822
  • 🐛(frontend) fix selection click past end of content #840

v3.0.0 - 2025-03-28

Added

  • 📄(legal) Require contributors to sign a DCO #779

Changed

  • ♻️(frontend) Integrate UI kit #783
  • 🏗️(y-provider) manage auth in y-provider app #804

Fixed

  • 🐛(backend) compute ancestor_links in get_abilities if needed #725
  • 🔒(back) restrict access to document accesses #801

v2.6.0 - 2025-03-21

Added

  • 📝(doc) add publiccode.yml #770

Changed

  • 🚸(frontend) ctrl+k modal not when editor is focused #712

Fixed

  • 🐛(back) allow only images to be used with the cors-proxy #781
  • 🐛(backend) stop returning inactive users on the list endpoint #636
  • 🔒(backend) require at least 5 characters to search for users #636
  • 🔒(back) throttle user list endpoint #636
  • 🔒(back) remove pagination and limit to 5 for user list endpoint #636

v2.5.0 - 2025-03-18

Added

  • 📝(doc) Added GNU Make link to README #750
  • (frontend) add pinning on doc detail #711
  • 🚩(frontend) feature flag analytic on copy as html #649
  • (frontend) Custom block divider with export #698
  • 🌐(i18n) activate dutch language #742
  • (frontend) add Beautify action to AI transform #478
  • (frontend) add Emojify action to AI transform #478

Changed

  • 🧑‍💻(frontend) change literal section open source #702
  • ♻️(frontend) replace cors proxy for export #695
  • 🚨(gitlint) Allow uppercase in commit messages #756
  • ♻️(frontend) Improve AI translations #478

Fixed

  • 🐛(frontend) SVG export #706
  • 🐛(frontend) remove scroll listener table content #688
  • 🔒(back) restrict access to favorite_list endpoint #690
  • 🐛(backend) refactor to fix filtering on children and descendants views #695
  • 🐛(action) fix notify-argocd workflow #713
  • 🚨(helm) fix helmfile lint #736
  • 🚚(frontend) redirect to 401 page when 401 error #759

v2.4.0 - 2025-03-06

Added

  • (frontend) synchronize language-choice #401

Changed

  • Use sentry tags instead of extra scope

Fixed

  • 🐛(frontend) fix collaboration error #684

v2.3.0 - 2025-03-03

Added

  • (backend) limit link reach/role select options depending on ancestors #645
  • (backend) add new "descendants" action to document API endpoint #645
  • (backend) new "tree" action on document detail endpoint #645
  • (backend) allow forcing page size within limits #645
  • 💄(frontend) add error pages #643
  • 🔒 Manage unsafe attachments #663
  • (frontend) Custom block quote with export #646
  • (frontend) add open source section homepage #666
  • (frontend) synchronize language-choice #401

Changed

  • 🛂(frontend) Restore version visibility #629
  • 📝(doc) minor README.md formatting and wording enhancements
  • ♻️Stop setting a default title on doc creation #634
  • ♻️(frontend) misc ui improvements #644

Fixed

  • 🐛(backend) allow any type of extensions for media download #671
  • ♻️(frontend) improve table pdf rendering
  • 🐛(email) invitation emails in receivers language

v2.2.0 - 2025-02-10

Added

  • 📝(doc) Add security.md and codeofconduct.md #604
  • (frontend) add home page #608
  • (frontend) cursor display on activity #609
  • (frontend) Add export page break #623

Changed

  • 🔧(backend) make AI feature reach configurable #628

Fixed

  • 🌐(CI) Fix email partially translated #616
  • 🐛(frontend) fix cursor breakline #609
  • 🐛(frontend) fix style pdf export #609

v2.1.0 - 2025-01-29

Added

  • (backend) add duplicate action to the document API endpoint
  • ⚗️(backend) add util to extract text from base64 yjs document
  • (backend) add soft delete and restore API endpoints to documents #516
  • (backend) allow organizing documents in a tree structure #516
  • (backend) add "excerpt" field to document list serializer #516
  • (backend) add github actions to manage Crowdin workflow #559 & #563
  • 📈Integrate Posthog #540
  • 🏷️(backend) add content-type to uploaded files #552
  • (frontend) export pdf docx front side #537

Changed

  • 💄(frontend) add abilities on doc row #581
  • 💄(frontend) improve DocsGridItem responsive padding #582
  • 🔧(backend) Bump maximum page size to 200 #516
  • 📝(doc) Improve Read me #558

Fixed

  • 🐛Fix invitations #575

Removed

  • 🔥(backend) remove "content" field from list serializer # 516

v2.0.1 - 2025-01-17

Fixed

-🐛(frontend) share modal is shown when you don't have the abilities #557 -🐛(frontend) title copy break app #564

v2.0.0 - 2025-01-13

Added

  • 🔧(backend) add option to configure list of essential OIDC claims #525 & #531
  • 🔧(helm) add option to disable default tls setting by @dominikkaminski #519
  • 💄(frontend) Add left panel #420
  • 💄(frontend) add filtering to left panel #475
  • (frontend) new share modal ui #489
  • (frontend) add favorite feature #515
  • 📝(documentation) Documentation about self-hosted installation #530
  • (helm) helm versioning #530

Changed

  • 🏗️(yjs-server) organize yjs server #528
  • ♻️(frontend) better separation collaboration process #528
  • 💄(frontend) updating the header and leftpanel for responsive #421
  • 💄(frontend) update DocsGrid component #431
  • 💄(frontend) update DocsGridOptions component #432
  • 💄(frontend) update DocHeader ui #448
  • 💄(frontend) update doc versioning ui #463
  • 💄(frontend) update doc summary ui #473
  • 📝(doc) update readme.md to match V2 changes #558 & #572

Fixed

  • 🐛(backend) fix create document via s2s if sub unknown but email found #543
  • 🐛(frontend) hide search and create doc button if not authenticated #555
  • 🐛(backend) race condition creation issue #556

v1.10.0 - 2024-12-17

Added

  • (backend) add server-to-server API endpoint to create documents #467
  • (email) white brand email #412
  • (y-provider) create a markdown converter endpoint #488

Changed

  • (docker) improve y-provider image #422

Fixed

  • (e2e) reduce flakiness on e2e tests #511

Fixed

  • 🐛(frontend) update doc editor height #481
  • 💄(frontend) add doc search #485

v1.9.0 - 2024-12-11

Added

  • (backend) annotate number of accesses on documents in list view #429
  • (backend) allow users to mark/unmark documents as favorite #429

Changed

  • 🔒(collaboration) increase collaboration access security #472
  • 🔨(frontend) encapsulated title to its own component #474
  • (backend) optimize number of queries on document list view #429
  • ♻️(frontend) stop to use provider with version #480
  • 🚚(collaboration) change the websocket key name #480

Fixed

  • 🐛(frontend) fix initial content with collaboration #484
  • 🐛(frontend) Fix hidden menu on Firefox #468
  • 🐛(backend) fix sanitize problem IA #490

v1.8.2 - 2024-11-28

Changed

  • ♻️(SW) change strategy html caching #460

v1.8.1 - 2024-11-27

Fixed

  • 🐛(frontend) link not clickable and flickering firefox #457

v1.8.0 - 2024-11-25

Added

  • 🌐(backend) add German translation #259
  • 🌐(frontend) add German translation #255
  • (frontend) add a broadcast store #387
  • (backend) whitelist pod's IP address #443
  • (backend) config endpoint #425
  • (frontend) config endpoint #424
  • (frontend) add sentry #424
  • (frontend) add crisp chatbot #450

Changed

  • 🚸(backend) improve users similarity search and sort results #391
  • ♻️(frontend) simplify stores #402
  • (frontend) update $css Box props type to add styled components RuleSet #423
  • (CI) trivy continue on error #453

Fixed

  • 🔧(backend) fix logging for docker and make it configurable by envar #427
  • 🦺(backend) add comma to sub regex #408
  • 🐛(editor) collaborative user tag hidden when read only #385
  • 🐛(frontend) users have view access when revoked #387
  • 🐛(frontend) fix placeholder editable when double clicks #454

v1.7.0 - 2024-10-24

Added

  • 📝Contributing.md #352
  • 🌐(frontend) add localization to editor #368
  • Public and restricted doc editable #357
  • (frontend) Add full name if available #380
  • (backend) Add view accesses ability #376

Changed

  • ♻️(frontend) list accesses if user has abilities #376
  • ♻️(frontend) avoid documents indexing in search engine #372
  • 👔(backend) doc restricted by default #388

Fixed

  • 🐛(backend) require right to manage document accesses to see invitations #369
  • 🐛(i18n) same frontend and backend language using shared cookies #365
  • 🐛(frontend) add default toolbar buttons #355
  • 🐛(frontend) throttle error correctly display #378

Removed

  • 🔥(helm) remove infra related codes #366

v1.6.0 - 2024-10-17

Added

  • AI to doc editor #250
  • (backend) allow uploading more types of attachments #309
  • (frontend) add buttons to copy document to clipboard as HTML/Markdown #318

Changed

  • ♻️(frontend) more multi theme friendly #325
  • ♻️ Bootstrap frontend #257
  • ♻️ Add username in email #314

Fixed

  • 🛂(backend) do not duplicate user when disabled
  • 🐛(frontend) invalidate queries after removing user #336
  • 🐛(backend) Fix dysfunctional permissions on document create #329
  • 🐛(backend) fix nginx docker container #340
  • 🐛(frontend) fix copy paste firefox #353

v1.5.1 - 2024-10-10

Fixed

  • 🐛(db) fix users duplicate #316

v1.5.0 - 2024-10-09

Added

  • (backend) add name fields to the user synchronized with OIDC #301
  • (ci) add security scan #291
  • ♻️(frontend) Add versions #277
  • (frontend) one-click document creation #275
  • (frontend) edit title inline #275
  • 📱(frontend) mobile responsive #304
  • 🌐(frontend) Update translation #308

Changed

  • 💄(frontend) error alert closeable on editor #284
  • ♻️(backend) Change email content #283
  • 🛂(frontend) viewers and editors can access share modal #302
  • ♻️(frontend) remove footer on doc editor #313

Fixed

  • 🛂(frontend) match email if no existing user matches the sub
  • 🐛(backend) gitlab oicd userinfo endpoint #232
  • 🛂(frontend) redirect to the OIDC when private doc and unauthentified #292
  • ♻️(backend) getting list of document versions available for a user #258
  • 🔧(backend) fix configuration to avoid different ssl warning #297
  • 🐛(frontend) fix editor break line not working #302

v1.4.0 - 2024-09-17

Added

  • Add link public/authenticated/restricted access with read/editor roles #234
  • (frontend) add copy link button #235
  • 🛂(frontend) access public docs without being logged #235

Changed

  • ♻️(backend) Allow null titles on documents for easier creation #234
  • 🛂(backend) stop to list public doc to everyone #234
  • 🚚(frontend) change visibility in share modal #235
  • (frontend) Improve summary #244

Fixed

  • 🐛(backend) Fix forcing ID when creating a document via API endpoint #234
  • 🐛 Rebuild frontend dev container from makefile #248

v1.3.0 - 2024-09-05

Added

  • Add image attachments with access control
  • (frontend) Upload image to a document #211
  • (frontend) Summary #223
  • (frontend) update meta title for docs page #231

Changed

  • 💄(frontend) code background darkened on editor #214
  • 🔥(frontend) hide markdown button if not text #213

Fixed

  • 🐛 Fix emoticon in pdf export #225
  • 🐛 Fix collaboration on document #226
  • 🐛 (docker) Fix compatibility with mac #230

Removed

  • 🔥(frontend) remove saving modal #213

v1.2.1 - 2024-08-23

Changed

  • ♻️ Change ordering docs datagrid #195
  • 🔥(helm) use scaleway email #194

v1.2.0 - 2024-08-22

Added

  • 🎨(frontend) better conversion editor to pdf #151
  • Export docx (word) #161
  • 🌐Internationalize invitation email #167
  • (frontend) White branding #164
  • Email invitation when add user to doc #171
  • Invitation management #174

Fixed

  • 🐛(y-webrtc) fix prob connection #147
  • (frontend) improve select share stability #159
  • 🐛(backend) enable SSL when sending email #165

Changed

  • 🎨(frontend) stop limit layout height to screen size #158
  • (CI) only e2e chrome mandatory #177

Removed

  • 🔥(helm) remove htaccess #181

v1.1.0 - 2024-07-15

Added

  • 🤡(demo) generate dummy documents on dev users #120
  • (frontend) create side modal component #134
  • (frontend) Doc grid actions (update / delete) #136
  • (frontend) Doc editor header information #137

Changed

  • ♻️(frontend) replace docs panel with docs grid #120
  • ♻️(frontend) create a doc from a modal #132
  • ♻️(frontend) manage members from the share modal #140

v1.0.0 - 2024-07-02

Added

  • 🛂(frontend) Manage the document's right (#75)
  • (frontend) Update document (#68)
  • (frontend) Remove document (#68)
  • 🐳(docker) dockerize dev frontend (#63)
  • 👔(backend) list users with email filtering (#79)
  • (frontend) add user to a document (#52)
  • (frontend) invite user to a document (#52)
  • 🛂(frontend) manage members (update role / list / remove) (#81)
  • (frontend) offline mode (#88)
  • 🌐(frontend) translate cgu (#83)
  • (service-worker) offline doc management (#94)
  • ⚗️(frontend) Add beta tag on logo (#121)

Changed

  • ♻️(frontend) Change site from Impress to Docs (#76)
  • (frontend) Generate PDF from a modal (#68)
  • 🔧(helm) sticky session by request_uri for signaling server (#78)
  • ♻️(frontend) change logo (#84)
  • ♻️(frontend) pdf has title doc (#84)
  • (e2e) unique login between tests (#80)
  • (CI) improve e2e job (#86)
  • ♻️(frontend) improve the error and message info ui (#93)
  • ✏️(frontend) change all occurrences of pad to doc (#99)

Fixed

  • 🐛(frontend) Fix the break line when generate PDF (#84)

Delete

  • 💚(CI) Remove trigger workflow on push tags on CI (#68)
  • 🔥(frontend) Remove coming soon page (#121)

v0.1.0 - 2024-05-24

Added

  • (frontend) Coming Soon page (#67)
  • 🚀 Impress, project to manage your documents easily and collaboratively.