Collabora Online Community Roundup #9 (New Year Edition!)

On 1 October 2020, Collabora Online moved to its new home on GitHub, and started settling in the new infrastructure, expanding its fantastic community, and continuing the work to deliver the latest and greatest developments in productivity and collaboration together. Check our new community website for all the details! 😉

Collabora developers also keep fixing and improving our lovely mother project LibreOffice. As all the good work requires some appreciation, let’s take a look at what the seasoned developers of the Collabora team and the volunteer contributors from our community have been doing during the last two months.

Month in Numbers

On the Collabora Online code repository in the last month, 27 authors have pushed 269 commits to master and 538 commits to all branches. On master, 340 files have changed and there have been 13,568 additions and 6,539 deletions.

Screenshot of GitHub Pulse for Collabora Online
Development Activity on Collabora Online GitHub Repository from December 23, 2020 to January 23, 2021

New Contributors

Congratulations to Bayram Çiçek, Umut Bayramoğlu, Gabriel Masei, Shubham Goyal, and Martin Hoffmann for their first pull requests, and congratulations to Fly, kt-solutions, kevdogg, sseide, kratzersmz, Willem-Jan de Hoog, erikfdev, baffclan, duggalsu, Pascal R. sebastiaanveld, Roland Meier, Timmy183-ui, TijZwa, Christian Raue, pieter-groeneweg, RegisPerdreau, Tobias Kaminsky nabilys, shock, Furkan Ünlütürk, Parrenin Frédéric, mrslavutich, Bond Keevil, yaohao0814, Dan Smolik, Sven, dossantg, William Reed for reporting their first issues and improvement requests on our GitHub repository!

  • Thanks to Bayram Çiçek for contributing to one of our easy hacks, by porting some usages of unique pointers to leverage the Util::make_unique() function, and thus helping us make COOL future-proof by preventing certain potential memory leaks.
  • Thanks to Umut Bayramoğlu for helping us make COOL look even cooler by contributing a new top bar comment icon.
  • Thanks to Gabriel Masei for making it possible for users to have their own settings for UI mode (tabbed or classical toolbar) separate from the default configuration of the installation on the server, thus helping COOL to be even more customizable.
  • Thanks to Shubham Goyal for removing now unneeded Poco::Timestamp functions, thus making the Collabora Online code-base a bit cleaner and more lightweight.
  • Thanks to Martin Hoffmann for fixing our Docker build script for the from-the-source option, thus ensuring it doesn’t cause issues with certain configuration options like –with-lo-path later.
  • Thanks to Fly for letting us know about an issue which caused some certain docker containers being restarted repeatedly. And the issue has already been fixed by Andras Timar.
  • Thanks to kt-solutions for reporting a DOM exception specific to the Chrome browser.
  • Thanks to kevdogg for reporting a permisson issue which was causing COOL docker container failing to start. And the issue is again already fixed by Andras Timar. 🙂
  • Thanks to sseide for reporting multiple docker image issues related to time zones, and access permissions.
  • Thanks to kratzersmz for reporting outdated libpoco causing issues with elliptic curve configuration, which has been now fixed by Andras Timar.
  • Thanks to Willem-Jan de Hoog for letting us know about the COOL start script overriding the classic/tabbed menu preference set in loolwsd.xml, thus giving us the opportunity to improve the installation and configuration experience.
  • Thanks to erikfdev for providing valuable feedback on their specific installation, having an unexpectedly large systemplate, caused by the need for fonts in systemplate. Ashod Nakashian is already working on fixing that, which will potentially make specific large COOL installations much thinner.
  • Thanks to baffclan for taking the time to report a potential problem on mobile, and then also clarifying that it was in fact a bug on another product but not COOL.
  • Thanks to duggalsu for reporting a potential CSV open issue (yet to be confirmed) encountered on Collabora Office mobile version installed from F-Droid.

    The search results for Collabora Office on F-Droid when our third party repo has been defined.
    The search results for Collabora Office on F-Droid when our third party repo has been defined.
  • Thanks to Pascal R. for filing a feature request to add the Line command, to be able to add arrows on presentations on mobile/web, thus giving us the opportunity to improve the user experience of Collabora Online. Pedro Silva has already started working on resolving the request.
  • Thanks to sebastiaanveld for letting us know about the room for improvement on our iOS app’s user experience by allowing the user to choose a proper name for a newly created document.
  • Thanks to Roland Meier for reporting an issue he encountered with the docker image after upgrading COOL, thus leading to the discovery of a discrepancy in the documentation.
  • Thanks to Timmy183-ui for letting us know about our users on F-Droid not being notified about the latest snapshots of the Collabora Office Android App. F-Droid releases are in sync with Play Store and users are notified properly now, thanks to Yunusemre Şentürk.
  • Thanks to TijZwa for filing an enhancement request to improve the way how documents with unsaved changes are handled.
  • Thanks to Christian Raue for reporting an issue that was making it very hard to pass multiple dictionaries to the Docker container. It has now been fixed by Andras Timar.
  • Thanks to pieter-groeneweg for reporting an issue which happened after upgrading their installed version of COOL, which was then followed-up by the Collabora team, and seems to be fixed by a configuration change on their setup.
  • Thanks to RegisPerdreau for letting us know about an issue on Writer, which was causing the resolved state of a single-point comment not being saved. It has been fixed now by Miklos Vajna for COOL, Collabora Office and LibreOffice! 🙂
  • Thanks to Tobias Kaminsky for reporting an issue which caused the COOL Docker image to fail with double escaped domains, which has now been fixed by Andras Timar.
  • Thanks to nabilys for letting us know about the on-screen keyboard sometimes getting in the way of the user while interacting with menus on iOS. It will help us improve UX of COOL for all of our mobile users.
  • Thanks to shock for taking the time to report a missing feature on the Android app, which already exists on COOL.
  • Thanks to Furkan Ünlütürk for creating an issue about a specific type of image file causing an error while being inserted into a document on our mobile app.
  • Thanks to Parrenin Frédéric for testing our demo instance of Collabora Online, and providing technical feedback along with suggestions to improve the user experience even further.
  • Thanks to mrslavutich for reporting an issue they encountered while integrating COOL into their own application.
  • Thanks to Bond Keevil for filing an enhancement request for the hyperlink dialog, to recognize/support mailto links.
  • Thanks to yaohao0814 for letting us know about a potential issue while reading documents with our Android app.
  • Thanks to Dan Smolik for reporting a crash that happens on their installation of Collabora Online along with Nextcloud on Debian Buster. It will help us ensure a smoother experience on various platforms.
  • Thanks to Sven for creating an issue for the problem he encountered while trying to sign a document on his installation. It will potentially help us either to ensure it works properly on even more configuration scenarios or help us expand our help documents.
  • Thanks to dossantg for filing an enhancement request regarding font sizes on the Notebookbar (new toolbar UI), thus helping us improve the user experience even further.
  • Thanks to William Reed for sharing his experience while trying to build our docker image from source for ARM64, which might potentially help us improve build support on different platforms.

Thank you all, and welcome aboard! 🙂

Join the fun!

You can also join the fun, and be part of our next list of new contributors! 🙂

Just go to our GitHub repo, fork it, build it (on Linux or on any platform), grab one of our newcomer-friendly easy hacks, and send your first pull request. And if you get stuck at any point, just drop by one of our communication channels. 😉


Collabora Online Weekly Meeting #11

COOL Weekly Meeting #11 has taken place on Thursday, February 04, 2021 at 11:00:00 am (UTC) with participants both from the community contributors and the Collabora team. We have got a quick update on what’s going on and discussed matters raised by the contributors, as well as having the chance to say hi to fellow members of the community. Topics discussed in the meeting include:

  • During the quick update part by Muhammet Kara, it’s been reported that COOL has got more than 60 new contributors (24+ code contributors) since the move to GitHub. It has also been mentioned that there are multiple talks by Collabora Online developers in the LibreOffice devroom of the upcoming FOSDEM in the weekend.
  • Pedro Silva has reported that the pull request for the CSV handling work has been tested and is ready to be merged, which will allow users to download Calc documents directly as CSV files, which also has a new icon contributed by Rizal Muttaqin. He has also shared an update on setup and workflow issues some design contributors have been experiencing, which turned out to be solvable by using our Gitpod (cloud IDE) integration and the daily built LibreOffice core archives which came as a nice side effect of it, to lift the burden of building LibreOffice core from scratch on the contributors.

    Collabora Online repo on Gitpod
    It is possible to start hacking COOL in 10 minutes, independent of your operating system!
  • Nicolas Christener has shared an update on the status of the LibreOffice Template Contest, run by Adfinis, stating that they have got some good-looking submissions and they are considering extending the submission deadline.
  • Regarding the “JSON Toolbar / Notebookbar changes” topic, Jan Holesovsky has reported that they are currently working on improving style previews by converting the styles list into a scrollable, responsive list. He has also shared the latest status of the Async Saving effort, which would result in a much smoother experience when saves happen during a collaborative editing session, such as a lot of code refactoring on master and splitting of states into different classes.
  • Gökay Şatır has shared the latest developments on the CanvasTileLayer bits, which would let us have a much crisper look, especially on different zoom levels for all document types. It looks like the latest changes have been related to the columns and headers on Calc documents, along with some bits being moved to typescript, and a custom scrollbar is the next in line.
  • Michael Meeks has been working on load testing with an emphasis on Calc performance and bogus full-page invalidations which cause unnecessary performance penalties.
  • It has also been discussed that new CODE releases are being planned for the upcoming week, consisting of new improvements such as FontWork, incremental dialog / JSON update work, and async save.
  • Availability of COOL on Plasma phone has been brought up by Andreas Kainz, with a conclusion that some funding would be needed to port Collabora Online to Pine64. He has also reported that latest CSS changes for better alignment caused some scrolling issues, along with an issue on the Notebookbar container, which will be looked into by Pedro Silva and Szymon Kłos.
  • Padia Rashesh asked for some elaboration on an easy-hack related to invalidation debugging, and Michael Meeks explained the topic with a live demonstration. Padia has contributed through multiple easy-hacks so far, and it seems like he is just getting started. Pedro Silva is also providing some guidance via comments on pull requests.
  • Muhammet Kara has brought up that master and the 6.4 branch having different ESLint versions has been reported to be causing issues while backporting patches to 6.4. It has been concluded that many safe patches can be backported next week and tested on new CODE releases.

Check out the meeting minutes for the details of the meeting, and join us on Thursday, February 11, 2021, at 11:00 am (UTC) to stay in touch with the rest of the community. You may also make your own suggestions for the next meeting by following the link shared in the COOL Telegram group before the next meeting. We’re looking forward to hearing from you live. 😉

Collabora Online (COOL)

  • Thanks to Andras Timar for various fixes and improvements around our docker images and documentation as well as for cleaning up the code-base by removing some unnecessary bits and updating localizations.
  • Thanks to Ashod Nakashian for various fixes and improvements towards increasing general stability of COOL and maintainability of the code-base along with tests to make our code-base future-proof, working on the async save feature which will be a major leap towards a much smoother experience for users while collaboratively editing documents, and also for reviewing pull requests of other contributors, and for mentoring them through tough issues.
  • Thanks to Michael Meeks for his recent efforts on stress testing tooling, which will help us ensure COOL continues performing well under pressure on large scales, and also for various other improvements and fixes towards improving the debugging facilities[0][1] and the general code quality.
  • Thanks to Pranam Lashkari for various user interface and user experience fixes and improvements such as making sure hyperlink popup is properly positioned around the edge, and adding support for reordering sheet tabs via drag & drop, thus helping COOL be even more feature-rich and user-friendly.
  • Thanks to Miklos Vajna for improving the performance and stability of COOL by fixing an issue that was causing a crash in a specific scenario, as well as various other fixes and improvements such as adding an explanation to the g review command on how to update an existing pull request in the case of local and remote branches having different names.
  • Thanks to Jan Holesovsky for various code-quality improvements and fixes such as making sure proper C++ practices are in place, and helping COOL become lighter by removing unused functions.
  • Thanks to Henry Castro for various fixes and improvements especially around the Macro Selector dialog to get VBA macros working on COOL, and also adding the related menu item Run Macro to the Tools menu for Calc documents.

    Collabora Online Macro Selector Dialog
    Collabora Online Macro Selector Dialog
  • Thanks to Szymon Kłos for various improvements and fixes on the notebookbar and various dialogs such as the statistics dialog and the Fontwork dialog, turning them into native widgets for COOL, thus allowing a more natural look & feel along with less clutter and possibly better user experience.
  • Thanks to Nnamani Ezinne Martina for adding more cypress tests to ensure the quality of Collabora Online on various features of Calc such as Merge Cells, Text Wrap, and Save and Print commands, as well as fixing the Clear Direct Formatting command of Impress, and updating the screenshots of Online Help.
  • Thanks to Pedro Silva for various fixes and improvements around the user interface of COOL to make it have a better and consistent look and feel across different platforms, as well as adding new features such as CSV as a download option besides many other improvements on different dialogs and user interface items.
  • Thanks to Gökay Şatır for his work on CanvasTileLayer, which would make COOL have a much crisper and smoother look and feel.[0][1][2][3][4][5] See the Weekly Meeting notes above for some more details.
  • Thanks to Andreas Kainz for a lot of design and user interface improvements and fixes especially around the Notebookbars towards bringing the new toolbar design in alignment with the mother project and the expectations of common users. He has also made sure that the sidebar icon sizes match the toolbar icon sizes for visual consistency.
  • Thanks to Thaís Vieira for adding cypress tests to ensure the quality of Collabora Online on various toolbar items of Impress, such as Font Size.
  • Thanks to Ayhan Yalçınsoy for adding the Recalculate command to the Data menu, thus helping COOL be even richer in features.
  • Thanks to Rashesh Padia for various fixes and improvements on comments[0][1][2], and also for making sure that the correct number of characters is displayed in the status bar.
  • Thanks to Tor Lillqvist for improving the logging and debugging facilities of COOL by making sure the debug messages from the client are properly logged, are correctly described, and also by adding an ERROR message to be logged, thus improving the developer experience for all of us, as well as various other improvements and fixes.
  • Thanks to Gleb Popov for continuing his work on bringing Collabora Online to FreeBSD, with many commits.
  • Thanks to Dennis Francis for various fixes and improvements around the Canvas layer, which brings a lot of visual and user experience improvements such as smooth zoom animations.
  • Thanks to Mert Tümer for adding the Insert Connectors pop-up dialog, along with various other fixes and improvements such as adding support for pre-fetching next or previous slide tiles based on the direction of the navigation, thus preventing the tear effect while browsing on an Impress document.
  • Thanks to Tamás Zolnai for a lot of fixes and improvements around cypress (testing framework), and the testing facilities for certain integrations, thus helping COOL have an even better automated quality assurance process, and also for mentoring other contributors while writing new cypress tests. Check out his blog post where he summarizes the different loggings available for cypress tests!

    Cypress Logo
    Cypress is a JavaScript end to end testing framework for any project running in a browser.
  • Thanks to Tomaž Vajngerl for working towards bringing support for Draw documents to Collabora Online.[0]
  • Thanks to Marco Cecchetti for improving the documentation thus making it easier to work on and with COOL for both internal and external developers.
  • Thanks to Yunusemre Şentürk for working on bringing Kubernetes cluster support by adding a proof-of-concept setup with just COOL.
  • Thanks to Rizal Muttaqin for contributing an icon for the new Download as CSV option.
  • Thanks to Aron Budea for improving the logging of SSL status by making it properly report the enabled/disabled state.

Collabora Office on Android & iOS

  • Thanks to Tor Lillqvist for various fixes and improvements on the iOS app such as fixing a crash that could happen in certain scenarios, and removing unused functions and constants.
  • Thanks to Mert Tümer for fixing a focus issue on text input of Calc documents on the Android app.

Collabora Online Integrations

  • Thanks to Julius Härtl for various improvements and fixes on Collabora Online’s Nextcloud integration such as making sure a proper error message is given when a user tries to open a document on unsupported external storage, and also for reviewing and merging many pull requests from other contributors.
  • Thanks to Szymon Kłos for improving the user experience of built-in CODE support of Collabora Online’s Nextcloud integration by making sure no unintended timeout happens when AppImage of COOL is still starting, and also by making sure an open file is properly renamed after a Save As operation.
  • Thanks to Joas Schilling for improving the stability of Collabora Online’s Nextclsoud integration by making sure guest names are properly shortened when they are too long to fit in the database.
  • Thanks to Roeland Jago Douma for various under-the-hood improvements and fixes on Collabora Online’s Nextclsoud integration such as making sure certain exceptions are properly logged for inspection and debugging later.
  • Thanks to Dipak Acharya for his contribution towards faster CI and testing cycles for Collabora Online’s ownCloud integration.
  • Thanks to Piotr Mrówczyński for various under-the-hood improvements on Collabora Online’s ownCloud integration.
  • Thanks to Semih Serhat Karakaya[0], Michael Barz[1], Thomas Müller[2], Artur Neumann[3], Benedikt Kulmann[4] for reviewing and merging pull requests of other contributors on Collabora Online’s ownCloud integration.
  • Thanks to Phil Davis for various improvements on the CI and test facilities of Collabora Online’s ownCloud integration.
  • Thanks to Juan Pablo Villafañez for various contributions around versioning and licensing of Collabora Online’s ownCloud integration.
  • Thanks to Swoichha Adhikari for adding SonarCloud badges to Collabora Online’s ownCloud integration.
  • Thanks to Jérémie Lesage for updating documentation and license information of Collabora Online’s Alfresco integration.
  • Thanks to Andras Timar for adding localization support to Collabora Online’s Alfresco integration along with other small fixes.[0]
  • Thanks to Cindy PIASSALE for various improvements and clean-ups on Collabora Online’s Alfresco integration.[0][1][2][3]

Honorable Mentions

  • Thanks to Cor Nouws for leading the marketing team, and not stopping there but continuing with testing & reporting bugs, attending to community events, and keeping us all informed about what’s going on. He also attends LibreOffice Design meetings from time to time to help COOL’s mother project LibreOffice have a better UI & UX.
  • Thanks to Eloy Crespo for his efforts to help the project well-funded as always.
  • Thanks to Marc Rodrigues for continuing to keep us updated on various news around Collabora Online and related FOSS projects, and creating a lot of yummy content to read!
  • Thanks to Pedro Silva for improving various points around the COOL Community Page, and also for helping other contributors by providing instructions on their pull requests as well as reviewing them.
  • Thanks to Andras Timar for keeping us organized, maintaining our translation project on Weblate, and delivering hot new releases of our software!
  • Thanks to Yunusemre Şentürk for various tasks towards keeping our CI chains healthy.
  • Thanks to Jan Holesovsky for doing a lot of research on different topics, and providing mentoring/patch-reviewing/hand-holding/wisdom within the team, in our communication channels, and also on various channels of our lovely mother project LibreOffice.
  • Your friendly community mentor, Muhammet Kara, is also creating & improving easy hacks, running workshops, helping new contributors solving their setup & build issues and reviewing their pull requests, working on easing the build procedure, improving our GitHub presence bit by bit based on its community guidelines, compiling/composing these community updates…


Last but not least, we can’t thank enough to our translators who constantly help COOL and its friends talk many languages on this earth. Collabora Online speaks many languages, thanks to all of our translators in our translation project, and all of those who previously contributed and keeps contributing to our mother project, LibreOffice.

We’re continuing to work to find good ways to credit translators’ hard work in the product. Please see a list of those involved, and please get in touch if you’re not listed. Many thanks to all those who have worked on translating Online, you rock!

If you would like to help COOL speak your language, you can just go to our translation project on weblate, and start contributing! 😉

Collabora Online translation project on Weblate
Collabora Online translation project on Weblate

Collabora loves LibreOffice!

We’re still contributing to LibreOffice and encourage you too to do so because LibreOffice rocks. 😉

  • Thanks to Miklos Vajna for his work towards better PDF signature verification in Draw, thus potentially improving the user experience of LibreOffice for related scenarios. Check out his blog post for the whole story!
  • Thanks to Miklos Vajna for improving support for shadows of table shapes for PPTX files, thus ensuring better interoperability with other office suites and non-native file formats. Check out his blog post for details!
    Before: Old render result in Impress

    After: New render result in Impress
  • Thanks to Tomaž Vajngerl for his work towards developing a built-in Xray-like UNO object inspector. Check out his blog post to see what has been done so far and what is planned next. This effort has been funded by The Document Foundation, so also thanks a lot to the TDF Board of Directors, and the TDF donors who made the work on this tool possible!
    Development Tool in the menu

    Development tool dockable window
  • Thanks to Gülşah Köse for fixing a bug that was causing certain images on a PPTX file to be shown as mirrored when opened with LibreOffice, and also for fixing a bug that was causing certain images on PPTX files being rendered with unusual aspect ratios, thus improving interoperability with other office suites.
  • Thanks to Noel Grandin for doing various code-quality improvements and modernization all around the LibreOffice code-base.
  • Thanks to Tor Lillqvist for a lot of fixes and improvements especially towards better support on macOS.

Read More

A wonderful FOSDEM 2021 – Collabora and the LibreOffice devroom

FOSDEM 2021 was virtually different. Although it is sad that there was no opportunity to meet in person and enjoy the flair of Brussels this year, the largest European Open-Source conference was still a wonderful experience. Thank you for the great organization. The presentations of the Collabora developers and the videos (as soon as they are available) can be found in this post. We look forward to meeting you in person next year at the ULB!

Is Collabora making Online Content Management come true?

Saturday, February 6th, 2021. “Collabora Online for your documents” – Michael Meeks discusses with you how we have been improving Online’s UX, features & community!

Watch the video!
Download the presentation!

Development in the Cloud can’t be easy.. can it?

Sunday, February 7th 2021. “Lowering the Barrier for New Developers -Developing in the cloud via GitPod”: Listen to Muhammet Kara, what does he know about “Lowering the Barrier for New Developers”?

Watch the video!
Download the presentation!

Could LibreOffice speak up, would it love the cloud?

Sunday, February 7th 2021. “How Collabora Online development improves LibreOffice”: Long time – we could even say veteran – LibreOffice and Online developer Jan “Kendy” Holešovský, is a real LibreOffice listener. 😉 Listen to him telling “How Collabora Online development improves LibreOffice”!

Watch the video!
Download the presentation!

Inspector X – show your objects!

Sunday, February 7th 2021. “Build-in “xray” like UNO object inspector”: Bringing his magnifier, Tomaž Vajngerl explains developing “Build-in “xray” like UNO object inspector” – a project kindly granted by TDF.

Watch the video!
Download the presentation!

LibreOffice trusting PDFium… and vice versa

Sunday, February 7th 2021. “Handling PDF digital signatures in LibreOffice with PDFium”: Miklos Vajna knows all you may want to know about “Handling PDF digital signatures in LibreOffice”.

Watch the video!
Download the presentation!

Making Nextcloud Hub COOL

Sunday, February 7th 2021. “Making Nextcloud Hub COOL – Hear how we implemented out-of-the-box collaboration.”: Some titles speak for themselves. What does Michael Meeks know about this?

Watch the video!
Download the presentation!

Apple slices easy bits?

Sunday, February 7th 2021. “Porting LibreOffice to macOS on Apple Silicon – Easy bits were easy, hard bits were not so hard”: Tor Lillqvist put his teeth in porting LibreOffice to macOS… Easy or hard?

Watch the video!
Download the presentation!

More great talks in the LibreOffice devroom!

Check the LibreOffice FOSDEM 2021 devroom schedule for more talks about IDE’s, productivity, interoperability, document standards, Maria DB, QA, LibreOffice in the browser, Writer fields, gerrit patches, Lightning talks.


About Collabora Productivity

Collabora Productivity is the driving force behind putting LibreOffice in the cloud, providing Collabora Online and a range of products and consulting to enterprise and government. Powered by the largest team of certified LibreOffice engineers in the world, it is a leading contributor to the LibreOffice codebase and community. Collabora Office for Desktop and Collabora Online provide a business-hardened office suite with long-term, multi-platform support. Collabora Productivity is a division of Collabora, the global software consultancy dedicated to providing the benefits of Open Source to the commercial world, specializing in mobile, automotive and consumer electronics industries. For more information, visit or follow Collabora Office on Twitter .

Read More

Update on LibreOffice support for ARM-Based Macs

It is always an exciting time to see freshly minted ARM based silicon arriving in the form of Apple’s massive shift to the ARM based M1. This of course means work for Collabora’s LibreOffice team too. The code needs to be prepared for M1, step by step. Here we update you on the status of the work, and what needs to be done.

With the launch of the new Apple devices nearing, it is important that suitable software arrives around the same time as new hardware. Apple ensures this by a translation layer, so that software for Intel Macs can be used, using Rosetta translation.

Nevertheless, given the code size of LibreOffice, for the best performance it makes most sense to have a pre-optimized native binary. As such Collabora joined the Universal App Quickstart Programme back in July and has been doing work on enabling LibreOffice for M1 since then.

This effort is made possible by the kind support of those who buy LibreOffice Vanilla in the Mac app store. Thank you! And thanks too to Tor Lillqvist for his patience and hard work here.

The status of the work

All of these changes are in master, or in the gerrit queue getting past our CI automation:

  • Configuration changes (mostly there). It should now possible to configure and build a native LibreOffice on a Apple Silicon, as well as cross-compiling to x86_64.
  • Patching and fixing of lots of bundled libraries to make them build cleanly.
  • Then there is a first attempt at a new C++/UNO ABI bridge – we need to match Apple’s ABI by tweaking Linux’s ARM64 support to match. This allows UNO scripting to work (in theory).
  • We still have some failing unit tests, that need investigation, as well as some other bits, described below.
All of this means that LibreOffice should start and work on M1! So far it has had only very basic Writer & Calc testing. The more exciting, complex features are not yet tested.

Update: as of 2021-02 we have working native M1 binaries in the Apple app-store for users.

What’s next .. want to get involved?

Post-launch, if you can get an M1 Mac, then help is always most welcome! We have several missing pieces that will require further work, with some unusual low-level bits.

  • The new C++/UNO ABI bridge requires more testing, to ensure the UNO scripting support works smoothly.
  • Enabling bits we didn’t compile in yet: Firebird, Java (when there is a JDK).
  • Scripts to combine builds for arm64 and x86_64 into one universal app (i.e. one where binaries are “fat,” consisting of separate parts for each architecture)
  • Adaptation to whatever new checks are added for universal apps in the App Store. This is an ongoing unpredictable part of our work: adapting 8 million lines of code to the latest updated rules, keeping our builds compiling and signing with the latest tool chains.
Of course we’ll continue to work to bring the best LibreOffice possible to Apple Silicon as time permits, and we are confident that even if we don’t make it in the next month or two, Rosetta 2 will fill the gap using dynamic instruction set translation. And when all is done, our open source desktop productivity tools will benefit the full power of the new Macs!

Read More

Collabora developers mentor successful GSoC Projects

Autumn is just around the corner. For many participants in the GSoC 2020, a busy and instructive summer full of hacking on open source projects came to an end a few weeks ago. Commits have been contributed and final reports have been written. This year experienced Collabora Productivity developers were again mentors for various projects of the Google Summer of Code for the LibreOffice project. Here are some examples of projects our team helped to succeed!

Analysing Writer documents with the “Style Inspector”

The “Style Inspector” is a great new tool. You can access it through a new icon (an eye combined with a pencil) in the Sidebar (also via “Sidebar Settings”). The Style Inspector displays in full detail (and hierarchical) all styles and also direct formatting applied to a cursor position in a Writer document. So you can analyse, identify problems and clean them up. Sometimes formatting in documents is messy and people mix styles with direct formatting. The Style Inspector allows you to see that.
The feature is available for testing in pre-released development versions of LibreOffice. Shivan Kumar Singh picked up the proposal from the LibreOffice Design Team. He was mentored by Collaborans TomažVajngerl and MikeKaganski with Heiko Tietze from the LibreOffice Design Team. Take a look into Singh’s final report! It is an inspiring a guide on how to approach a big project like LibreOffice.

Improving the way to find and add extensions

There are many useful extensions to LibreOffice and users should be able to find them easily! Like in app stores like Gnome Software or the Play Store. That is basic idea behind “Tight Integrations” and the proposal from the LibreOffice design team. Yusuf Keten made this his GSOC project a success and added the possibility to search and sort the through extensions without having to leave LibreOffice. You start this new way to search with a clear yellow star with a download arrow, that is in the templates dialog, at the icons in the view options, or from the galleries pane in the side bar.
If you are curios about this handy extensions feature you can already test and find it in the latest LibreOffice pre-releases. Yusuf was mentored ba Collabora’s Muhammet Kara and Heiko Tietze from the LibreOffice design team. Find all the details of Yusuf’s work in his final report.

I learned a lot of things during the GSoC. Although GSoC is finished, I will continue to contribute to LibreOffice. I am very happy to be part of the LibreOffice community.(Yusuf Keten)

Access the Tight Integrations manager through the icon in Gallery
Browse, search and sort through Templates, Galleries & Icons in the new extension dialog.

Changing the contour – shadows are becoming blurry

New blurry shadow option

Did you know, that in LibreOffice the shadows are just a copy of the object? There are already a lot of settings to change their appearance, like its colour, its angle, the transparency and distance behind the object. Mentored by Collaboran’s TomažVajngerl and Miklos Vajna, Ahmad Ganzouri added another option. The “Blurry Shadows” make use of the already implemented BitmapFilterStackBlur and make the shape of the shadow look very realistic. Find the details around the development in Ahmad’s final report. We have seen the Blurry Shadow option in the master branch and expect it to be available to all users in Version 7.1 of LibreOffice. The option can be easily accessed via the “Area” dialog in “Objects & Shapes” or directly via the corresponding Sidebar module.

The blur setting can be defined Area dialog.

Searching for a mentor? Join us GitHub!

Google Summers of Code are an excellent opportunity to learn working in many open source projects. But where to find mentors during the rest of the year? We recently moved the code of Collabora Online to GitHub. You will find a growing community there, with easy hacks to get started. Community Mentor Muhammet Kara and the rest of our team of open source developers are there and willing to share their vast experience.

Read More

Implementing Vulkan-capable LibreOffice user interface using the Skia library

This work by Collabora Productivity was possible thanks to AMD.

LibreOffice 7.0, just released, includes a new drawing backend based on the Skia library, which allows LibreOffice to use the modern Vulkan API to graphics operations. This Visual Class Library (VCL) backend is the default on the Windows platform, superseding the OpenGL-based backend.

Working on the future of graphics for office productivity

Having multiple VCL backends has its benefit to integrate with different operating systems, but each backend performing its own rendering implementation is far from optimal, since we cannot add new rendering functionality and assume that it will work cross-platform. Many backends across different platforms and toolkits miss optimized paths for various rendering tasks. This adds complexity and makes it hard to ensure that rendering objects happens in an accelerated way everywhere.

Another problem is that multiple backends regularly perform the same type of mapping from VCL’s APIs to what a modern toolkit provides these days. This duplication means not only maintenance cost, but also can lead to having to fix the same bug at multiple places.

Moving away from GDI and OpenGL

The VCL library is responsible for widgets (buttons, controls, etc.) and basic rendering. It does not implement the drawing directly, but it provides an internal API, which is implemented by various backends that implement the actual graphics operations. These backends usually adapt LibreOffice to each platform , for example the ‘win’ backend is used on Windows, the ‘kf5’ and ‘gtk3’ backends are for Unix-like platforms using the KDE Frameworks and the Gtk3 graphics toolkit respectively and there is a ‘headless’ backend used by tests that does not render to the screen.

Each VCL backend uses an underlying graphics API available on the platform to perform the graphics operations. The Cairo library is used by some Unix-like and ‘headless’ backends, the ‘osx’ backend uses the macOS Quartz. On Windows, the ‘win’ backend has several plugable drawing implementations:

  • GDI drawing. This code is relatively old and has several limitations, such as not being double-buffered.
  • OpenGL drawing. This code provides GPU-accelerated drawing. OpenGL is used directly, so all relevant code including OpenGL shaders needed to be implemented in LibreOffice. The OpenGL API is also slowly being phased out in the industry.
  • Skia drawing. The Skia library hides implementation details, and provides several rendering methods, including Vulkan API.

Integrating Skia and Vulkan

The Skia library is not shipped in a binary form, not even by 3rd-party providers such as Linux distributions. It is provided only as source and the usual way to use it in a project is to ship it with that project. LibreOffice includes Skia as a 3rd-party library and fortunately building it using the LibreOffice gbuild system is reasonably simple. An additional complication is that Skia provides a new release roughly every 6 weeks, and generally only the latest release receives any fixes, requiring repeated updates. Since Skia is continually evolving, each update may also require adjustments (although so far it seems they are generally small).

Collabora’s developers taking the first hurdles

The Skia API is generally well documented, but it appears to be mostly aimed at developers already working on a project using Skia, such as Chrome. Important classes have their API well described, but it can be difficult to find tutorials for them and some classes are harder to understand at the beginning (for example, SkPixmap, SkBitmap, SkImage and SkSurface are all classes representing a drawable, but it was unclear at the beginning what the suitable use cases would be for each for them).

Similarly, it is not obvious how to use Skia in a new project. There does not seem to be any actual developer introduction to Skia in the documentation, nor does thereseem to be any documentation on how to setup a new or standalone project using Skia. There is a Hello-World example in the examples/ directory that is based on platform integration code that is not part of the Skia library itself but is inside a sk_app/ directory in the tools/ directory. That code was usable for LibreOffice, but required patching to cover LibreOffice needs (for example, the code created a new graphics context for each toplevel window, and Skia requires proper graphic context to be used in drawing operations, but LibreOffice code sometimes does not know which toplevel window will use the result of a drawing).

LibreOffice is a fairly old codebase, and still uses relatively old concepts such as paletted bitmaps, low-resolution bitmaps (such as 4bpp) or drawing that uses the XOR operation on pixels. Skia, being a relatively new library, has features that assume modern concepts are used (for example, RGB bitmaps are required to be 32bpp with unused alpha channel, 24bpp RGB bitmaps are not supported).


AMD Skia / Vulkan integrated in a alpha-release of LibreOffice 7.0


Once the initial learning period is over, Skia is consistent in its API and reasonable flexible to use allowing progress to be relatively fast. Code using Skia is very readable, and using Skia makes future maintainance tasks easier to perform. Even some old concepts, such as LibreOffice using a separate bitmap for alpha channel, sometimes interpreted as 8bpp and sometimes as alpha, later blended with data bitmap to get the actual result, could be mostly implemented using Skia API, making them GPU-accelerated.

Nice performance and even room for improving

While there were some concerns about how performance would be affected by moving to Skia compared to OpenGL driver and and hardware implementations that have been heavily optimized over the past several decades, it turns out that performance within LibreOffice is at least equivalent to the OpenGL version and synthetic benchmarks show that there is room for improvement.

Benefits for LibreOffice-technology

While somewhat complicated at the beginning, using Skia in LibreOffice has been in general a rather pleasant experience. In the future LibreOffice’s use of Skia could be extended to other platforms, reducing the number of platform rendering APIs used, eliminating duplicated code, reducing bug count and generally improving quality.

For comparison, LibreOffice OpenGL drawing code is roughly 12k lines of code, while Skia drawing code is only 4k.

Apart from the immediate benefits, moving to Skia and Vulkan on Windows paves the way for a single, powerful, hardware-accelerated rendering API cross-platform.

Moving to Skia on Windows required about 7 person-months ol, which lets us use Vulkan acceleration without large implementation costs. It will be interesting to see how much time is saved in the next few years from the reduced maintenance cost. The resulting work is mature enough that there is no real negative change in performance, and we have not started heavily optimizing yet.

Read More