Skip to content

0.9.0

Compare
Choose a tag to compare
@KitsuneRal KitsuneRal released this 25 Oct 06:12
· 128 commits to dev since this release
e70e242

A new stable release and a new branch of libQuotient are out the door, a year and 3+ months since 0.8.0, and a bit over 6 months after the last stable release, 0.8.2, getting almost 400 commits in this half a year. Thanks to the NeoChat team (@TobiasFella and @nvrWhere, namely) actively participating in the library development, we are now in condition to release roughly one new stable branch a year, and a stable release every few months.

Same as with 0.8.0, make sure to read the beta release notes if you're looking for the list of most important changes. We also had a few additions through several release candidates since, covered in the respective (much shorter) release notes (you can find them all at https://github.com/quotient-im/libQuotient/releases, below this text). Key things introduced in 0.9 are:

  • Qt 6 only (see more about this below)
  • cross-signing support (requires UI to match on the client side; NeoChat already has it)
  • Matrix 1.12 API, including, most importantly, content repo functionality switching to authenticated media
  • completed separation of room member functionality previously delivered by the User class, to a dedicated RoomMember class
  • introduction of futures to replace signals for one-off asynchronous calls, especially relevant for calls returning job pointers; the migration to this new way will continue through the next cycle
  • refactoring of the event content API to make transition to extensible events easier in the future

The link to the full changelog is at the bottom of these release notes, as always.

Toolchain and compatibility

As anticipated in 0.8.0 release notes, 0.9 goes Qt 6-only - specifically, requires Qt 6.4 or newer. Despite all the tweaks and improvements made to Qt 5.15 across the last years it really shows its age now; Qt 6 has quite a few features (much better STL integration and futures, to name a couple) that Qt 5.15 will never have.

Otherwise, we're fully in the C++20 land, and we started using elements of C++23 supported by recent toolchains across the platforms - see the "C++ feature set" section in CONTRIBUTING.md for details.

In line with our practice so far, 0.9 API is not backwards compatible with 0.8 - a lot of deprecated and even some not previously deprecated pieces have been removed to give way to new functionality. Migration should still be a straightforward exercise, especially if you heeded deprecation warnings while compiling with 0.8.x. Building with 0.8.2, eliminating deprecation warnings, and then going to 0.9 is a good way to reduce the migration effort.

E2EE dependencies now mandatory

The dependency on libolm and OpenSSL was introduced in version 0.7, conditional on E2EE support CMake switch. This CMake switch is now gone; you can't opt out of E2EE support at build time any more, and the two libraries are now required to build libQuotient in any configuration. That might not hold for long though, as Olm is now entirely deprecated; the next stable branch will likely replace the E2EE internals altogether. Read on about our plans with respect to that.

What's next

That's a very good question :) First of all, continuing on the dependencies subject - @TobiasFella has already started working on the replacement of our current E2EE backend (just a branch, no PR yet) that will use https://github.com/matrix-org/matrix-rust-sdk instead of libolm and OpenSSL. Given the deprecated state of libolm, it is very likely that the next .0 release will have that new backend instead. That will mean a considerable complication for Linux packagers as libQuotient will now effectively rely on Rust crates - unfortunately, it's unavoidable as we really don't want to reimplement Matrix crypto things and Vodozemac is the new official library for that.

Yet another thing that industrious @TobiasFella has set in motion is the work on OIDC integration. This will bring the long awaited feature to libQuotient - ability to carry out user registration without having to directly call the low-level Matrix API and navigate the UIA flows. This is the last feature from the proto-roadmap created in very early project days (you can still look at it in the Quaternion wiki); once it is done, we can officially call libQuotient feature-complete and cut version 1.0. Whether the next stable branch will be 0.10.x or 1.x depends on whether we manage to get OIDC integration merged in the next, say, half a year (which is quite realistic but not entirely guaranteed).

On top of these two, the smaller stuff certainly on the radar is storing recent timeline events in the database, refresh tokens support, spaces support improvements and a lot of other things, some of those deliverable in 0.9.x without breaking back-compat. All our plans can be found at this board.

Thanks for flying with us!

Full Changelog: 0.8.2...0.9.0