Monday, 6 July 2026
Ok, the title is slightly click-baity but hear me out.
So nearly 2 weeks ago, after writing a lot of code for making the font subsetting work for annotations, I found a flaw in my approach.
I was never deleting the old original font after embedding it's subset version.
So what happened is that:
- Suppose a user creates a new annotation in an empty PDF.
- The subsetted font gets embedded and used in the PDF.
- But the original font stays there, taking space.
This is actually slightly worse than when we had no subsetting at all.
So the solution should just be to delete the original font right? Nope
If we simply delete the original font, it would create the following problem:
- Suppose a PDF with two annotations pointing / using the same font.
- User edits the 1st annotation.
- 1st annotation uses the subset font, and the old font gets deleted from the PDF.
- The 2nd annotation is rendered useless.
When I realized this, I thought I would need to completely change how I do subsetting, and almost all the code I had written will go to waste.
My new idea was to never let the full version of a font to exist inside the PDF. What I mean is subsetting immediately when the font is loaded from the disk and is about to be embedded as a Font object.
But I had a meeting with my mentor Albert Astals Cid yesterday, and we decided to settle on a simpler approach. We can simply detect if the font we want to delete is:- a font we added ourselves or a pre-existing font inside the PDF.
If we added it ourselves, we can safely remove it. Otherwise, let it stay there as it might be in use by other annotations.
I implemented it today, and we have working font subsetting for freetext annotations right now (not merged).
https://gitlab.freedesktop.org/poppler/poppler/-/merge_requests/2220
A simple size experiment
Here's a simple experiment which demonstrates the impact of font subsetting on PDF file size:
Original file size: 105820 bytes = 105.82 KB
After adding an annotation with content "hello world":
Poppler without font subsetting: 504699 bytes = 504.699 KB
Poppler with font subsetting: 145806 bytes = 145.806 KB
That's like a 500% improvement...
What's next
- Right now, I only do the subsetting for ttf/otf fonts and not for ttc fonts. I need to do that.
- I need to make the subsetting work for forms as well.
Thank You
Good Night!
The last maintenance release of the 26.04 series is out, bringing the usual batch of bug fixes and workflow and stability improvements. Highlights include fixes for crashes when undoing sequence creation and recording audio without an audio device, as well as improvements to Rectangular Alpha Mask and Rotoscoping effects. This release also continues the security hardening efforts of this cycle by preventing unwanted command execution on MLT versions below 7.40.
For the full changelog continue reading on kdenlive.org.
This is a weekly update from my Google Summer of Code 2026 project with KDE, improving effect widgets in Kdenlive, a free and open source video editor.
Gradient widget: switched to Qt-Color-Widgets
Julius Künzel suggested last week that the Gradient widget be built with an eye toward upstreaming to KDE Frameworks, pointing to Qt-Color-Widgets's GradientEditor class as a reference. It's already vendored inside MLT's Glaxnimate module, so this week I wired it in directly instead of maintaining a fully custom-painted widget.
The vendored color_widgets::GradientEditor gives a native-styled gradient bar with checkerboard alpha preview, drag-and-drop stop reordering, and its own color dialog, all for free.
Fixing undo-stack behavior
The library only emits stopsChanged on completed actions (mouse release, menu add/remove, dialog accept), not per-pixel during drags. That meant two bugs: every plain click created a junk undo-stack entry, and drags had no live preview on the monitor at all.
Fixed with three pieces:
commitStops()emitsvalueChanged(..., true)only when the serialized value actually changed- An
eventFilteremitsvalueChanged(..., false)during drag moves, for live monitor preview - An echo-guard in
slotRefresh()ignores the model value coming back from our own emit; without it, the synchronous refresh resets the editor's selection and kills the drag mid-motion
32-stop cap
MLT's gradientmap filter supports stop.1 through stop.32. The library has no pre-add hook to reject a 33rd stop, so commitStops() rejects after the fact: the just-added stop gets removed and the editor reset under a signal blocker, with no undo entry created. gradientStopsFromString() also truncates at 32 on load, so an over-long saved value can't smuggle in extra stops. Exposed as GradientEditWidget::MaxStops.
Build: configurable vendor path
The path to Qt-Color-Widgets was previously hardcoded assuming a sibling MLT checkout. Replaced with a KDENLIVE_QTCOLORWIDGETS_PATH CMake cache variable; same default, overridable with -D, and a missing path is now a fatal configure error instead of a silent skip that only surfaced at compile time.
Tests
gradienteditwidgettest.cpp now covers a full widget-interaction path with a real timeline document and synthesized mouse events: a plain click produces zero undo entries, a drag produces two preview emissions plus exactly one committed undo entry, and adding a 33rd stop is rejected with the editor staying at 32. All 5 test cases pass, 62 assertions.
What's next
Four commits are done locally (gradient widget + CMake + tests, plus two unrelated Qt 6.10 compat fixes found along the way), but nothing's pushed yet. Waiting on Jean-Baptiste to confirm this is the direction to commit to before opening an MR.
Sunday, 5 July 2026
Make sure you commit anything you want to end up in the KDE Gear 26.08 releases to them
Next Dates:
- July 16, 2026, 23:59 UTC: 26.08 Freeze and Beta (26.07.80) tarball creation
- July 17 2026: 26.08 Beta (26.07.80) release
- July 30, 2026, 23:59 UTC: 26.08 RC (26.07.90) tarball creation
- July 31, 2026: 26.08 RC (26.07.90) Release
- August 13, 2026, 23:59 UTC: 26.08 tarball creation
- August 14, 2026: 26.08 packages released to packagers
- August 20, 2026: 26.08 Release
After a long development cycle, we are thrilled to announce the official release of Rolisteam v1.10. This version brings a wave of brand-new tools for Game Masters, a major technical overhaul of the whole project, and a much healthier codebase for the years to come.
Download it now: https://rolisteam.org/02_download/
What’s new
Mind maps
Rolisteam now embeds a full mind-map editor, letting you sketch out plots, NPC relationships, or campaign notes visually, right next to your other campaign tools.
Watch it in action: https://youtu.be/3dkokPLlre8
Documentation: https://doc.rolisteam.org/21_mindmap/
3D dice, powered by a physics engine
Rolling dice has never been more satisfying. The new 3D dice roller uses a real physics engine to simulate dice tumbling and bouncing, giving your rolls a tactile, tabletop feel.
Watch it in action: https://youtu.be/d18iqq4eNFw
Documentation: https://doc.rolisteam.org/34_dice3d/
A new interface for instant messaging
The instant messaging panel has been redesigned from the ground up for better readability and a smoother chat experience during your sessions.
Watch it in action: https://youtu.be/t8iAKKfH2E4
Documentation: https://doc.rolisteam.org/07_chat/
Antagonist panel
A brand-new Antagonist panel lets you list and manage all the NPCs of your campaign in one place, with search and filtering options to quickly find the antagonist you need, right when you need it.
Watch it in action: https://youtu.be/CKDvFuruCwE
Documentation: https://doc.rolisteam.org/07_antagonist/
A new connection profile selection dialog
Choosing and managing your connection profiles is now easier thanks to a completely reworked selection dialog.
Watch it in action: https://youtu.be/BJ0_8XG9NQc
Documentation: https://doc.rolisteam.org/03_firststeps/
Improvements
Battle maps
- New, streamlined toolbar for the vectorial map (VMap).
- Full light and shadow management, including support for multiple light sources, adjustable light radius, and network synchronization of lights.
- New shadow casting from walls, computed via raycasting, for more realistic fog-of-war and line-of-sight.
- Various improvements to zoom, item resizing, drag-and-drop from the media panel, and undo/redo reliability.
Watch it in action: https://youtu.be/RtnZxa5HjAQ
Documentation: https://doc.rolisteam.org/05_vectorialmap/
Character sheet
- Reworked tables for a more flexible and reliable layout.
- Dice commands can now be written directly in the sheet’s code.
- New buttons to navigate to the next/previous page of a multi-page sheet.
- Automatic sharing
- RCSE: Auto filler dialog
- RCSE: New way to generate code
Watch it in action: https://youtu.be/343vYAqrui8
Documentation: https://doc.rolisteam.org/06_charactersheet/
PDF viewer
The built-in PDF viewer, used for sharing handouts and rulebook excerpts with your players, has also received its share of polish this release.
Watch it in action: https://youtu.be/rRrQwUmLUp0
Documentation: https://doc.rolisteam.org/20_pdf/
Translations
Thanks to the KDE translation teams, Rolisteam is now available in even more languages, with existing translations kept up to date release after release.
Refactoring
Under the hood, this release is the result of a massive modernization effort:
- Port to Qt 6 — the entire codebase now runs on the Qt 6 framework.
- Build system switched to CMake, replacing the previous qmake-based setup.
- Websites migrated from self-hosting to KDE’s infrastructure.
- Websites migrated from the Pelican generator to Hugo.
- Source hosting moved from GitHub to KDE’s GitLab.
Quality
Code quality and long-term maintainability were a major focus of this release:
- 70% of the code is now covered by unit tests.
- An extensive suite of validation tests now runs continuously to catch regressions early.
- Dedicated test coverage was added for the mind-map, the character sheet, translations, and the network layer.
- Continuous integration now tracks code coverage on every change.
A huge thank you
This release wouldn’t have been possible without the community, the KDE translation teams, and everyone who reported bugs, tested pre-releases, and contributed code. Thank you!
Download Rolisteam v1.10 now: https://rolisteam.org/02_download/
Saturday, 4 July 2026
Welcome to a new issue of This Week in Plasma!
This week Plasma 6.7 received a few more stabilization bug-fixes while attention turned towards the upcoming 6.8 release. Some exciting changes are in progress, and a few have already merged, including highly visible improvements to some common animations.
Check it out!
Notable new features
Plasma 6.8
Updated the Emoji Selector app to version 17 of the Unicode emoji standard, giving you access to derpy new emojis like “️”. (Jens Jerosch, plasma-desktop MR #3849)

Notable UI improvements
Plasma 6.7.2
Moved the global “Move Mouse to Focus” and “Move Mouse to Center” actions out of the Zoom effect, so they still work even if you’ve globally disabled the Zoom effect. (Vlad Zahorodnii, KDE Bugzilla #522070)
Plasma 6.7.3
Made KRunner’s Bookmarks search provider return results for 2-character queries (so it will match “Qt”, for example), and use fewer system resources. (Kai Uwe Broulik, plasma-workspace MR #6764)
The Clipboard widget’s Actions Configuration page now uses better internal margins for the content. (Levi Leal, plasma-workspace MR #6779)
Plasma 6.8
The “Bouncing app icon” launch feedback style now uses a more visually pleasing animation with a better physics model, a more appropriate easing curve, and a higher frame-rate. (The Entropyist, kwin MR #9487)
The new sliding animation for notifications now uses a more natural easing curve, so it looks even better than it already did! (Thomas Duckworth, KDE Bugzilla #522276)
There’s no longer a secret keyboard shortcut (previously Meta+Ctrl+x) that turns on clipboard actions. This was easy to press by accident, and would then make weird popups appear when you copied URLs. (Tobias Fella, plasma-workspace MR #6773)
The Digital Clock widget now requests “tabular numerals”, which are monospaced digits supported by some fonts. The use of these numerals prevents the clock from changing its width as time passed in a few edge cases where the existing code to prevent that wasn’t good enough. (Christoph Wolk, plasma-workspace MR #6797)
Discover’s old “CD and DVD” category is now named “Disc Burning”, because that’s what apps expect it to be, which explains why it only contained disc burning apps. (Nate Graham, discover MR #1350)
And before you ask: no, we couldn’t instead change the category to include all apps related to CDs and DVDs, because it’s a standard category governed by a FreeDesktop spec, and to do that, we’d need a new one.
Info Center’s Memory page now shows a busy indicator if it takes more than a moment to load. (Kai Uwe Broulik, kinfocenter MR #305)
You can now more easily find the System Settings page responsible for the “press and hold a key to see alternative characters” popup, to turn it on or off or change the delay before it appears. (Kristen McWilliam, plasma-keyboard MR #154)
The DrKonqi crash reporting wizard now tells you when it’s safe to close the window. (Antti Savolainen, drkonqi MR #397)
Notable bug fixes
Plasma 6.6.6
Hardened the Task Manager widget against maliciously-crafted .desktop files for apps. (David Edmundson, plasma-workspace MR #6817)
Hardened the ksystemstats_intel_helper process against path traversal attacks. (Matthias Gerstner, ksystemstats MR #141)
Plasma 6.7.2
Fixed a recent regression that made certain screens incorrectly notify about being disconnected and re-connected in a loop after they went to sleep. (Xaver Hugl, KDE Bugzilla #521826)
Fixed a recent regression that produced corrupted visuals on some rotated screens and with some older AMD GPUs. (Xaver Hugl, KDE Bugzilla #521878 and KDE Bugzilla #521764)
Fixed a recent regression that broke the ability to drag desktop files and folders between screens. (Marco Martin, KDE Bugzilla #521713)
Fixed a recent regression that made SDR content look a bit de-saturated for some screens while in HDR mode. (Xaver Hugl, KDE Bugzilla #521759)
Fixed a recent regression that made certain ICC profiles show the wrong colors. (Xaver Hugl, KDE Bugzilla #522301)
Fixed a recent regression that made KWin lag and hang when playing certain poorly-optimized games via Proton. (Vlad Zahorodnii, KDE Bugzilla #522005)
The implementation of the new “press and hold for alternative characters” feature now prioritizes compatibility for apps, fixing a massive number of bugs. (Kristen McWilliam, plasma-keyboard MR #152)
The new Vietnamese calendar now shows the correct dates. (Trần Nam Tuấn, KDE Bugzilla #522099)
The new feature to show how much earlier or later a time zone is than your current one now correctly calculates the value for time zones with a half-hour offset that are earlier than your local time zone. Time is hard. (Michael Kohl, KDE Bugzilla #522037)
Forcing the use of the software pointer no longer makes it disappear when a window pushes a panel in “Dodge Windows” mode into its hidden state. (Xaver Hugl, KDE Bugzilla #521953)
The Mouse page in System Settings no longer shows layout glitches in X11. (Marco Martin, KDE Bugzilla #521992)
Text on the Networks widget’s Details tab can no longer visually overflow when it’s really long. (Manuel Alcaraz, KDE Bugzilla #522333)
Plasma 6.7.3
The “Kameleon” system service is now disabled by default, which prevents it from applying a color to your keyboard’s backlit keys even if the feature to apply colors to RGB keyboard backlighting is disabled. The context here is that we added support for the Steam Machine’s LED strip, and this also made it work for many keyboards, but exposed a pre-existing bug. (Oliver Beard, KDE Bugzilla #521793)
Spectacle no longer includes the tooltip showing image dimensions in the final screenshot if you accept a rectangular region by double-clicking it. (Noah Davis, KDE Bugzilla #513715)
Plasma 6.8
Fixed the most common crash in Plasma, which could happen once in a while when using multiple screens. (Marco Martin, KDE Bugzilla #500044)
Minimizing the window of an RDP client no longer stops the video stream. (Shouvik Kar, KDE Bugzilla #497765)
Frameworks 6.28
XWayland-using apps no longer start to behave in a couple of weird and quirky ways after XWayland itself crashes and restarts. (Vlad Zahorodnii, kwindowsystem MR #220)
Notable in performance & technical
Plasma 6.7.3
Fixed a recent performance regression that increased KWin’s CPU usage on some Intel systems using atomic mode-setting. (Xaver Hugl, KDE Bugzilla #522075)
Plasma 6.8
Implemented support for version 1.6 of the Emulated Input system. (David Edmundson, kwin MR #9112)
KWin now internally only uses OpenGL ES, which ensures that it will always be working since everyone will be using it — at least until Vulkan support is farther along. OpenGL ES is necessary for some old GPUs and turns out to be sufficient for everything KWin needs anyway, so we don’t anticipate any downsides from this change. (Xaver Hugl, kwin MR #9488)
How you can help
KDE has become important in the world, and your time and contributions have helped us get there. As we grow, we need your support to keep KDE sustainable.
Would you like to help put together this weekly report? Introduce yourself in the Matrix room and join the team!
Beyond that, you can help KDE by directly getting involved in any other projects. Donating time is actually more impactful than donating money. Each contributor makes a huge difference in KDE — you are not a number or a cog in a machine! You don’t have to be a programmer, either; many other opportunities exist.
You can also help out by making a donation! This helps cover operational costs, salaries, travel expenses for contributors, and in general just keeps KDE bringing Free Software to the world.
To get a new Plasma feature or a bug fix mentioned here
Push a commit to the relevant merge request on invent.kde.org.
Friday, 3 July 2026
Tellico 4.2.1 is available, with some improvements and bug fixes.
Improvements:
- Added user-defined data fetch argument (Bug 516055).
- Updated Google Scholar and Colnect data sources.
- Updated Google Books data source (Bug 522095).
- Updated external data source to allow termination by user (Bug 516057).
- Updated to allow multiple ISBN values (Bug 521157).
- Updated Album template to hide empty track tables and use loan information.
- Increased minimum image reader memory limit.
Bug Fixes:
- Fixed bug with exporting linked images (Bug 522094).
- Fixed bug with parsing field names with emoji (Bug 521148).
Let’s go for my web review for the week 2026-27.
What happened to the fight for the Internet?
Tags: tech, politics, surveillance
Excellent piece, where are the netizens who should be fighting back those bills? Looks like we became very complacent and passivity reigns this time around. Didn’t think it was related to the pervasive centralisation already in place… but indeed that might be a strong contributing factor.
https://dustycloud.org/blog/what-happened-to-the-fight-for-the-internet/
Age verification is just a precursor to attribution of speech
Tags: tech, politics, law, surveillance
Definitely this, we can’t trust this kind of mechanism for what they open the door to.
https://nonogra.ph/age-verification-is-just-a-precursor-to-attribution-of-speech-06-29-2026
my review of uruky
Tags: tech, web, search
Several times I bump into articles praising this one. I’ve been test driving it a bit, the experience is still a bit bare but it’s clearly maturing. Definitely an option to keep an eye on in my opinion.
https://blog.sulimans.space/my-review-of-uruky/
Zuckerberg’s increasingly bizarre war on whistleblowers
Tags: tech, social-media, facebook, ethics
There might be a method behind the madness of the thin skinned autocrat heading Meta… Unfortunately it probably works.
https://pluralistic.net/2026/06/27/zuckerstreisand-2/
Chatbots vs. Ozone
Tags: tech, geospatial, ai, machine-learning, gpt, economics, ecology
More reasons why the whole “data centers in space idea” is stupidly dangerous and likely unreachable.
https://blog.dshr.org/2026/05/chatbots-vs-ozone.html?m=1
Claude Code Is Steganographically Marking Requests
Tags: tech, ai, machine-learning, gpt, copilot, trust, security, privacy
You sure you can trust those systems? It’s proprietary software and they’re clearly on a slippery slop. For something so security sensitive this is concerning.
https://thereallo.dev/blog/claude-code-prompt-steganography
Prompt Injection as Role Confusion
Tags: tech, ai, machine-learning, gpt, cognition, security, safety
Interesting paper (go to the full one for all the details) which shows that with the current architecture it’s really hard if not impossible to make safe systems with LLMs. This gives interesting insights in the weird form of proto-cognition those models exhibit.
https://role-confusion.github.io/
Text Editor: Data Structures
Tags: tech, text, editor, design
Neat introduction to the right data structures to use when making a text editor.
https://www.averylaird.com/programming/the%20text%20editor/2017/09/30/the-piece-table.html
Engineering High-Performance Parsers with Data-Oriented Design
Tags: tech, data-oriented, architecture, performance, parsing
Interesting article applying data oriented design to parsing tasks. This is really a good approach for performance.
https://www.arshad.fyi/writings/engineering-high-performance-parsers
Data Access Patterns That Makes Your CPU Really Angry
Tags: tech, cpu, memory, hardware, performance
Interesting experiment on how to totally break the performance of memory accesses. This gives good insights on the whole chain works.
https://blog.weineng.me/posts/slowest_add/
The Physics of Memory
Tags: tech, javascript, memory, data-oriented, performance
Unsurprisingly cache locality is a very important factor. What’s interesting here is that it still applies to a language like Javascript where you’d expect to not have enough control on the memory layout to reap any benefits.
https://www.dmurph.com/posts/2026/06/ecs_vs_oop_benchmark/ecs_vs_oop_benchmark.html
High-performance Rust: Understanding and eliminating memory fragmentation
Tags: tech, rust, memory, embedded, performance
Interesting Rust options to limit the amount of heap allocations if you’re constrained by memory or for performance reasons.
https://kerkour.com/rust-high-performance-memory-fragmentation-allocations
Hobby’s algorithm for aesthetic Bézier splines
Tags: tech, graphics, mathematics
Interested in splines? This is a gentle introduction which points to further resources if you want to implement them.
https://www.jakelow.com/blog/hobby-curves#fn-2
What To Learn To Be A Real Time Graphics Programmer
Tags: tech, 3d, shader, mathematics, graphics
Wondering what to learn to get into graphics programming? This is a nice list.
https://blog.demofox.org/2026/07/01/what-to-learn-to-be-a-graphics-programmer/
Announcing Box3D
Tags: tech, physics, simulation, 3d
Exciting! This looks like a neat 3D physics engine.
https://box2d.org/posts/2026/06/announcing-box3d/
The essence of architectural work
Tags: tech, architecture, complexity
This is an ongoing series, but there are good insights about software architecture work in the first few articles. Shows quite well the important tradeoffs and the usual traps.
https://www.ufried.com/blog/essence_of_architecture_1/
Every bottlenose dolphin invents a unique whistle that becomes its name
Tags: biology, nature, cognition
So using personal names is not an inherently human trait, this is confirmed through research now. Before their were signs and suspicions, but now the trail of evidences is strong.
Notes from a burning Paris
Tags: climate, ecology
This is what things will look like in the coming years. Only probably worse, and for more and more people.
https://sarahwilson.substack.com/p/notes-from-a-burning-paris
Bye for now!





