The Document Foundation Planet

 

August 19, 2026

Official TDF Blog

What is the TDF team working on, in the LibreOffice project?

Group photo of TDF team

LibreOffice is a worldwide project made up of hundreds of people: volunteers, developers at ecosystem companies, and the 18-person team at The Document Foundation (the non-profit entity that coordinates the project and community). So, what has the team been working on recently? Here’s a quick summary:

Release Engineering

  • Tagged, built, and distributed LibreOffice 26.8.0 Release Candidate 2
  • Enabled MAR updates for cross-updates from 25.8.7 and 26.2.4 to 26.2.5
  • Reviewed patches
  • Tested new Windows build bots in production
  • Investigated and fixed incorrect permissions in daily Debian packages

Scripting

  • Investigated an extension developer’s issue exporting BASIC macros as an extension
  • Identified a debug-build assertion that does not appear to affect release builds
  • Added a UI test to help prevent future regressions in macro export

Code and Accessibility

  • Discussed proposed accessibility improvements on the LibreOffice accessibility mailing list
  • Analyzed and fixed tdf#172831: customized NotebookBar tab names were not localised after upgrading
  • Released LibreOffice Viewer for Android 26.2.5 on Google Play, F-Droid, and the Meta Horizon Store
  • Discussed tdf#172885, a LibreOffice-specific Qt theme/style. Explored an upstream Qt stylesheet-environment-variable approach, then implemented LibreOffice command-line support for setting the stylesheet
  • Posted and reworked the macOS-specific parts of the Qt VCL work
    • Reworked the changes in response to comments, then merged them
  • Worked on generalising macOS scaling patch
  • Made the Reset button dialog action ID well-known across the codebase

QA

  • Announced LibreOffice 26.8 RC1 availability for testing
  • Upgraded external libraries:
    • NSS to 3.126
    • libffi to 3.7.1
  • Improved automated tests:
    • Factored common code from CppunitTest_sc_swarmsolvertest
    • Added ARRAYTOTEXT function tests as FunctionsTest
  • Fixed crashes and warnings:
    • Fixed a null-pointer dereference warning in Writer
    • Fixed a crash in ThemeExport::write
    • Fixed a crash in OutMarkdown_SwTableNode
  • Tested and commented on Qt6 style and theming work for tdf#172885
  • Completed hiring tasks and code reviews
  • Investigated regressions involving CJK font names and the CJK bullets gallery
  • Fixed two build/SDK issues:
    • Fixed a build issue with Visual Studio 2026 18.7.0
    • Fixed missing cross-platform .NET binding files in the SDK (tdf#165585)
  • Continued work toward resolving headless Windows/fontconfig build issues required for Qt6 on Windows

Mentoring

  • Reviewed six substantial patch submissions
  • Completed GSoC mentor tasks

Design

  • Triaged Bugzilla tickets
  • Participated in the weekly UX and ESC meetings
  • Published extensions and managed comments
  • Supported community growth through the @libodesign social media account
  • Completed several design reviews
  • Prepared the Base survey
  • Contributed patches:
    • tdf#115805: corrected increments in numbering dialogs
    • tdf#172739: harmonized NotebookBar tab order

Documentation

  • Updated online Help with fixes for Master, 26.2, and 25.8
  • Updated Help pages through bug triage, contributor patch reviews, fixes, and housekeeping
  • Contributed Help improvements, including:
    • Adjusted left margins for paragraphs in tables
    • Refactored the AutoCorrect Options page
    • Updated documentation for “To pageâ€� anchoring
    • Added “Page Breakâ€� to Find & Replace attributes
    • Reverted removal of “Page Styleâ€� from Find & Replace attributes
    • Muted localisation processing in selected Python and BASIC code lines
  • Supported ongoing community updates to the Guides
  • Helped newcomers
  • Worked on the Bookshelf project, including sanitising the Impress Guide

Marketing

  • Announced and promoted new TDF members and the new marketing position
  • Maintained social media activity, updates, and responses
  • Coordinated conference logistics and prepared the first conference-program draft
  • Drafted sections of the TDF Annual Report 2025
  • Updated journalists’ mailing lists and database
  • Published blog posts about ODF and maintained the blog
  • Monitored donations, downloads, media clippings, and download-support requests
  • Managed budget-related activities
  • Worked on preparations for LibreOffice 26.8 release

So that’s what the team is working on – and this is all thanks to your donations, which help to pay the team members. But as mentioned, this is just a small part of the LibreOffice project activity – the biggest work is being done by hundreds of other people around the world. Thanks to all of you 😊

by Mike Saunders at August 19, 2026 08:11 AM

August 18, 2026

Official TDF Blog

Why Digital Sovereignty Requires an Open Document Platform — and What That Actually Means

When governments and organisations talk about “digital sovereignty,” they usually mean one thing in practice: the ability to choose, control, and if necessary replace the software they depend on — without asking permission from a vendor.

It sounds simple. It rarely is.

Document software sits at the centre of almost every organisation’s operations. Contracts, reports, budgets, policy documents, public communications: they all live in files. And for decades, the format of those files — and therefore the tools required to open, edit, and share them — has been controlled by a single commercial entity. That is not sovereignty. That is dependency with a friendly interface.

LibreOffice Technology exists to make genuine sovereignty possible. Not as a promise, and not as a political statement — but as a technical architecture that removes the dependency by design.

This post explains what LibreOffice Technology actually is, why it is categorically different from a “free alternative to Microsoft Office,” and why it is the only open platform capable of supporting software that is fully compatible with the demands of digital sovereignty. It also reviews what several months of deployments, policy decisions, and one very public debate over what “sovereign” actually means have confirmed about that architecture since we first started making this argument.

Beyond the Application: LibreOffice Technology as a Platform

Most people who encounter LibreOffice encounter it as an application — a word processor, a spreadsheet editor, a presentation tool. That is a reasonable introduction, but it misses what makes LibreOffice Technology significant.

LibreOffice Technology is the underlying platform on which LibreOffice — and a growing number of other products — is built. It is a modular, open-source software framework for creating document applications. It includes rendering engines, import/export filters for dozens of file formats, scripting infrastructure, accessibility layers, and interfaces for integration with operating systems, cloud environments, and enterprise software stacks.

Think of it the way you might think of a general-purpose operating system kernel: the kernel itself is not what users interact with directly, but it is what makes everything else possible — and it is what determines whether the system is genuinely open or merely open-looking.

LibreOffice Technology is governed by The Document Foundation (TDF), a non-profit foundation incorporated under German law. Its source code is publicly available, its governance is transparent, and its development is carried out by a global community of contributors from dozens of countries and organisations — including Collabora, allotropia, Red Hat, and many others.

No single company controls it. No acquisition can change its licence. No pricing decision by a distant board can determine whether your organisation can keep using it next year.

That is what a platform for digital sovereignty looks like.

Open Standards Are Not Optional: The Role of ODF

Sovereignty over software is meaningless if the data is not equally free.

A document format is not just a technical specification. It is a commitment about who can read your files in ten years, which tools can process them today, and whether you are locked into a particular vendor’s upgrade cycle to maintain access to your own information.

LibreOffice Technology is built around the Open Document Format (ODF), an ISO/IEC international standard (ISO/IEC 26300) developed through an open, multi-stakeholder process. ODF defines how text, spreadsheets, presentations, and other document types are stored — in a way that any conforming application can read and write, regardless of who made it or on what platform it runs.

This matters in ways that are easy to underestimate. When a public administration stores its records in ODF, it is not dependent on any vendor to access those records in the future. When a hospital uses ODF for patient documents, it can switch tools without migrating data. When a ministry publishes a policy document in ODF, any citizen with any compliant application — on any operating system — can open it.

Contrast this with proprietary formats that, despite occasional published specifications, remain under the effective control of the companies that defined them. “Open enough” is not the same as open. Earlier this month, we set out a first version of what separates the two: a thirteen-criterion definition of what a genuinely open document format requires, from public specification and royalty-free implementation through to independent governance. That short version is only the opening statement — we originated this framework, and a fuller, more rigorous edition is in development, applying all thirteen criteria in detail to ODF, OOXML Strict, and OOXML Transitional in turn.

LibreOffice Technology’s commitment to ODF is not a preference. It is an architectural principle. The platform is designed around the assumption that the data belongs to the user, not to the software.

The Platform Others Build On

One of the clearest indicators that LibreOffice Technology is a genuine platform — not just a standalone application dressed up in platform language — is the ecosystem of products built on top of it.

Collabora Online, a cloud-native document editing solution deployed by enterprises, governments, and cloud providers across Europe and beyond, is built on LibreOffice Technology. Collabora’s 2025 merger with allotropia — whose engineering team brought deep WebAssembly and vertical-application expertise into the same organisation — is itself an example of how the ecosystem consolidates and grows without ever touching the underlying platform’s governance. Other commercial and community products remain in active development by organisations that have chosen LibreOffice Technology precisely because it provides a stable, open foundation they can build on without acquiring permission from or paying royalties to a gatekeeper.

This ecosystem diversity is itself a form of sovereignty insurance. If one vendor stops supporting a product built on LibreOffice Technology, the platform continues. If a government or organisation builds custom tooling on top of LibreOffice Technology, it owns that investment. If the community of contributors shifts, the codebase remains — licensed under the Mozilla Public License 2.0, which ensures it can never be made proprietary.

A sovereign digital infrastructure is not one built on a single vendor’s promises. It is one built on a platform that multiple independent actors develop, maintain, and depend on. LibreOffice Technology is that platform.

The Euro-Office Test Case: Why Compatibility Is Not Sovereignty

No event tested this argument more directly than the emergence of Euro-Office, the European coalition initiative that surfaced this spring under the digital sovereignty banner.

Our first reaction, when the initiative made its opening announcement, was blunt about the architecture: a European suite built around full compatibility with Microsoft’s OOXML formats does not escape dependency, it relocates it. The hosting moves to Europe. The format — and the vendor who controls its evolution — does not.

Euro-Office’s formal pre-announcement in June moved the conversation forward. It leaned much further into a commitment to open standards, and we welcomed that shift while correcting one detail then circulating in the press: LibreOffice, developed under this Foundation for a decade and a half by a global — and substantially European — community, was never absent from the field Euro-Office proposes to enter. We also set out, plainly, the one destination consistent with the sovereignty the coalition invokes: ODF as its native document format, not merely a supported one.

The distinction is not a technicality. As we laid out in A Standard in Name Only, the version of OOXML every proprietary vendor ships by default is the Transitional conformance class — built to preserve decades of undocumented legacy behaviour from Microsoft Office versions of the 1990s, not the cleaner Strict variant an independent implementer could actually build to. An office suite that treats OOXML Transitional as its working format, however European its servers, is building on a specification only one vendor has ever fully implemented. What Euro-Office does next will show whether the coalition takes the final step from sovereign hosting to sovereign format.

Where Sovereignty Is Not an Abstraction: Real Deployments

Digital sovereignty is sometimes discussed as though it were a future aspiration. For a growing number of organisations, it is a present operational reality — and this year produced the clearest evidence of that yet.

In March, Germany’s Federal Ministry for Digital and State Modernisation folded ODF, alongside PDF/UA, into the Deutschland-Stack, the technical framework that will govern digital infrastructure across every level of German public administration. OOXML did not make the list. “This is not a recommendation or a preference, it is a mandate,” said Florian Effenberger, TDF’s Executive Director, at the time — and as we argued in the days that followed, it is a decision the rest of Europe, and every digital policy advisor reading it, should be studying closely.

Germany is not alone. The Italian Ministry of Defence has spent several years migrating well over 100,000 workstations to LibreOffice under its LibreDifesa programme, reducing dependency on proprietary desktop software and building direct control over its document infrastructure. The French Gendarmerie nationale has pursued the same goal at comparable scale over two decades, moving the substantial majority of its computing estate to open-source software as part of a deliberate strategy to reduce vendor lock-in. And in August, in a twopart interview with the Austrian Bundesheer, we heard directly from the team that has moved 16,000 workstations off Microsoft Office: the decision traced back to a 2020 review of what guarantees existed for running office software without a cloud connection at all. The City of Munich’s long-running open-source initiative — despite its complex political history — remains the clearest illustration that sovereign document infrastructure is both technically achievable and organisationally demanding, at scale, inside a large public administration.

These are not proofs-of-concept. They are operational deployments in organisations for which the ability to control their own software stack is not an ideological preference but a security and continuity requirement.

They also illustrate something important: the question is no longer whether LibreOffice Technology can support enterprise-scale sovereign deployments, or whether governments will choose ODF when the choice is put to them plainly. Germany has already answered both. The question now is how quickly the rest of Europe follows.

Why “No Single Vendor Can Pull the Plug” Matters More Than Ever

In 2011, Oracle donated the OpenOffice.org codebase to the Apache Software Foundation and largely stepped back from development. The product that had been the leading open-source office suite effectively stalled. Development slowed, releases became infrequent, and the community migrated — mostly to LibreOffice, which had been founded in 2010 precisely to create a more independent governance structure.

This episode is instructive. A product can be open-source and still be effectively controlled by a single corporate actor. When that actor’s priorities change, the product suffers.

Much of what we have published this year has been an attempt to make that risk structural rather than anecdotal. The invisible architecture of lock-in traces how dependency on a document’s format cascades into dependency on the rendering engine that displays it and, beneath that, the fonts that give it its final shape — three technical layers, each one obscuring the one beneath it. The Calendar and the Invoice extends the same argument to two layers that are not technical at all: the migration deadline a vendor sets, and the subscription price it charges. Five layers, and what unites all of them is a single absence — the user has no exit.

The Document Foundation was designed with this risk explicitly in mind. TDF’s statutes prevent any single company or individual from controlling the foundation. Its governance model distributes decision-making across an elected board, a membership body, and an engineering steering committee. The LibreOffice Technology codebase cannot be re-licensed, sold, or restricted by any single party.

This is not an accident of history. It is an architectural decision about governance — as important to digital sovereignty as any technical specification.

What Sovereignty Requires of a Platform

Digital sovereignty is not a binary condition, and it is not the same thing as self-sufficiency. As we argued in July, it is not about owning everything — no institution, and certainly no continent, is going to reimplement the entire computing stack from silicon upward. It is about ensuring that nothing essential can be taken away. Different organisations will weigh that differently, but a platform that genuinely enables it must satisfy several non-negotiable criteria:

Open source with a robust licence. The code must be inspectable, modifiable, and redistributable. Not just available — auditable and forkable by any qualified party.

Open standards at the data layer. File formats must be governed by independent standards bodies, not by the platform vendor.

Independent governance. No single commercial entity should be able to make decisions — about licensing, pricing, feature development, or platform direction — that override the interests of the broader community of users and contributors.

An active, diverse contributor base. Sovereignty requires resilience. A platform maintained by a single company is a single point of failure.

Ecosystem depth. Sovereignty at the document layer requires that the platform be capable of supporting the full range of an organisation’s document needs — not just basic editing, but integration with enterprise systems, accessibility compliance, multi-language support, and cloud deployment.

LibreOffice Technology satisfies all of these criteria. We are not aware of another document software platform that does.

Sovereignty Starts Here: The Story So Far

When we first sketched out this argument, we framed it as the opening of a campaign. Several months on — with the Euro-Office debate still very much alive, Germany’s Deutschland-Stack mandate now a matter of public record, and the US CISA’s own guidance on open-source verifiability landing squarely in the same argument — it makes more sense to call it what it has become: an ongoing, evidence-led case, not a one-off pitch.

If you want the fuller version, the pieces above trace most of the argument in detail: what digital sovereignty actually means and doesn’t mean; the layered architecture of lock-in and its non-technical extensions; what separates a genuinely open format from one that merely claims the label; the Euro-Office exchange in both its instalments; and, most concretely, the Austrian Bundesheer’s own account of why and how it moved 16,000 desktops off Microsoft Office. Together with the Deutschland-Stack decision, they are the evidence behind everything argued in this piece.

We are not finished. There are interoperability failures we haven’t yet written about, further national deployments to document as they happen, and — with LibreOffice 26.8 due for release on 26 August — a platform that keeps giving us more to report on. Watch this space for what comes next.

If you are a journalist or analyst covering digital sovereignty, open source, or public-sector technology, we would like to talk. If you are an organisation considering or using LibreOffice Technology and would like to share your experience, we would welcome the conversation. Reach out to our communications team at media@documentfoundation.org.

Digital sovereignty requires infrastructure that is genuinely open. That infrastructure exists. It is called LibreOffice Technology, and — as the months since we first wrote that line have gone on to show — this really is where the story starts.

The Document Foundation is the non-profit organisation behind LibreOffice. It is independent, non-commercial, and governed by its membership community. LibreOffice Technology is the open platform on which LibreOffice and a growing ecosystem of document applications are built.

Tags: digital sovereignty, LibreOffice Technology, open document format, ODF, open source, The Document Foundation, public sector IT, vendor lock-in, document software, Euro-Office, Deutschland-Stack

Further Reading on This Blog

The posts behind the argument above, in the order they were published:

External Resources

by Italo Vignoli at August 18, 2026 08:25 AM

August 17, 2026

Official TDF Blog

Community Member Monday: Aleksi Kallio

Community Member Monday banner

Tell us a bit about yourself!

I’m Aleksi, and I live in Oulu, northern Finland. I graduated this spring with a bachelor’s degree in business information technology, and before that I did a vocational degree in software development. Work-wise, my background is in software engineering: I worked on a secure Android smartphone, mostly fixing operating system bugs.

Outside of that, I’m into retro computing: old machines, old phones, and the software that ran on them. There is a lot to learn from software written back when it could only be shipped on physical media. Every time I sit down with a piece of old software, I notice a detail I want to try building myself: an interesting design decision that makes the UI stand out, or a feature that makes me wonder how on earth it was done.

I also like to hang out at my local hacklab and volunteer at gaming festivals. And of course, I like to work on LibreOffice too. What makes LibreOffice interesting to me is that its codebase has a long history. Reading the code and going through the commits allows me to look back in time and see how the software has evolved over the years.

What are you working on in the LibreOffice project right now?

I’m currently working on smaller code fixes. I pick up bugs from Bugzilla, try to reproduce them, and ultimately submit a patch that fixes the issue. In a codebase the size of LibreOffice one can’t just aimlessly duct tape a solution and hope it works. One has to understand the root cause to be able to look in the right place and understand the effect that the change has on the bigger picture.

Coming from a background of debugging Android, I quite enjoy that part of the work. Also, everyone in the community is genuinely great to work with. Code reviews in particular taught me a lot, when a more experienced developer pointed out something that I’d never have spotted myself.

Why did you choose to become a member of The Document Foundation?

Becoming a member felt like a way of saying that I’m in this for the long term rather than just passing through. Before I started contributing, I was a bit scared of putting code out under my own name. I felt like my code wouldn’t be good enough, and that I could only contribute to open source after decades of development experience.

Boy, was I wrong. Going through the issues thoroughly (the community likes to leave hints in Bugzilla comments), understanding the problem, and submitting the best patch I could manage turned out to be enough. Having a mentor and the community’s support on IRC, where I could ask questions whenever I needed to, helped a lot too.

Anything else you plan to do in the future?

I’m planning to move from smaller fixes towards more interesting bugs (our Bugzilla doesn’t contain any hard issues, only interesting ones). I’m also looking forward to working with other teams. I’ve been interested in quality assurance and documentation lately, so picking up small tasks in those areas to build up knowledge for larger work sounds like fun to me.

Please confirm that you want to play a YouTube video. By accepting, you will be accessing content from YouTube, a service provided by an external third party.

YouTube privacy policy

If you accept this notice, your choice will be saved and the page will refresh.

What does LibreOffice really need?

This is a tough question. At least in Finland, LibreOffice needs to be offered as a real option in schools. That also means we need more people who know it well enough to teach it.

On a lighter note, we recently watched the Excel World Championships at the hacklab. I’m not sure it’s what LibreOffice actually needs, but it would be great to see people who are seriously proficient with Calc solving problems and competing. In its simplest form, it could be a community competition to see who solves the most brain teasers.

by Mike Saunders at August 17, 2026 07:25 AM

August 16, 2026

Official TDF Blog

LibreOffice Conference 2026 schedule is online!

LibreOffice Conference 2026 logo

The LibreOffice Conference 2026 will take place in Pordenone, Italy, from September 10 – 12. And now the schedule is online, with:

  • 8 conference tracks
  • 64 sessions
  • 49 speakers

Click here to view the schedule

by Mike Saunders at August 16, 2026 09:39 AM

August 15, 2026

Marius Popa Adrian

FBSimCity v0.9.0: the machine room — the real Firebird engine inside the explorable city

FBSimCity, the explorable isometric city of Firebird internals, is at v0.9.0 — and this one adds the thing the project has been circling since it started. The city has always carried the same caveat: it is a model, it parses no SQL, and no Firebird code runs in your browser. The new machine room is the other thing.The machine roomThe machine room runs the actual Firebird engine: version

by Popa Adrian Marius (noreply@blogger.com) at August 15, 2026 07:28 AM

August 14, 2026

Marius Popa Adrian

Electric Firebird: Firebird Database Engine Compiled to WebAssembly, With a Live Demo

Electric Firebird (mariuz/electric-firebird on GitHub) compiles the Firebird database engine to WebAssembly, following the same approach PGlite took for PostgreSQL. The goal is to let Firebird run both server-side (Node.js) and fully client-side in the browser, with no server round-trip required for queries.Highlights:Two backends: a native Node.js implementation (via the Firebird Embedded Server

by Popa Adrian Marius (noreply@blogger.com) at August 14, 2026 06:44 PM

Official TDF Blog

Why and how the Austrian Military moved to LibreOffice (Part 2)

Bundesheer logo

This is the second part of our interview with the Bundesheer (see here for the first).

At the LibreOffice Conference 2025, you showcased the new LibreOffice features sponsored by the Austrian Armed Forces. How did that come about?

From the very beginning, we clearly recognised the need to further develop LibreOffice. Before finalising our plans, we also examined how we could continue to develop the product. Ultimately, we issued a Europe-wide, open call for proposals to secure both support and development capacity for LibreOffice. The way we selected the product enhancements stemmed in part from this preliminary study, because we had identified specific import capabilities and compatibility requirements.

That’s one major aspect: improving interoperability in line with our needs. The other focus was on improving LibreOffice based on ongoing user feedback and feedback regarding collaboration with external organizations. One example of this was the “Notes” bar in Impress. In the past, users had to edit notes in a separate notes view.

We were told very early on that users wanted to be able to do this directly within the slide editing view. This is a very well-known enhancement that we sponsored, which – I think – works very well. In addition, there are many other details, such as scrolling through presentations with the mouse wheel. Previously, you had to keep switching back and forth to the slide overview view to scroll. Now all of this is possible right from within the slide, which simply makes it easier to use and also increases acceptance because users expect it.

I could list many more extensions. We’re not the only ones contributing a great deal to LibreOffice – we see ourselves as part of the community, and we’re happy when the community uses our contributions and when others contribute their own, which we’re of course very happy to use as well. That’s what makes the project so attractive and successful.

Slide from presentation, showing features added to LibreOffice
Features and improvements in LibreOffice, sponsored by the Austrian Military (this is a slide from a presentation at the LibreOffice Conference 2025)

Have you also developed external extensions?

We’ve developed extensions for internal use, but there are also several publicly available extensions. One of them integrates our own help page, since we provide targeted help within our internal systems.

On a much larger scale, there’s an extension hosted on GitHub that covers military-tactical symbols. It’s available as open source software, so anyone can use it. This is actually an extension that, although it’s still in “release candidate” status, already works well. The extension is, of course, also suitable for collaboration with other armies. Its functionality is unique. To my knowledge, it’s not available anywhere else.

Do you also use the Open Document Format internally?

Yes – one of the advantages of LibreOffice is that the format is ISO-standardised and truly open. You get the best functionality in LibreOffice when you use ODF. We use ODF throughout. It’s clear that our external partners don’t do this to the same extent. This is where LibreOffice benefits from its ability to handle (read and edit) Office Open XML (OOXML) documents as well.

LibreOffice doesn’t have a built-in email client. How did you handle this issue during the migration?

The Austrian Armed Forces protect the Austrian population; to make this possible, we need, for example, systems that function independently of external parties. We have a large number of systems based on open source solutions and many solutions that are platform-independent. This includes the email system.

Therefore, we didn’t have to replace Outlook or Microsoft Exchange.

At the LibreOffice Conference, you emphasised that the migration was never about saving on licensing costs. The migration was driven by other reasons, correct?

The switch to LibreOffice in the Austrian Armed Forces stems from the necessity that we must be able to function even when nothing else is working. In other words, we cannot rely on public infrastructure. We cannot rely on our data being processed in another data center.

Therefore, the top priority in this transition – unlike 20 years ago, when people very often considered switching to a free office suite or Linux in the workplace for cost reasons – was digital sovereignty.

As for the costs: It was clear to us from the start that we would have to invest in the product in order to gain the additional functionality we needed and to improve interoperability.

Would you like to say a few words about the foundation – that is, The Document Foundation?

Why did we choose LibreOffice in the first place – after all, there are alternative products? LibreOffice isn’t the only solution. First, LibreOffice uses ODF, the open and standardised file format. That’s very important. Second, LibreOffice is truly fully open source software – it’s not a product that just has an open source “core.” There’s no risk of having to pay for variable enterprise features.

And the fact that this is the case is very closely tied to the foundation of LibreOffice, namely The Document Foundation. The way this open source project is implemented and anchored through the foundation – that’s an important guarantee and a key factor in its reliability for us.

Another point is that there is an ecosystem. There are several companies that offer the services we need. Using open source doesn’t just mean using free software – for us, it means we need maintenance, support, the ability to further develop the software, addressing security vulnerabilities, and secure software deployment. All of this comes with a very mature software product that is constantly being developed. That was a key factor in our decision.

What advice would you give to others who are also planning to switch to LibreOffice and open source?

First: There’s a vast amount of information available within the community. It’s important to familiarise yourself with the product. How does LibreOffice work? How does Bugzilla work? Where can I find issues that might not be working but are of interest to me? Where can I find roadmaps for new features, release notes, and so on?

Second: It’s absolutely crucial to properly prepare and fund the resources for a project like this. IT managers have gotten used to rolling out new Office versions without much effort.

However, switching from one office suite to another is actually a massive migration project. This should not be underestimated. It’s not just a matter of installing the software; it requires change management, people to provide support, test the software, and work on new features. It requires the support of service providers. All of this must be prepared in advance. And that’s what sets it apart from previous new office suite releases. You’ll need a project team for this – migration isn’t something you can just do on the side. So, you’ll need proper project organisation and agile change management. How can I provide my users with the necessary knowledge based on their needs? What communication channels do I have to keep my users informed and stay in touch with them?

We – the Austrian Armed Forces – have already received many inquiries about the transition, and we have shared our experiences with numerous organisations. We would be delighted to help build a LibreOffice community for government and enterprise organisations in order to accelerate the collaborative development of LibreOffice.

To that end, I invite you to contact us at libreoffice@bmlv.gv.at.

by Mike Saunders at August 14, 2026 05:35 AM

August 09, 2026

Marius Popa Adrian

FBSimCity v0.6.0: the replication district — journal segments, commit order, and a synchronous replica that dies

Correction (added 9 August 2026): the section below headed “A synchronous replica that dies hangs commits” is wrong. Dmitry Sibiryakov pointed this out on firebird-general, and the source confirms it. In src/jrd/replication/Publisher.cpp, checkStatus() is called with canThrow = false on the commit path, so it cannot throw; disable_on_error (default true) instead clears the replicating

by Popa Adrian Marius (noreply@blogger.com) at August 09, 2026 04:07 PM

August 04, 2026

Marius Popa Adrian

Firebird Adds an Optional Static fbclient — and Solves the Symbol-Collision Problem Properly

Firebird's client library, libfbclient / fbclient.dll, has always been distributed exclusively as a shared library. PR #9104 by Adriano dos Santos Fernandes, merged into the Firebird source tree on July 24, 2026, changes that: it introduces an optional, non-default static archive (libfbclient.a on POSIX, fbclient_static.lib on Windows) for applications that need to link the client library

by Popa Adrian Marius (noreply@blogger.com) at August 04, 2026 07:18 AM

July 31, 2026

Marius Popa Adrian

node-firebird catches up: roadmap complete, issue tracker at zero

Big news for anyone using Firebird from Node.js: the pure-JavaScript node-firebird driver shipped eight releases in under a week (v2.6.0 → v2.14.0), completing its entire roadmap and closing all 47 open issues — some dating back to 2015. The driver now stands at feature parity with the best Node.js drivers for Postgres and MySQL, while staying pure JavaScript with zero native

by Popa Adrian Marius (noreply@blogger.com) at July 31, 2026 04:18 PM

July 30, 2026

LibreOffice Design Blog

Please participate in a survey about LibreOffice Base

In the past we run several surveys to better understand the use cases for Calc, Impress, Draw, and Writer templates. And since TDF hired a developer for Base it’s time to investigate this module.

We collected a couple of questions that address not only actual users of LibreOffice Base but also people who use other tools or no database at all.

So please participate at https://survey.documentfoundation.org/493555 (expired August/18th).

If you are afraid of the English language either use a translator or let us do it. The more participants we get the better we can steer the development. As usual, we will present the results in this blog.

 

by Heiko Tietze at July 30, 2026 02:45 PM

July 22, 2026

LibreOffice QA Blog

LibreOffice 26.8 RC1 is available for testing

LibreOffice 26.8 will be released as final at the end of August, 2026 ( Check the Release Plan ). LibreOffice 26.8 RC1 is the third pre-release since development of version 26.8 started at the beginning of December, 2025. Since the previous release, LibreOffice 26.8 Beta1, 133 commits have been submitted

by x1sc0 at July 22, 2026 04:05 PM

July 15, 2026

LibreOffice QA Blog

QA/Dev Report: June 2026

General Activities LibreOffice 26.2.4 was announced on June 5 Olivier Hallot (TDF) added a help article for presentation sections, added support for MathML markup in help pages, improved help for Writer’s break submenu and for some Calc functions and updated help after UI changes Adolfo Jayme Barrientos improved strings in

by x1sc0 at July 15, 2026 04:02 PM

July 08, 2026

LibreOffice QA Blog

LibreOffice 26.8 Beta1 is available for testing

LibreOffice 26.8 will be released as final at the end of August, 2026 ( Check the Release Plan ). LibreOffice 26.8 Beta1 is the second pre-release since development of version 26.8 started at the beginning of December, 2025. Since the previous release, LibreOffice 26.8 Alpha1, 445 commits have been submitted

by x1sc0 at July 08, 2026 04:13 PM

June 12, 2026

LibreOffice QA Blog

QA/Dev Report: May 2026

General Activities LibreOffice 25.8.7 was announced on May 12 Olivier Hallot (TDF) improved the explanation for DATE function in Calc’s Function Wizard, continued documenting in help how LibreOffice treats non-integer values for function parameters expecting integer values, added a help page for Draft View in Writer, added help for Calculated

by x1sc0 at June 12, 2026 12:04 PM

May 13, 2026

LibreOffice QA Blog

QA/Dev Report: April 2026

General Activities LibreOffice 26.2.3 was announced on April 30 Olivier Hallot (TDF) updated Writer’s Compatibility options help, improved documentation for wrapped images in headers, worked on documenting in help how LibreOffice treats non-integer values for function parameters expecting integer values, improved help for Declare statement in BASIC, added help for

by x1sc0 at May 13, 2026 10:19 AM

April 22, 2026

Stephan Bergmann

Git file from nowhere

Git is not only broken by design, it also has some practical shortcomings around git-format-patch and git-am, as it turns out:

$ mkdir repo1
$ ls -a repo1
. ..
$ git init -q repo1
$ ls -a repo1
. .. .git
$ git -C repo1 commit --allow-empty -F ../subject.txt
[master (root-commit) 82b1f4c] Empty test commit
$ git -C repo1 log --oneline --stat
82b1f4c (HEAD -> master) Empty test commit
$ ls -a repo1
. .. .git
$ cat repo1/hello.txt
cat: repo1/hello.txt: No such file or directory
$ git -C repo1 format-patch -k -1 HEAD -o ..
../0001-Empty-test-commit.patch
$ rm -fr repo1
$ mkdir repo2
$ ls -a repo2
. ..
$ git init -q repo2
$ ls -a repo2
. .. .git
$ cat repo2/hello.txt
cat: repo2/hello.txt: No such file or directory
$ git -C repo2 am -k ../0001-Empty-test-commit.patch
Applying: Empty test commit
applying to an empty history
$ git -C repo2 log --oneline --stat
292e19c (HEAD -> master) Empty test commit
hello.txt | 1 +
1 file changed, 1 insertion(+)
$ ls -a repo2
. .. .git hello.txt
$ cat repo2/hello.txt
Hello from the void

Which leaves the question, what’s the content of that subject.txt?

Want to take a guess?

See below.

$ cat subject.txt
Empty test commit
---
hello.txt | 1 +
1 file changed, 1 insertion(+)
diff --git a/hello.txt b/hello.txt
new file mode 100644
index 0000000..479e903
--- /dev/null
+++ b/hello.txt
@@ -0,0 +1 @@
+Hello from the void

by stbergmann at April 22, 2026 01:17 PM

April 21, 2026

Ravi Dwivedi

LibreOffice Conference Budapest 2025

In September 2025, I attended the LibreOffice Conference in Budapest, Hungary, on the 4th and the 5th, and a community meeting on the 3rd. Thanks to The Document Foundation (TDF) for sponsoring my travel and accommodation costs. The conference venue was Faculty of Informatics, Eötvös Loránd University (ELTE).

The conference was planned to be held from the 4th to the 6th, but the program for the 6th of September had to be canceled due to the venue being unavailable because of a marathon in Budapest. So, all the talks got squeezed into just two days, making the schedule a bit hectic.

The TDF had booked my room at the Corvin Hotel. It was a double bedroom with a window. The breakfast was included in the hotel booking. The hotel was walking distance from the conference venue. One could also take a tram from the hotel to reach the venue.

A double bed

A shot of my room. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.

Tram

A tram in Budapest. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.

3rd of September

On the 3rd of September, we had a community meeting at the above-mentioned venue. I walked with my friend Dione to the venue. Upon reaching there, I noticed that the university had no boundaries and gates. This reminded me of the previous year’s conference venue in Luxembourg, which also had no boundaries or gates.

In contrast, Indian universities and institutes typically have walls and gates serving as boundaries to separate them from the rest of the city. Many of these institutes also have security guards at the entrance, who may ask attendees to present proof of admission before allowing them inside. I was surprised to find that institutes in Europe, like the one where the conference was held, did not have such boundaries.

The building where the conference was held was red, which happened to be the same color as the building for the previous year’s conference venue. I remember joking with Dione that the criteria for the conference venue might have been the color of the building.

A red building

The red building in the picture served as the conference venue. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.

During the community meeting, we shared ideas on how to spread the word about LibreOffice. The meeting lasted for a couple of hours.

After the community meeting, we went to the hotel for dinner sponsored by the TDF.

Cake slices

These Esterházy cake bites were really yummy. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.

Raspberry Currant cake slices

Raspberry Currant cake slices. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.

4th of September

On the first day of the conference, attendees were given swag bags containing a pad, sticky notes, a pen, a conference T-shirt, and a bottle.

A blue colored T-shirt on a bed along with a pen, a bottle, a diary and a sticky note

Conference swag. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.

The talks started early in the morning with Eliane Domingos, Chairperson of TDF’s Board of Directors, giving the inauguration talk. As always, I found Italo Vignoli’s talk on the importance of document freedom interesting.

During the snack break, I noticed that there were three types of milk available for coffee: cow’s milk, lactose-free milk, and almond milk. Almond milk is rare in India, but I have managed to get it, but I have never seen lactose-free milk in India.

Since I run fundraisers in my projects, such as Prav, I could relate to Lothar K. Becker’s talk. He discussed the issue that certain implementations in LibreOffice require a budget that is too large for any single interested entity to fund independently. Furthermore, The Document Foundation (TDF) cannot legally receive funds from government entities. Therefore, there is no organization or entity to pool resources from all the interested entities to finance the implementation.

Lothar giving his presentation

Lothar giving his presentation. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.

Another talk was by the Austrian Armed Forces on their migration to LibreOffice. I wanted to know why they migrated, and I found out that they did it for their digital sovereignty, and not for saving on the license costs. Another point presented in the talk was that LibreOffice is available on all the operating systems, while the Microsoft Office suite is not that widely available. The migration was systematic and was performed over a few years. They started working on it in 2021, and the migration was finished recently. In addition, it also required training their staff in using LibreOffice.

Presentation on migration to LibreOffice by Austrian Armed Forces

Presentation on migration to LibreOffice by Austrian Armed Forces. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.

The lunch was inside the university canteen. We were provided lunch coupons by the TDF. I got a vegan coupon with 4000 Ft written on it, which meant I could take lunch for up to 4000 Hungarian forints.

My lunch ticket

My lunch ticket for the conference. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.

The lunch I had on the first day

The lunch I had on the first day. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.

During the evening, it was my turn for the presentation. I was done with preparing my slides ten days before my talk. I also got my slides reviewed by friends.

My talk was finished in 20 minutes, while I was given a 30-minute slot. This helped us catch up on the schedule. Furthermore, I made my talk interactive by asking questions and making sure that the audience was not asleep. During my talk, my friend Dione took my pictures with my camera.

My talk was on how free software projects could give users a say in freedom to modify the software. I illustrated this using the Prav project that I am a part of.

After the talks were over, we were treated to a conference dinner at Trofea Grill. It had a great selection of desserts, which helped me sample some Hungarian desserts. The sponge cake was especially good.

Desserts at Tofea Grill

Desserts at Tofea Grill. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.

5th of September

The next day—the 5th of September—I went with Dione to the venue early in the morning, as her talk was the first one of the day. Her talk was titled Managing Tasks with Nextcloud Deck. Later that day, I also attended a talk on Collabora. At lunch, I found the egg white salad quite tasty.

Dione giving her presentation

Dione giving her presentation. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.

Egg white salad

Egg white salad. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.

After the lunch break, we had the conference group photo. I had a Nikon camera, which we used to take the group photo. I requested a university student to take our group photo and also taught her how to operate the camera.

People looking at the camera and smiling

Group photo

By the evening, the conference ended, after which we went to a pub, which was again sponsored by TDF. I had beer, but that one really tasted bad, so I couldn’t finish it. The only vegetarian option was goat cheeseburger, which my friend Manish and I opted for. The burger tasted awful. Apparently, I don’t like goat cheese.

The next day I went sightseeing with Dione in Budapest. Stay tuned for our adventures!

Credits: Thanks to Dione and Richard for proofreading.

April 21, 2026 03:54 AM

April 19, 2026

Chris Sherlock

Demystifying the LibreOffice VCL Coordinate Pipeline

I've been looking fairly closely at the coordinate system of VCL. I understood it fairly well, but as I have a Pro subscription of Gemini, I asked it to look at it for me to tell me how it thinks it works. Here is what it came up with:


If you’ve ever worked on a complex UI rendering engine, you know that placing a single pixel on the screen is rarely as simple as draw(x, y). A single coordinate actually exists in several different "realities" simultaneously.

In LibreOffice’s VCL (Visual Components Library), a coordinate has to travel through up to five distinct spatial dimensions to get from the mathematical purity of a document model to the physical LED pixels on your monitor.

If you get an offset wrong or apply a scaling factor out of order, your text disappears off the page, your borders render fuzzy, or your PDF exports break entirely. To fix these issues and modernize the rendering stack, we have to establish a strict, predictable pipeline.

Here is a deep dive into the five coordinate spaces of the LibreOffice VCL, and the math required to traverse them.

The 5 Coordinate Spaces

Think of these spaces as a series of nested Russian dolls. To get to the center (the document), you have to open them one by one.

1. Absolute Logic (Document Space)

This is the pure, mathematical space of the document itself.

  • Units: Defined by the MapMode (e.g., 1/100th of a millimeter for high-precision printing).
  • Origin (0,0): The absolute top-left corner of the page or document canvas.
  • The Variable: Represented simply as nX or nY.

2. Logic Units (Pipeline Space)

This is an intermediate staging area. The coordinate is still in logical document units, but it has been intentionally shifted.

  • The Shift: mnOutOffLogic.
  • Why it exists: This is an artificial shift applied to the document origin. It is frequently used when VCL needs to render a specific sub-section or "tile" of a document without actually changing the underlying coordinates of the objects themselves.

3. View Space (Viewport Space)

Welcome to the realm of pixels—specifically, pixels relative to the viewport (the scrollable area of the application).

  • The Transformation: To get here, we multiply the Logic Units by the DPI and Zoom scale (mfMapScX / mfMapScY).
  • The Shift: mnMapOfsX / mnMapOfsY (The Mapping Offset).
  • Why it exists: The origin (0,0) here is the top-left of your current scroll position. As you scroll down a Writer document, the mapping offset changes, shifting the view without altering the document.

4. Window Space (Client Space)

These are pixels relative to the GUI window frame itself.

  • The Shift: mnOutOffOrigX / mnOutOffOrigY (The VCL Pixel Offset).
  • Why it exists: The origin (0,0) is the top-left corner of the specific LibreOffice window or UI widget you are interacting with. VCL uses this offset internally to account for things like scrollbars, widget borders, or docking areas inside a window. This is the coordinate space where your mouse click events natively arrive.

5. Device Space (Physical Space)

The final destination. These are absolute pixels mapped to your physical hardware.

  • The Shift: mnOutOffX / mnOutOffY (The Screen Origin).
  • Why it exists: The origin (0,0) is the top-left corner of your physical monitor. This is the coordinate system that the underlying operating system graphics APIs (like CoreGraphics on macOS, Cairo on Linux, or GDI/DirectWrite on Windows) require to actually illuminate a pixel on your screen.

The Mathematical Pipeline

To safely traverse these spaces without causing "double-subtraction" bugs or off-by-one pixel errors, we chain the transitions together in a strict sequence.

Here is the Forward Path (converting a Document coordinate to a Physical Screen pixel):

  1. Absolute → Logic Units: Add the logical offset.
    LogicUnits = nX + mnOutOffLogicX
  2. Logic Units → View: Apply the zoom scale, then add the scroll offset.
    View = (LogicUnits * mfMapScX) + mnMapOfsX
  3. View → Window: Add the internal VCL widget offset.
    Window = View + mnOutOffOrigX
  4. Window → Device: Add the physical screen position.
    Device = Window + mnOutOffX

When handling a mouse click, we run this exact pipeline in reverse (The Inverse Path), carefully subtracting the offsets and dividing by the scale to figure out exactly which 1/100th of a millimeter the user clicked on.

Why Sub-Pixel Accuracy Matters

Historically, rendering engines used integer math (tools::Long) for these transitions. If a line ended up at pixel 10.7, it was truncated to 10. For basic UI elements, this was fine.

However, modern graphics rely heavily on anti-aliasing (B2D rendering) and high-fidelity vector exports (PDFs). If you truncate a coordinate too early in the pipeline, you lose the fractional data. When you eventually scale that truncated coordinate back up, that tiny fractional loss multiplies into massive visual artifacts—lines appear to "shimmer" when scrolling, or text glyphs collide with each other.

By upgrading this pipeline to handle high-precision double math at every stage (Sub-Pixel stages), LibreOffice can pass mathematically perfect coordinates to the OS-level drawing APIs, ensuring that your documents look perfectly crisp at any zoom level.


by Chris Sherlock (noreply@blogger.com) at April 19, 2026 03:05 AM

April 14, 2026

Ravi Dwivedi

Hungary Visa

The annual LibreOffice conference 2025 was held in Budapest, Hungary, from the 3rd to the 6th of September 2025. Thanks to the The Document Foundation (TDF) for sponsoring me to attend the conference.

As Hungary is a part of the Schengen area, I needed a Schengen visa to attend the conference. In order to apply for a Schengen visa, one needs to get an appointment at VFS Global and submit all the required documents there, which are then forwarded to the embassy.

I got an appointment for a Hungary visa at VFS Global in New Delhi for the 24th of July. There were many appointment slots available for the Hungary visa. One could easily get an appointment for the next day at the Delhi center. There were some technical problems on the VFS website, though, as I was unable to upload a scanned copy of my passport while booking the appointment. I got an error saying, “Unfortunately, you have exceeded the maximum upload limit.”

The problem didn’t get fixed even after contacting the VFS helpline. They asked me to try in the Firefox browser and deleting all the cache, which I already did.

So I created another account with a different email address and phone number, after which I was able to upload my passport and book an appointment. Other conference attendees from India also reported facing some technical issues on the VFS Hungary website.

Anyway, I went to the VFS Hungary application center as per my appointment on the 24th of July. Going inside, I located the Hungary visa application counter. There were two applicants ahead of me.

When it was my turn, the VFS staff warned me that my passport was damaged. The “damage” was on the bio-data page. All the details could be seen, but the lamination of the details page wore off a bit. They asked me to write an application to the Embassy of Hungary in New Delhi stating that I insist VFS to submit my application along with describing the “damage” on my passport.

I got a bit worried about my application getting rejected due to the “damage.” But I decided to gamble my money on this one, as I didn’t have time (and energy) to apply for a new passport before this trip.

Moreover, I had struck down a couple of fields in my visa application form which were not applicable to me, due to which the VFS staff asked me to fill out another visa application.

After this, the application got submitted, and it was 11,000 INR (including the fee to book the appointment at VFS). Here is the list of documents I submitted:

  • My passport

  • Photocopy of my passport

  • Two photographs of myself

  • Duly filled visa application form

  • Return flight ticket reservations

  • Payslips for the last three months

  • Invitation letter from the conference organizer (in Hungarian)

  • Proof of hotel bookings during my stay in Hungary

  • Cover letter stating my itinerary

  • Income tax returns filed by me

  • Bank account statement, signed and sealed by the bank

  • Travel insurance valid for the period of the entire trip

It took 2 hours for me to submit my visa application, even though there were only two applicants before me. This was by far the longest time to submit a Schengen visa application for me.

Fast-forward to the 30th of July, and I received an email from the Embassy of Hungary asking me to submit an additional document - paid air ticket - for my application. I had only submitted dummy flight tickets, and they were enough for the Schengen visas I applied for until now. This was the first time a country was asking me to submit a confirmed flight ticket during the visa process.

I consulted my travel agent on this, and they were fairly confident that I will get the visa if the embassy is asking me to submit confirmed flight tickets. So I asked the travel agent to book the flight tickets. These tickets were ₹78,000, and the airline was Emirates. Then, I sent the flight tickets to the embassy by email.

The embassy sent the visa results on the 6th of August, which I received the next day.

My visa had been approved! It took 14 days for me to get the Hungary visa after submitting the application.

See you in the next one!

Thanks to Badri for proofreading.

April 14, 2026 05:50 AM

April 13, 2026

Mike Kaganski

Our doors have never been closed to you

Maybe I’m silly. Maybe I just can’t read what they write to me (and to other Collaborans).

I read this:

The Document Foundation and the LibreOffice project are open by definition and principle to all developers. Our doors have never been closed to any of you, and they never will be.

… and I somehow feel that this means: “we at TDF have kicked you off of membership, but you are welcome to keep contributing, and to have a warm feeling about it after that”.

Open doors? I can’t even apply for membership for more than three years from now. They have officially informed me about that – this is a link to the EML with the notice from MC; it includes my reply to their original “notification”. They write:

the Membership Committee expels you from the board of trustees with immediate effect. Because you didn’t relinquished your membership immediately, we decided also considering all circumstances to block membership for at least three calendar years, thus at least up to December, 31 2029.

If I had relinquished my membership as the MC asked, I would have lost my right to challenge this “temporary inconvenience” – and I am puzzled by the claim by a board member that “in the meantime … [I] can reapply for membership as soon as the legal matters have been settled.” (https://community.documentfoundation.org/t/comment-about-collabora-blog-post-tdf-community-blog/13626/9). I can re-apply, but – it is clear I will not be accepted until 2030 (the earliest possibility). After that the “bylaws” they invented this January will prevent me from e.g. nominating to BoD for two more years. Definitely honest and welcoming. (No idea how the remaining TDF members feel about the amazing fact that the board could decide and implement a restriction like that, limiting you without asking your opinion.)

Well, enough of that. No more posts about TDF. It was nice, and I met many people during that period, that I hope I can continue to call friends; but the current policy of that thing claiming nice goals and high standards is so disgusting, that I am even glad to not have relation to that anymore. Let’s do some hacking instead!

by mikekaganski at April 13, 2026 04:41 PM

April 11, 2026

Andreas Kainz

I’l be back

After nearly 10 years, it’s time to start contributing to Open Source again.

My Open Spurce journey begann with breeze icons for KDE, than I added breeze icons to LibreOffice. After that I made a the complete new colibre icon theme for LibreOffice which is the default for the Windows users.

After Icon stuff I start with pressts, different visuals and User Interface related stuff like Notebookbar. Which bring me to Collabora Online Office were I fast switch to mobile toolbar and dark mode.

After my first Open Source Journey I had a long break. Which show me, that Open Source is great. Other Community members update and improve my work. I can say, it’s awesome to see the work done within the DNA of each OSS.

Now I will start again where I did my last work. Collabora Online (Desktop/Mobil/Tablet …). Why? Because I can! Thats the great benefit of OSS. Everyone can improve ist and I enjoy the Collabora Community a lot. In addition to it’s fast development, it’s that easy to make changes and contribute.

Happy Hacking on any OSS you enjoy. It would be awesome to meet you at the Collabora Community.

by kdeonlinux at April 11, 2026 09:12 AM

April 05, 2026

Mike Kaganski

The Post They Managed to Avoid

“Ideally, we would have preferred to avoid this post.”

When I read those opening words in Italo’s recent statement, “Let’s put an end to the speculation,” they stung. I don’t know if that specific post should have existed or not, but those first few words are a perfect reflection of the current TDF attitude. It is an attitude directed toward the very people who devoted large parts of their lives, their passion, and their hearts to the Foundation’s ideals.

What I am missing is not that specific post that Italo wrote. What I expected—what I felt I earned—was a post that looked me in the eye. I wanted an explanation as to why I am being cast out from the Trustees after everything I’ve honestly given. I wanted to know my specific “guilt,” or why the Foundation now finds “guilt by association” to be an acceptable standard.

And then—I would hope—they would publicly say: “Mike, we appreciate everything you’ve done. We deeply regret the unfortunate decisions we—not you—made over the years. But we feel this is the only path forward, and we are sorry.”

But that is the post they successfully avoided writing.

by mikekaganski at April 05, 2026 12:56 PM

April 01, 2026

March 27, 2026

Stephan Bergmann

I like it here. Can I stay? Part 2

I came here due to a (decades-spanning, arguably perverse) love affair with the LibreOffice code body. Less so for a love of organizational bodies.

So I mostly remained passive and watched the coup d’état unfold at the Document Foundation. Where some folks apparently felt the need to have us all thrown out. Oh my.

Should I have been more involved around the apparent issues at TDF? Maybe. But then again, I’m a naive little nerd who loves fixing dysfunctional code way more than navigating dysfunctional political setups. (And to be fair, I tried to do my duty, and did serve a term on the membership committee. Back when that was likely more pleasant than what it would be today.)

Luckily, the code and the fun will most certainly live on, one way or another. Not least at https://collaboraonline.github.io/.

Happy hacking, once more,
sberg

by stbergmann at March 27, 2026 04:04 PM

February 07, 2026

Mike Kaganski

A trick to develop a Windows-specific clipboard format support on other platforms, using UNO API

Not too long ago, a change landed, that brought Biff12 clipboard format support in Calc v.26.2 – thanks Laurent!

It was an easyhack that I authored some time ago; and Laurent volunteered to implement that long-standing missing feature. The small detail was, that the feature was Windows-specific (it is trivial to get the wanted clipboard content there, simply copying from Excel), while Laurent developed on another platform.

Laurent had made the majority of work, before he was stuck, without being able to test / debug further changes. Then, he asked me, if there a way to continue on the platform he used.

At that time, I answered, that no, one would need Windows (and Excel) to continue the implementation. So I jumped in, and added the rest, and in the end, we have created the change in co-authorship.

But later, when part of my code turned out problematic, and I needed to fix it and create a unit test for it, I discovered a trick, that could put Biff12 data into system clipboard on any platform, without Excel – allowing then just paste, and debug everything that’s going on there. It relies on UNO API, and can be implemented e.g. in Basic:


function XTransferable_getTransferData(aFlavor as com.sun.star.datatransfer.DataFlavor) as variant
  if (not XTransferable_isDataFlavorSupported(aFlavor)) then exit function
  oUcb = CreateUnoService("com.sun.star.ucb.SimpleFileAccess")
  oFile = oUcb.openFileRead(ConvertToURL("/path/to/biff12.clipboard.xlsb"))
  dim sequence() as byte
  oFile.readBytes(sequence, oFile.available()) ' changes value type of 'sequence' to integer
  XTransferable_getTransferData = CreateUnoValue("[]byte", sequence)
end function

function XTransferable_getTransferDataFlavors() as variant
  aFlavor = new com.sun.star.datatransfer.DataFlavor
  aFlavor.MimeType = "application/x-openoffice-biff-12;windows_formatname=""Biff12"""
  XTransferable_getTransferDataFlavors = array(aFlavor)
end function

function XTransferable_isDataFlavorSupported(aFlavor as com.sun.star.datatransfer.DataFlavor) as boolean
  XTransferable_isDataFlavorSupported = (aFlavor.MimeType = "application/x-openoffice-biff-12;windows_formatname=""Biff12""")
end function

sub setClipboardContent
  oClip = CreateUNOService("com.sun.star.datatransfer.clipboard.SystemClipboard")
  oClip.setContents(CreateUNOListener("XTransferable_", "com.sun.star.datatransfer.XTransferable"), nothing)
end sub

The first three functions are Basic implementation of XTransferable interface.

Running setClipboardContent will prepare the system clipboard on any platform, using a trick of implementing arbitrary UNO interface using CreateUNOListener; and after that, pasting into Calc would allow to see if things work (if content of /path/to/biff12.clipboard.xlsb is pasted, as expected), and make improvements. If I knew this trick back then, I would of course share it with Laurent; but I thought I’d put it here now, so maybe it helps me or someone else in the future. (Note that application/x-openoffice-biff-12;windows_formatname="Biff12" there in the code was the name introduced by Laurent in the discussed commit; indeed, that, and the actual data in the file, would depend on the exact format that you work with.)

by mikekaganski at February 07, 2026 04:13 PM

February 04, 2026

Miklos Vajna

Improving deleted commented text ranges in Writer's DOCX filter

If you have a commented text range, which gets deleted while track changes is on and you later save and load this with Writer's DOCX filter, that works now correctly.

This work is primarily for Collabora Online, but the feature is available in desktop Writer as well.

Motivation

It was already possible to comment on text ranges. Comments were also supported inside deletes when track changes is enabled. These could be already exported to and imported from DOCX in Writer. But you could not combine these.

With the increasing popularity of commenting text ranges (rather than just inserting a comment with an anchor), not being able to combine these was annoying.

Results so far

Here is how a commented text range inside a delete from DOCX now looks like, note the semi-transparent comment hinting it's deleted:

Commented text range, inside a tracked delete, in DOCX, Collabora Online

As a side effect, this also fixes the behavior in desktop Writer, which crosses out deleted comments:

Commented text range, inside a tracked delete, in DOCX, desktop

In the past, the "is this deleted" property was not visible in the render result:

Commented text range, inside a tracked delete, in DOCX, Collabora Online, old bad state

And it was also bad in desktop Writer:

Commented text range, inside a tracked delete, in DOCX, desktop, old bad state

This required changes to both DOCX import and export: a comment could be deleted or could have an anchor which is a text range, but you couldn't have both.

How is this implemented?

If you would like to know a bit more about how this works, continue reading... :-)

As usual, the high-level problem was addressed by a series of small changes. Core side:

Want to start using this?

You can get a development edition of Collabora Online 25.04 and try it out yourself right now: try the development edition. Collabora intends to continue supporting and contributing to LibreOffice, the code is merged so we expect all of this work will be available in TDF's next release too (26.8).

by Miklos Vajna at February 04, 2026 07:42 AM

January 22, 2026

LibreOffice Dev Blog

Validating ODF and OOXML files

In LibreOffice development, there are many cases where you want to validate some documents against standards: either Open Document Format (ODF) or MS Office Open XML (OOXML). Here I discuss how to do that.

Update: Article updated to reflect that odfvalidator 0.13.0 has just released.

Open Document Format (ODF) Validation

ODF is the native document file format that LibreOffice and many other open source applications use. It is basically set of XML files that are zipped together, and can describe various aspects of the document, from the content itself to the way it should be displayed. These XML files have to conform to ODF standard, which is presented in XML schemas. The latest version of ODF is 1.4, which is yet to be implemented in LibreOffice.

You can find more about ODF in these links:

There are various tools to do the validation, but the preferred one is the ODF Toolkit Validator:

Compiled binaries of ODF Toolkit can be downloaded from the above Github project:

Then, you can use the ODF validator this way:

$ java -jar odfvalidator-0.13.0-jar-with-dependencies.jar test.odt

You may also use the online validator, odfvalidator.org, to do a validation.

odfvalidator
Online odfvalidator tool

Please read this disclaimer before using:

This service does not cover all conformance criteria of the OpenDocument Format specification. It is not applicable for formal validation proof. Problems reported by this service only indicate that a document may not conform to the specification. It must not be concluded from errors that are reported that the document does not conform to the specification without further investigation of the error report, and it must not be concluded from the absence of error reports that the OpenDocument Format document conforms to the OpenDocument Format specification.

Office Open XML (OOXML) Validation

MS Office Open XML (OOXML) is the native standard for Microsoft documents format. It is also a set of XML files zipped together, and conform to some XML schemas.

You can find out more about OOXML here:

There are tools to do the validation, and the one is used in LibreOffice is Office-o-tron. One can use it with below command to validate an example file, test.docx:

$ java -jar officeotron-0.8.8.jar ~/test.docx

Office-o-tron can be downloaded from dev-www.libreoffice.org server of LibreOffice, and this is currently the latest version:

It is worth noting that Office-o-tron can be also used to validate ODT files.

Extensions to ODF Standard

To go beyond the current ODF standard, new features are sometimes introduced as “ODF extensions”, then are gradually added to the standard. You can read more in TDF Wiki:

In these cases, you may see validation errors for such extensions. For example:

test.odt/styles.xml[2,3347]: Error: unexpected attribute “loext:tab-stop-distance”
test.odt/styles.xml[2,4849]: Error: unexpected attribute “loext:opacity”

You may avoid such errors by using -e option, which ignores such unknown markups:

-e: Check extended conformance (ODF 1.2 and 1.3 documents only)

If you want to use the latest features from ODF validator, you should build ODF Toolkit from source. You can then run it with this command:

$ java -jar ./validator/target/odfvalidator-0.14.0-SNAPSHOT-jar-with-dependencies.jar test.odt

ODF Toolkit developers have recently (23 January 2026) published the new release 0.13. If you do not build from sources, you can use this new version which contains ODF 1.4 support.

Final Words

When you want to make sure that the ODT or OOXML document you generate is valid according to the standards, then you need validation. Sometimes, it is the opposite: you want to make sure that the input document is valid before processing it, or when you want to know if the problem is from LibreOffice (or other processors), or the document itself. Then, again, the validator is the right tool to use.

by Hossein Nourikhah at January 22, 2026 01:03 PM

January 16, 2026

LibreOffice Dev Blog

Outlook for the new year 2026

Happy new year 2026! I hope that this year will be great for you, and the global LibreOffice community, and the software itself! I hereby discuss the past year 2025, and the outlook for 2026 in the development blog.

At The Document Foundation (TDF), our aim is to improve LibreOffice, the leading free/open source office suite that has millions of users around the world. Our work is community-driven, and the software needs your contribution to become better, and work in a way that you like.

My goal here, is to help people understand LibreOffice code easier via EasyHacks and tutorials, and eventually participate in LibreOffice core development to make LibreOffice better for everyone. In 2025, I wrote 14 posts around LibreOffice development in the dev blog (4 of them are unpublished drafts).

Outlook For the New Year

Focus of the development blog for 2026 in this blog will be:

  • Introducing new EasyHacks
    • Using new C++20 constructs
    • Difficulty Interesting EasyHacks
  • Describing user interface creation with VCL
    • VCL weld mechanism
    • Various weld widgets
  • Describing UNO Components

You can provide feedback simply by leaving a comment here, or sending me an email to hossein AT libreoffice DOT org.

We provide mentoring support to the individuals who want to start LibreOffice development. You are welcome to contact me if you need help to build LibreOffice and do some EasyHacks via the above email address. You may also refer to our Getting Involved Wiki page:

Let’s hope a better year for LibreOffice (and the world) in 2026.

by Hossein Nourikhah at January 16, 2026 01:25 PM

January 05, 2026

Miklos Vajna

Bullet improvements in Impress

The bullet support in Impress got a couple of improvements recently, some of this is PPTX support and others are general UI improvements.

This work is primarily for Collabora Online, but the feature is available in desktop Impress as well.

Motivation

Probably the most simple presentations are just a couple of slides, each slide having a title shape and an outliner shape, containing some bullets, perhaps with some additional images. Images are just bitmaps, so let's focus on outliner shapes and their outliner / bullet styles.

What happens if you save these to PPTX and load it back? Can you toggle between a numbering and a bullet? Can you return to an outliner style after you had direct formatting for your bullet?

Results so far

The first case was about bullet editing of this document:

Outliner shape with 3 outliner styles

If you pressed enter at the end of 'First level', then pressed <tab> to promote the current paragraph to the second level, nothing happened. The reason for this was that our PPTX export was missing the list styles of shapes, except for the very first list style. And the same was missing on the import side, too. With this, not only the rendering of the bullets are OK, but also adding new paragraphs and using promoting / demoting to change levels work as expected.

The second case was about this document, where the second level had a numbering, not a bullet:

Outliner shape with a numbering on the second level

We only had UI to first toggle off a numbering to no numbering, then you could toggle on bullets. Now it's possible to do this change in one step.

The last case was about styles. Imagine that you had a master page with an outline shape and some reasonably looking configuration for the first and second levels as outline styles:

Outliner shape with two outline styles

Notice how the last paragraph has a slightly inconsistent formatting, due to direct formatting. Let's fix this.

Go to the end of the last bullet, which is currently not connected to an outline style, toggle bullets off and then toggle it on again. Now we clear direct formatting when we turn off the bullet, so next time you turn bullets on, it'll be again connected to the outline style's bullet configuration and the content will look better.

Note how this even improves consistency: Writer was behaving the same way already, when toggling bullets off and then toggle on again resulted in getting rid of previously applied unwanted direct formatting.

How is this implemented?

If you would like to know a bit more about how this works, continue reading... :-)

As usual, the high-level problem was addressed by a series of small changes. Core side:

Want to start using this?

You can get a development edition of Collabora Online 25.04 and try it out yourself right now: try the development edition. Collabora intends to continue supporting and contributing to LibreOffice, the code is merged so we expect the core of this work will be available in TDF's next release too (26.2).

by Miklos Vajna at January 05, 2026 07:37 AM

December 04, 2025

LibreOffice Dev Blog

Handling CI build failures

After submitting a patch to LibreOffice Gerrit, one has to wait for the continuous integration (CI) to build and test the changed source code to make sure that the build is OK and the tests pass successfully. Here we discuss the situation when one or more CI builds fail, and how to handle that.

Why Build and Test on CI?

After you submit code to LibreOffice Gerrit, reviewers have to make sure that it builds, and the tests pass with the new source code. But, it is not possible for the reviewers to test the code on each and every platform that LibreOffice supports. Therefore, Jenkins CI does that job of building and testing LibreOffice on various platforms.

This can take a while, usually 1 hour or so, but sometimes can take longer than that. If everything is OK, then your submission will get     Verified +1    .

CI Platforms for LibreOffice

Currently, these are the platforms used in CI:

  • Linux / GCC:  gerrit_linux_gcc_release
  • Linux / Clang: gerrit_linux_clang_dbgutil
  • Android Viewer: gerrit_android_x86_64 and gerrit_android_arm
  • Windows: gerrit_windows_wsl
  • macOS: gerrit_mac

Some of the tests are more extensive, for example Linux / Clang also performs additional code quality checks with clang compiler plugins. Also, UITests are not run on each and every platform.

Jenkins LibreOffice CI
LibreOffice CI uses Jenkins

Why Failures Happen and How to Fix?

There can be multiple reasons for why a CI build fails, and give your submission    Verified -1   . These are some of the reasons, and depending on the reason, solution can be different.

1. Your code’s syntax is wrong and compile fails

In this case, you should fix your code, and then submit a new patch set. You have to wait again for a new CI build.

2. The code’s syntax is OK, but it is not properly formatted

You should refer to the below TDF Wiki article and use clang-format tool to format your code properly.

3. Your code’s syntax is OK, but it logically not OK and fails some tests.

In this case, you should try fixing your code logic, and run the tests that fail and make sure they pass. After that, you may send a new patch set and wait for a new CI build.

4. Your code’s syntax and logic is OK, but some machine fails for other reasons like their disk being full or other software/hardware failures or hiccups

In this case, usually resuming the build can be a good option. You may ask on #libreoffice-dev or #tdf-infra IRC rooms for such a resume, or request access, if you submit many patches.

Resume CI build
Resume build in LibreOffice CI

5. Your code’s syntax and logic is OK, but there are issues from other patches.

In this case, intervention from other LibreOffice developers is needed. Informing people on #libreoffice-dev can help, and then you have to re-base your submission in case new patches fix the build issue.

Final Notes

The best way to know the reason of the build failure is to look into the CI log files. Sometimes it needs more detailed look to understand the issue, but sometimes the reason is easily provided on Gerrit as a comment.

But, in the end your submission should have     Verified +1     before it is suitable for merge in the LibreOffice code. This +1 as verified, does not guarantee that your patch will work as expected, but it is an important requirement.

by Hossein Nourikhah at December 04, 2025 11:10 PM

December 03, 2025

Miklos Vajna

Markdown import in Writer: the new template option

Writer recently got a new markdown import option to take styles from a template, leading to much prettier output when converting markdown to PDF, DOCX or ODT.

This work is primarily for Collabora Online, but the templating feature is available in desktop Writer as well.

Motivation

A previous post mentioned recent improvements to the markdown import/export in Writer.

But if you convert some markdown to e.g. PDF, all the headings just have the default look, wouldn't it be nice to take your organization template and add colors and other formatting there, automatically?

Also, wouldn't it be nice if you could paste as markdown in COOL or copy the current selection as markdown? Which would enable all sorts of interesting use-cases, like using an external API to turn the selection into a summary or translating it to a different language.

Results so far

Here is a sample input markdown:

# heading 1

body text

Here is how it looks like if you template it using the core.git sw/qa/filter/md/data/template.docx sample:

PDF result: templated

curl invocation for this:

curl -k -F "data=@/path/to/test.md" -F "template=@/path/to/template.docx" -F "format=pdf" -o out.pdf https://localhost:9980/cool/convert-to

Or example desktop command-line:

soffice --infilter='Markdown:{"TemplateURL":{"type":"string","value":"./template.ott"}}' test.md

While it would look like this by default:

PDF result: default

The other part is the PostMessage API of COOL, if you want to copy and paste as markdown. What's newly possible:

  • Copy the current selection: set MessageId to Action_Copy and the value to {"Mimetype": "text/markdown;charset=utf-8"}
  • Paste at the current cursor position: set MessageId to Action_Paste and the value to something like {"Mimetype": "text/markdown;charset=utf-8", "Data": "foo _bar_ baz"}

You can read more about the PostMessage API in the COOL SDK.

How is this implemented?

If you would like to know a bit more about how this works, continue reading... :-)

As usual, the high-level problem was addressed by a series of small changes. Core side:

Online side:

Want to start using this?

You can get a development edition of Collabora Online 25.04 and try it out yourself right now: try the development edition. Collabora intends to continue supporting and contributing to LibreOffice, the code is merged so we expect the core of this work will be available in TDF's next release too (26.2).

by Miklos Vajna at December 03, 2025 08:35 AM

November 04, 2025

Miklos Vajna

Interdependent tracked changes improvements in Writer, part 4: direct accept/reject

Writer has some support for interdependent (or hierarchical) tracked changes: e.g. the case when you have a delete on top of an insert. See the third post for background.

This work is primarily for Collabora Online, but the feature is available in desktop Writer as well.

Motivation

Interdependent changes mean that the UI shows one type of change on top of another change, e.g. formatting on top of insert. Writer knows the priority of each type, so in case you have an insert or delete change and on top of that you have a formatting, then the UI will look "through" the formatting and work on the underlying insert or delete when you navigate with your cursor to a position with multiple changes and you press Accept on the Review tab of the notebookbar.

Usually this is what you mean, but what if you want to work on the formatting at the top, directly? You can now open the Manage Changes dialog using the Manage button on the Review tab of the notebookbar and if you go to the formatting change row of the dialog, then pressing Accept there will accept the formatting change, not the insert or delete change. This is possible, because the dialog gives you a way to precisely select which tracked change you want to work with, even if a specific cursor position has multiple tracked changes.

Results so far

Here is a sample ins-then-format.docx document from the core.git testcases, the baseline has an insertion, and part of that is covered by an additional formatting change on top:

Interdependent tracked change: baseline

If you just go in the middle of the document and press Accept, that will work with the more important insert change, so the result looks like this:

Interdependent tracked change: default accept result

But now you can also open the Manage Changes dialog, to be more specific by directly selecting the formatting change:

Interdependent tracked change: direct accept via the dialog

And when you accept the formatting change directly, the result will be just the insert change:

Interdependent tracked change: direct accept result

You can save and load the results in both DOCX and ODT, as usual.

How is this implemented?

If you would like to know a bit more about how this works, continue reading... :-)

As usual, the high-level problem was addressed by a series of small changes. Core side:

Want to start using this?

You can get a development edition of Collabora Online 25.04 and try it out yourself right now: try the development edition. Collabora intends to continue supporting and contributing to LibreOffice, the code is merged so we expect all of this work will be available in TDF's next release too (26.2).

by Miklos Vajna at November 04, 2025 07:11 AM

October 22, 2025

LibreOffice Dev Blog

enumarray for better data arrays – EasyHack

In LibreOffice C++ code, there are many cases where developers want to use string literals in their code. If these are messages in the graphical user interface (GUI), they should add them to the translatable messages. But, there are many cases where the string literals has nothing to do with other languages, and there will not be any further translations. In these cases, enumarray is helpful. Although enumarray can be used beyond string literals, for any kind of data.

Using Symbolic Constants

In old C code, using #define was the preferred way one could give a name to a string literal or other kinds of data. For example, consider this code:

const char[] FRAME_PROPNAME_ASCII_DISPATCHRECORDERSUPPLIER = "DispatchRecorderSupplier";
const char[] FRAME_PROPNAME_ASCII_ISHIDDEN = "IsHidden";
inline constexpr OUString FRAME_PROPNAME_ASCII_LAYOUTMANAGER = "LayoutManager";
const char[] FRAME_PROPNAME_ASCII_TITLE = "Title"_ustr;
const char[] FRAME_PROPNAME_ASCII_INDICATORINTERCEPTION = "IndicatorInterception";
const char[] FRAME_PROPNAME_ASCII_URL = "URL";

And also, the relevant states:

#define FRAME_PROPHANDLE_DISPATCHRECORDERSUPPLIER 0
#define FRAME_PROPHANDLE_ISHIDDEN 1
#define FRAME_PROPHANDLE_LAYOUTMANAGER 2
#define FRAME_PROPHANDLE_TITLE 3
#define FRAME_PROPHANDLE_INDICATORINTERCEPTION 4
#define FRAME_PROPHANDLE_URL 5

Although this C code still works in C++, it is not the desired approach in modern C++.

Using enumarrays

In modern C++ code, you can use enumarry from o3tl library in LibreOffice. The above code becomes:

enum class FramePropNameASCII
{
    DispatcherRecorderSupplier,
    IsHidden,
    LayoutManager,
    Title,
    IndicatorInterception,
    URL,
    LAST=URL
};

And also, the string literal definitions:

constexpr o3tl::enumarray<FramePropNameASCII, OUString> FramePropName = {
    u"DispatchRecorderSupplier"_ustr,
    u"IsHidden"_ustr,
    u"LayoutManager"_ustr,
    u"Title"_ustr,
    u"IndicatorInterception"_ustr,
    u"URL"_ustr
};

Why an enumarray?

The names are much more readable, as they do not have to be ALL_CAPPS, as per convention for symbolic constants in C. Their usage is also quite easy. For example, one can use [] to access the relevant string literal:

- xPropSet->getPropertyValue( FRAME_PROPNAME_ASCII_LAYOUTMANAGER ) >>= xLayoutManager;
+ xPropSet->getPropertyValue( FramePropName[FramePropNameASCII::LayoutManager] ) >>= xLayoutManager;

Final Notes

In LibreOffice, enumarrays are not limited to string literals, and they can be used with other data. This task is tdf#169155, and if you like, you may try finding some instances in the code and modernize it using enumarrays.

To learn more about LibreOffice development, you can refer to TDF Wiki. You may follow this blog to read about EasyHacks, tutorials and announcements related to LibreOffice development.

by Hossein Nourikhah at October 22, 2025 07:30 PM

October 16, 2025

LibreOffice Dev Blog

enum class instead of unscoped enum – EasyHack

Since C++11 when enum class (also named scoped enum) is introduced, it is preferred to plain enum which is inherited from C programming languages. The task here is to convert the old enum instances to enum class.

Rationale

enum class has many benefits when compared to plain enum, as it provides better type safety among other things. Implicit conversion to integers, lack of ability to define the underlying data type and compatibility issues were some of the problems with plain enum that enum class solved in C++11. Although since then enum has improved and one can specify underlying type in the scoped enumerations.

Plain enums pollute namespace, and you have to pick names that are too long, and have to carry the context inside their names. For example: INETMSG_RFC822_BEGIN inside enum _ImplINetRFC822MessageHeaderState. With an enum class, it is simply written as HeaderState::BEGIN. When placed inside a file/class/namespace that makes it relevant, it is much easier to use: it is more readable, and causes no issues for other identifiers with possible similar names.,

See this change:

You can read more about that in:

Finding Instances

You may find some of the instances with:

$ git grep -w enum *.cxx *.hxx|grep -v "enum class"

When you count it with wc -l, it shows something more than 2k instances.

Examples Commits

You can see some of the previous conversions here, which is around 1k changes:

$ git log --oneline -i -E --grep="convert enum|scoped enum"

This is a good, but lengthy example of such a conversion:

Implementation

First of all, please choose good names for the new enum class and values. For example, you may convert APPLICATION_WINDOW_TITLE into Application::WindowTitle. Therefore, do not use the old names as they were.

Converting enum to enum class is not always straightforward. You should try to understand the code using the enum, and then try to replace it with enum class. You may need to add extra state/values for situations where 0 or -1 or some default value was used. There are cases where a numerical value is used for different conflicting purposes, and then you have to do some sort of conflict resolution to separate those cases.

You may end up modifying more and more files, and a few static_casts where they are absolutely necessary because you are interpreting some integer value read from input. These are the places where you should check the values yourself in the code. You have to make sure that the numerical value is appropriate before casting it to the enum class.

If you want to do bitwise operations, you should use o3tl::typed_flags, for example:

enum class FileViewFlags
{
    None = 0x00,
    MultiSelection = 0x02,
    ShowType = 0x04,
    ShowNone = 0x20,
};

template<> struct o3tl::typed_flags : o3tl::is_typed_flags<FileViewFlags, 0x26> {}

Then, you may use it like this:

    if (nFlags & FileViewFlags::MULTISELECTION)
        mxTreeView->set_selection_mode(SelectionMode::Multiple);

Please note that 0x26 is the mask, and is calculated by applying OR over all possible values. All the values must be non-negative.

Final Notes

This is a simple development task for LibreOffice also known as EasyHack, which is filed in Bugzilla as tdf#168771. These small tasks are defined to help newcomers to LibreOffice development community to improve their skills with LibreOffice coding.

You may find other instances related to C++ here:

by Hossein Nourikhah at October 16, 2025 02:05 PM

October 07, 2025

Miklos Vajna

Markdown import/export in Writer

Writer recently got a Markdown import & export filter and there were a number of improvements to that.

This work is primarily for Collabora Online, but the feature is available in desktop Writer as well.

Motivation

Ujjawal Kumar contributed a markdown import to Writer, as part of Google Summer of Code (GSoC) this summer. Mike Kaganski of Collabora also created a minimal markdown export in Writer. I looked at the feature differences between the two, and filled in various gaps in the markdown export. I also added a few general markdown import/export improvements relevant for normal Writer documents, like embedded image support.

Results so far

Here is a sample case of a document using inline code spans:

Code span: baseline

Exporting this to markdown & loading back to Writer, the code span was lost:

Code span: old result

And now it's preserved:

Code span: new result

This also works with code blocks.

Second, here is a document with lists:

Lists: baseline

Exporting this to markdown & loading back to Writer, the lists were lost:

Lists: old result

And now they are preserved:

Lists: new result

This also works with nested lists.

Third, here is a document with an image:

Image: baseline

Exporting this to markdown & loading back to Writer, the image was lost:

Image: old result

And now it's preserved:

Image: new result

This also works with embedded and anchored images.

Fourth, here is a document with a table:

Table: baseline

Exporting this to markdown & loading back to Writer, the table was lost:

Table: old result

And now it's preserved:

Table: new result

This also works with table alignments and nested tables (to the extent the markdown markup allows that).

Fifth, here is a document with a quote block:

Quote: baseline

Exporting this to markdown & loading back to Writer, the quote's paragraph indentation was lost:

Quote: old result

And now it's preserved:

Quote: new result

How is this implemented?

If you would like to know a bit more about how this works, continue reading... :-)

As usual, the high-level problem was addressed by a series of small changes. Core side:

Want to start using this?

You can get a development edition of Collabora Online 25.04 and try it out yourself right now: try the development edition. Collabora intends to continue supporting and contributing to LibreOffice, the code is merged so we expect all of this work will be available in TDF's next release too (26.2).

by Miklos Vajna at October 07, 2025 06:13 AM

September 15, 2025

Mike Kaganski

A fairy tale about poor UX enforcing vendor lock-in

Once upon a time, there was a girl, who used WhatsApp in her iPhone. She was rather active there, and collected quite some important data in the app over time. But some things in her iPhone were inconvenient; and the phone was slowly aging. So she wanted to change her phone some day.

For her birthday, a fairy, who learned somehow about the girl’s wish, presented her a new Android phone. That was a nice new phone, and the girl was so happy! She decided to move everything from the old phone to the new one immediately.

She was worrying about how to move the precious data between the devices; but she felt a huge relief, when the phone spoke: “The fairy told me how important your data is to you; and I have magic powers to handle it all. Just connect the old phone to me with a cord”. So she did.

The new phone started its work; and the girl could see how the progress bar was gradually moving to completion; but suddenly it stopped; minutes passed, but the bar was motionless. The girl was impatient to start using her new shiny device, but she knew that she needs to wait. And she waited; and waited; but after an hour passed, she noticed something horrible: the old phone was sucking the life out of the new device through the cable!

The scared girl could only hope that the process would resume, and finish before the new phone is out of power. She searched and learned, that iPhones are known for their insatiable hunger, and whenever they are connected to anything with energy, they start sucking it. She couldn’t even ask the new phone to shine less brightly to save the energy – because it wasn’t ready for such things yet. She used her wireless charger, but its powers were fewer than the hunger of iPhone, combined with the hard work done by Android. The energy level still decreased too fast.

In the end, when the hope almost vanished, the progress resumed moving! But immediately, the new phone said: “When I collected your data from your old phone, something bad happened, and I failed to collect something. I will continue, but please check later, what’s missing!”.

Only a couple of energy drops were remaining in the new phone, when it finished its task, and could be disconnected from the vampire. But the girl was terrified, when she opened WhatsApp, connected to it (using a magic SMS confirmation), only to see that all her data is lost! She tried to open WhatsApp on the old phone to check if something is still there, and saw that the app had disconnected her. So she used the SMS magic again, and – to her great relief – everything was there!

She askes WhatsApp, how to move the data; and it answered, that if she moved from iPhone to iPhone, or from Android to Android, she could use a backup; but from iPhone to Android, only the Transfer Wizard was supported. So she decided to try again.

Long story short, but this time, everything repeated exactly the same. The energy was sucked from the new phone; the wireless charger couldn’t fully compensate that; the progress stopped, and then a failure happened; the data wasn’t there. This time, when she spelled the SMS magic, she needed to wait some minutes before it worked. It was because the wise powers out there were caring and guarded her from possible villains trying to steal her data, so demanded a delay.

The girl was desperate. She was almost ready to throw the new phone away. But after some time, she decided to talk to WhatsApp again. She asked it, what to do, and got the same advice. She explained her problem, but the app was adamant. And only after a long persuasion, and even some threats, the app told her a secret, that there are third-party paid apps, that can also move her data from phone to phone!

Poor girl had no choice, and bought one such app. She launched it, and asked to transfer her data. And the helper app said: “Connect your phone to your old iPhone with a cable!”

You can imagine how sad was the girl hearing that. But she did what the app asked; and as she feared, the iPhone started to do what it always did. The progress was painfully slow, as you already guessed. Everything was almost exactly as before. But something changed this time: there was no error! The task took even longer; and when it finished, the new phone almost died; but it finished!!!

The heart of the girl was full of happiness. She wanted to open WhatsApp immediately, to know if everything is there! But first, she had to do the SMS magic. She casted the spell … and the powers replied her, that she has to wait eight hours!

I lack the ability to describe her anger, when she heard that. She came through pains, she lost her money, lots of time and nerves – and now she couldn’t do the last step just now. The time lasted incredibly slow … but eventually, she overcame that last obstacle, and was glad to learn, that this time, everything was there.

But I hear the demonic laughter of someone, who designed a process, where one insanity was piled upon another: where you can’t move the data using normal means; where you use a vampire cables; where error messages don’t allow you to fix anything by telling where the problem is; where you have to pay to have your data back (oh no, WhatsApp is not like that ransomware, just the end result is the same); where the security measures aggravate the grief, because they don’t account for problems of their own software; and overall, where the app makes its transfer so complicated, that people would rather stay with old vendor, just to not experience that again.

by mikekaganski at September 15, 2025 08:25 AM

May 28, 2025

allotropia

Collabora and allotropia merge

This deal unites the largest team of corporate Office engineers to deliver on Collabora Productivity’s mission to restore Digital Sovereignty to its users, while making Open Source Office Rock. It supercharges Collabora’s Online Office products and services portfolio with rich German language capability, deeper experience of vertical applications, new Web Assembly skills, and a wider unified partner ecosystem. Through improved product richness this sharpens the competitive edge of FLOSS Office productivity against mass-market proprietary alternatives.

CAMBRIDGE, UK – May 28th 12:00 CEST – 2025

Collabora Productivity, the world’s leading provider of collaborative Open Source Office editors have completed a merger with allotropia. Collabora has invested heavily in building Collabora Online (COOL) – a market leading, on-premise, secure, interoperable, open-source solution for document editing and collaboration deployed to any modern browser. This is complemented by desktop and mobile apps across Linux, Windows, Mac, Android, iOS and Chrome-OS. Collabora provides support subscriptions to enterprise customers worldwide via a network of hundreds of trusted partners. This is now augmented by allotropia’s partner and customer base. Together with our partners we deliver document and productivity excellence integrated with our partners product and service offerings.

allotropia’s expertise around Web Assembly combined with Collabora Online will we expect, in time, enable customer use-cases such as well as office-as-component embedding scenarios in vertical applications as well as off-line and end-to-end encrypted editing, and. This work builds on some visionary prototype funding from the Bundesministerium des Inneren (BMI) for a collaboration between the companies to enable the use of Collabora Online off-line in the browser.

Further details of product investment, and direction will be announced and decided in workshops with our key customers and partners at our annual COOL Days conference in Budapest next week where staff, community and our customer and partner-ecosystem meet, swap ideas, and hear about the latest work in our upcoming major release featuring improved performance, usability, interoperability and much more.

“Collabora is excited to welcome each member of the allotropia team today!” said Michael Meeks, CEO, Collabora Productivity, “We are excited to work together to accelerate our product development, enjoy our first COOL Days together, and plan the next features and possibilities to delight our customers.”

Collabora has invested in building a network of hundreds of partners and is approaching one hundred million docker image downloads of its document editing server software, with millions of paying users of its products, all of whom will start to benefit from this merger from today.We expect to bring the experience that allotropia has from it’s relationship with CIB around vertical desktop applications (Fachverfahren) to help partners and customers migrate their Windows & Microsoft Office based business process to easy to deploy multi-platform web applications.

“With our awesome team of engineers, and our WebAssembly know how, we can add significantly to Collabora’s powerhouse of Office engineering prowess & their product offerings”, says Thorsten Behrens, CEO of allotropia, “we’ve worked with them as partners for many years, and align perfectly in our goals to make Open Source office rock!”

allotropia’s skills in supporting and contributing to the LibreOffice code-base in Germany strengthens and unifies popular shared partner products such CIB Office and Nextcloud Office. A larger team will accelerate development and improvement of Collabora Office based products, while providing an even deeper pool of support resources to rapidly respond to customers’ needs.

Together we want to pay tribute to the vast legacy of those who have worked so hard to preserve and improve the source code that we depend on from Sun Microsystems, Oracle, SUSE, RedHat, IBM, TDF, Canonical, and many more, as well as the innumerable volunteer community contributors who make the Collabora Online and LibreOffice ecosystem so rich and interesting: thank you allowing us the privilege of working alongside you as we revolutionize the office productivity world together.All of our code is open source and available to the public on GitHub. Join the Collabora Online Community, take part in easy hacks and discussions in the forum.

Please also see our new parent company’s mirror announcement!

by allotropiasoft at May 28, 2025 10:20 AM

March 14, 2025

Ravi Dwivedi

Libreoffice Conference 2024 in Luxembourg

Last year, I attended the annual LibreOffice Conference in Luxembourg with the help of a generous travel grant by The Document Foundation (TDF). It was a three-day event from the 10th to the 12th of October 2024, with an additional day for community meetup on the 9th.

Luxembourg is a small country in Western Europe. It is insanely wealthy with high living standards. After going through an arduous visa process, I got to the country on the 8th of October. Upon arriving in Luxembourg, I took a bus to the city center, where my hotel — Park Inn — was located. I deboarded the bus at the Luxembourg Central station. Before walking towards my hotel, I stopped to click a few pictures of the beautiful station.

All the public transport in Luxembourg was free of cost. The experience of being in Luxembourg was as if I had stepped in another world. The roads had separate tracks for cycling and separate lanes for buses, along with wide footpaths. In addition, the streets were pretty neat and clean.

Luxembourg's Findel Airport. Photo by Ravi Dwivedi. Released under the CC-BY-SA 4.0.

Separate cycling tracks in Luxembourg. Photo by Ravi Dwivedi. Released under the CC-BY-SA 4.0.

A random road in Luxembourg with separate lane for buses. Photo by Ravi Dwivedi. Released under the CC-BY-SA 4.0.

The conference venue was in Belval, while I stayed in the city center. Even though my stay was 20 km from the conference venue, the commute was convenient thanks to free of cost train connections. The train rides were comfortable, smooth, and scenic, covering the distance in half an hour. Moreover, I never found the trains to be very crowded, which enabled me to always get a seat.

This is what trains look like in Luxembourg. Photo by Ravi Dwivedi. Released under the CC-BY-SA 4.0.

The train ride from my hotel to the conference venue had some scenic views like this one on the way. Photo by Ravi Dwivedi. Released under the CC-BY-SA 4.0.

A tram in Luxembourg with Luxembourg Central station in the background. Photo by Ravi Dwivedi. Released under the CC-BY-SA 4.0.

My breakfast was included in the hotel booking. The breakfast had many options. It had coffee and fruit juices, along with diverse food options. Some of the items I remember were croissant, pain au chocolat, brie (a type of cheese), scrambled eggs, boiled eggs, and various types of meat dishes. Other than this, there were fruits such as pears.

That circular pie in the center of the image is brie - a type of cheese - which I found delicious. Photo by Ravi Dwivedi. Released under the CC-BY-SA 4.0.

Pre-conference, a day was reserved for the community meetup on the 9th of October. On that day, the community members introduced themselves and their contributions to the LibreOffice project. It acted as a brainstorming session. All the attendees got a lovely conference bag, which contained a T-Shirt, a pen and a few stickers. I also met my long time collaborators Mike, Sophie and Italo from the TDF, whom I had interacted only remotely till then. Likewise, I also met TDF’s sysadmin Guilhem, who I interacted before regarding setting up my LibreOffice mirror.

Lovely swag bag. Photo by Ravi Dwivedi. Released under the CC-BY-SA 4.0.

The conference started on the 10th. There were 5 attendees from India, including me, while most of the attendees were from Europe. The talks were in English. One of the talks that stood out for me was about Luxchat — a chat service run by the Luxembourg government based on the Matrix protocol for the citizens of Luxembourg. I also liked Italo’s talk on why document formats must be freedom-respecting. On the first night, the conference took us to a nice dinner in a restaurant. It offered one more way to socialize with other attendees and explore food at the same time.

A slide from Italo's talk on document freedom. Photo by Ravi Dwivedi. Released under the CC-BY-SA 4.0.

Picture of the hall in which talks were held. Photo by Ravi Dwivedi. Released under the CC-BY-SA 4.0.

On the 11th of October, I went for a walk in the morning with Biswadeep for some sightseeing around our hotel area. As a consequence, I missed the group photo of the conference, which I wanted to be in. Anyway, we enjoyed roaming around the picturesque Luxembourg city. We also sampled a tram ride to return to our hotel.

We encountered such scenic views during our walk. Photo by Ravi Dwivedi. Released under the CC-BY-SA 4.0.

Another view of Luxembourg city area. Photo by Ravi Dwivedi. Released under the CC-BY-SA 4.0.

The conference ended on the 12th with a couple of talks. This conference gave me an opportunity to meet the global LibreOffice community, connect and share ideas. It also gave me a peek into the country of Luxembourg and its people, where I had good experience. English was widely known, and I had no issues getting by.

Thanks to all the organizers and sponsors of the conference!

March 14, 2025 04:18 PM

March 06, 2025

allotropia

ZetaJS: Combining Writer & Calc

We’ve added a great new Vue.js-3 ZetaJS demo (source)! It showcases word processing and spreadsheets inside a single web app. Calc is being used as a data source for an HTML app, filling letter templates in Writer. You can even upload custom data spreadsheets or document templates! And have you seen the nice Writer toolbar, all done with Vue.js?

We’ve also updated the existing demos, showcasing Chrome PWA support with the Ping Monitor demo – just click the little install button at the top-right of the address bar, to get the Ping Monitor “installedâ€� on your desktop!

new demo combining Writer, Calc and the complete toolbar

Talks

Meanwhile, our team was giving some great talks about our work for ZetaOffice and LibreOffice. Why not check out the recordings during your lunch break?

ZetaJS & ZetaOffice

FOSDEM LibreOffice DevRoom talks

News clippings

Look, we made some headlines! TheRegister was following up some earlier coverage about the WebAssembly port, after Thorsten gave Liam a demo during FOSDEM. Read up the full article here.

Next up

In case you’re around, meet us in two weeks at the FOSSAsia Summit in Bangkok, where Sarper Akdemir will give an update over our work. Dates are March 13-15.

If you’re based in Europe, you might instead enjoy Thorsten’s talk at the Chemnitz Linux Days (Germany) from March 22-23.

Looking forward to meet you there!

Feedback appreciated!

Please subscribe to our Newsletter or on Mastodon and let us know how you liked ZetaJS and the demos! If you’re playing with the code leave a star at the ZetaJS repo or if you hit any issues please file a report on GitHub.

Or just leave a comment and let us know directly – thanks for reading! 🙂

by Moritz Duge at March 06, 2025 10:30 AM