Release Notes for Cristal 0.16

Last modified by Manuel Leduc on 2025/04/02

This is the release notes for Cristal.

This release brings three improvements. First, authentication is now supported for the Nextcloud backend (with oauth2 or basic authentication modes). Then, it is possible to configure when the pages are stored on the Nextcloud and File System backends. Finally, we introduced a new editor based on Blocknote. This new editor currently not considered stable and is provided as test only.

Information

Note for translators: While there is currently no easy way to switch languages, we started extracting translatable text info a format that can be exploited by Weblate. You can already start translating a few translation keys.

Warning

Cristal is still under heavy development.

  • All APIs are subject to be changed without notice
  • A lot of features are subject to limitations that will be removed over time
  • See the Roadmap page to see what we plan to work on in the next releases

New and Noteworthy (since Cristal 0.15)

Full list of issues fixed and Dashboard for 0.16.

For Users

Authentication support for Nextcloud backend

 
Authentication for the Nextcloud backend is now supported, both through basic authentication and OAuth2 authentication. Please refer to the Nextcloud backend documentation to find the complete setup process.

Blocknote editor

 
Blocknote is now an alternative to Tiptap to edit pages. See the Admin section for more details on how to switch the editor to Blocknote.

The main benefits are:

  • better block editing experience
  • improved editing of tables
Warning

The Blocknote editor is currently not stable and is provided for test only.

The known limitations are:

For Admins

  • Configurable editor: A new editor is now available on the configuration. When undefined, the value falls back to the default editor, which is currently tiptap.

  • Configurable root location for FileSystem: The FileSystem backend now allows an admin to set the root location where the documents will be managed on Cristal. Please refer to the specific documentation for more information.

  • Configurable root location for Nextcloud: The Nextcloud backend now allows an admin to set the root location where the documents will be managed on Cristal. Please refer to the specific documentation for more information.

For Developers

Reactivue

 
 

ReactiVue is a library that enables seamless integration of React components inside of Vue. Although it should be compatible with Vue 2, it is mainly designed to support Vue 3.

The reason this library exists is because Cristal is written in Vue 3, and BlockNote is written in React. To integrate them seamlessly without using BlockNote's headless version - which does not contain any UI element - we decided to test various solutions.

We tried various existing libraries to integrate React inside Vue, but none ended up working properly. So we decided to make a small proof-of-concept on our own to see if we could make it work by ourselves, and we ended up succeeding!

The library is very small (< 500 LoC), and works by wrapping a provided React component inside a Vue component. The latter then sets up a React application, and renders the former inside it. Custom properties can be provided.

Some features include:

  • Full support for typing (TypeScript)
  • Support for Vue's slots, including types and bindings
  • Dynamic properties update - if the provided properties change, they are updated in the mounted component dynamically
  • Nesting - you can put a Vue component inside a React component as well! And you can also have multiple levels of nesting
  • All types, including complex types (nested records, keys remapping, etc.) are supported
  • Customize Vue app when mounting slots

Children provided to React components are mounted as Vue slots, each within their own Vue app. This app can be customized to e.g. add plugins.

Emphasis has been made on keeping the library as simple as possible, and providing robust type safety. It only has two dependencies: Vue and React. No other runtime dependencies are present. Also, no "hack" is used here, we only use tools provided by both Vue and React to make it work. Some "hacks" are used for typing though, as typing dynamic Vue components is not possible otherwise.

Note that, as of 0.16, this library has not been battle-tested. This means some bugs may arise when using this library, even if our own testing didn't show any shortcoming of our current approach.

Universal AST

 
 

UniAst, for Universal Abstract Syntax Tree, is a system designed to provide a universal representation of a XWiki document. It exists as a standalone package in Cristal, and is planned to be integrated into XWiki in future versions.

The base operation is the following:

  • You take the document's source (markdown, HTML, etc.)
  • That code is parsed using UniAst's provided converters
  • The AST is then converted to the current editor's internal structure

So to sum up:

  • As input: XWiki document => UniAst => any editor
  • As output: any editor => UniAst => XWiki document

This structure enables seamless integration of various formats and editors together.

As of 0.16, the current UniAst implementation only provides support for Markdown, in the form of a Markdown => UniAst as well as a UniAst => Markdown converter.

The BlockNote editor contains a UniAst => BlockNote and a BlockNote => UniAst converter. The upside of this system is that any new editor will only have to implement a two-way converter like this to support any other format like Markdown or HTML, both as input and output, without any feature loss.

The UniAst format is not stable yet, and may never be. It will be modified in future releases, so expect breaking changes. Also, it may be superseded by using XWiki's own DOM format (the one used by macros) instead, in order to integrate more seamlessly between the frontend and the backend.

No guarantee is made as to how the UniAst system is going to work, but the general idea of having an intermediary reprensetation is the one we strive for in the foreseeable future (XWiki document => IR => UniAst).

The converters are usually pretty small files, 200~300 lines long, as the format is designed to be very simple and easy to manipulate and extract informations from/into.

 

Upgrades

Security Issues

Security issues are not listed in issue lists or dashboards to avoid disclosing ways to use them, but they will appear automatically in them once they're disclosed. See the XWiki Security Policy for more details.

Known issues

Credits

France 2030 Logo

This project is being financed by the French State as part of the France 2030 program

Ce projet est financé par l’État Français dans le cadre de France 2030

The following people have contributed code to this release (sorted alphabetically):

  • ClementEXWiki
  • Manuel Leduc
  • Pierre Jeanjean
  • Simpel

Get Connected