Open Source instead of Google Docs or Notion: La Suite Docs 5.0.0 released
La Suite Docs 5.0.0 separates content and metadata in the document API. This requires adjustments for API clients and self-hosters.
(Image: heise medien)
With version 5.0.0, La Suite Docs is primarily rebuilding its document API. The biggest change: document content and metadata are now separate. According to the official Release Notes and the Upgrade Guide, the previous content path is now called formatted-content, the content field is removed from the regular document response, and separate endpoints are added for reading and writing. For existing API clients, this is a breaking change.
La Suite Docs is an open-source editor for team collaboration and sees itself as a sovereign alternative to Notion or Google Docs. Target groups include public institutions as well as companies. The project is backed by the German Center for Digital Sovereignty in Public Administration (ZenDiS) and the French Interministerial Directorate for Digital (DINUM).
Content and Metadata Separated
The developers explain the reason for the drastic change in Commit d7a186a. Previously, content changes went through the same update endpoint as other document properties. Even with a simple rename, the server delivered the complete content – unnecessarily accessing the document state stored in S3. Now, there is a dedicated endpoint for this: PATCH /api/v1.0/documents/{document_id}/content/. The Upgrade Guide shows an expected payload with a Base64-encoded content field. If the provided document state is invalid, the server responds with 400 Bad Request and the error message invalid yjs document. Those who only change metadata like title or visibility no longer have to carry the actual document content along.
There is also a dedicated endpoint for reading. According to the Upgrade Guide, GET /api/v1.0/documents/{document_id}/content/ streams the content as text/plain. Commit 6b3d197 shows that StreamingHttpResponse and 8192-byte chunks are used for this. If the file is missing in storage, the endpoint still returns HTTP 200 with an empty body. The tests in the same commit also document the access matrix: Anonymous users can retrieve public documents; for non-public documents, they receive 401. Authenticated users without permission get 403 for restricted documents. In the code, the project refers to “raw Yjs content”. Yjs is a library for real-time collaboration that automatically synchronizes shared data types. Thus, the endpoint delivers the collaborative raw state of a document rather than a fully rendered exchange format.
Converters and AI Integration Reworked
For self-hosters, the second major piece of news is the upgrade of the conversion service to DocSpec 3.0.x. Pull Request #2220 explicitly states that the Docker image ghcr.io/docspecio/api:3.0.0 must be updated along with the application code. The new request format is not backward compatible; updating only one page risks failures in document conversion. The same pull request further describes the technical change: Instead of a multipart upload, the client now sends the document content directly in the request body and explicitly sets Content-Type and Accept. Those maintaining their own Compose, Helm, or Kubernetes setups must therefore firmly plan the converter into the major upgrade plan.
Also new is a Mistral integration for the new AI pipeline. Commit b6efac3 introduces a provider selection that uses either OpenAIChatModel or MistralModel depending on the configuration. The documentation of environment variables lists OPENAI_SDK_API_KEY, OPENAI_SDK_BASE_URL, MISTRAL_SDK_API_KEY, and MISTRAL_SDK_BASE_URL for this. The Upgrade Guide simultaneously renames the previous variables AI_API_KEY and AI_BASE_URL to OPENAI_SDK_*. Important for operators of their AI infrastructure: The Mistral path only works in async mode with uvicorn. For end-users, little changes initially; the innovation targets installations that do not exclusively use OpenAI-compatible counterparts.
Videos by heise
Minor Improvements for Operation and Frontend
In addition, version 5.0.0 includes several practical updates for operation and UI. Pull Request #2241 justifies the now configurable forward-auth header by the fact that Traefik uses different header names; via configuration, the header to be read can be set to, for example, HTTP_X_FORWARDED_URI. In the frontend, the Crisp help function moves to the help menu according to PR #2222 – the previous button overlapped parts of the app.
There are also smaller but useful fixes: According to PR #2028, the backend now sorts pinned documents by updated_at in descending order, and according to PR #2208, invalid move operations in the document tree are acknowledged by the server with 400 Bad Request instead of 500 Internal Server Error. The Release Notes also list several accessibility improvements and minor frontend fixes.
All in all, version 5.0.0 is not a major feature release, but a backend and infrastructure overhaul with noticeable consequences for API clients, self-hosters, and operators of their add-on services. End-users will primarily see minor UI improvements. For integrators, however, the new separation between metadata, formatted content, and raw content stream brings some adjustments.
(fo)