#213 Fixed Rules

August 22, 2025 • 6 News • Curated by Felix

Update on what happened across the GNOME project in the week from August 15 to August 22.

GNOME Core Apps and Libraries

Glycin

Sandboxed and extendable image loading and editing.

Sophie (she/her) announces

Glycin 2.0.beta.3 has been released. Among the important changes are fixes for thumbnailers not working in certain configurations, loading speed for JPEG XL having been dramatically improved, fixed sandbox rules that broke image loading on some systems, and fixed editing for some JPEG images saved in progressive mode.

GNOME Circle Apps and Libraries

Déjà Dup Backups

A simple backup tool.

Michael Terry announces

Déjà Dup 49.beta was released! It just fixes a few small bugs and uses the new libadwaita shortcuts dialog.

But if you haven’t tried the 49.x branch yet, it has a big UI refactor and adds file-manager-based restore for Restic backups.

Read more details and install instructions in the previous 49.alpha announcement. Thanks for any testing you can do before this reaches the masses!

Third Party Projects

Mir Sobhan announces

We forked the TWIG website and forged it into a “good first issue” tracker. It catches all GNOME-related projects on GitHub and GNOME GitLab to show issues labeled “good first issue” or “Newcomers.” This can help newcomers find places to contribute including myself.

Website: https://ggfi.mirsobhan.ir Repo: https://gitlab.gnome.org/misano/goodfirstissue

Džeremi says

Chronograph gets a BIG new 4.0 update!

What is Chronograph?

Chronograph is an app for syncing lyrics, making them display like karaoke in supported players. It comes with a beautiful GTK4 + LibAdwaita interface and includes a built-in metadata editor, so you can manage your music library along with syncing lyrics. Default LRC files can be published to the large lyrics database LRClib.net, which is widely used by many open-source players to fetch lyrics. Until now, Chronograph supported only line-by-line lyrics, which was enough for most cases since standard LRC is the most common format. But times change…

Word-by-Word support!

Starting August 24th, Chronograph will gain support for Word-by-Word syncing. This feature uses the eLRC format (also known as LRC A2 or Enchanted LRC). In eLRC, each word has its own timestamp, allowing players that support it to animate lyrics word-by-word, giving you a true karaoke experience. And this is just the beginning: future updates will also bring support for TTML (Timed Text Markup Language).

Final notes

I hope you’ll enjoy using the latest version of Chronograph, and together we can spread awareness of eLRC to the wider community. Sync lyrics of your loved songs! ♥️

Nathan Perlman announces

Rewaita — Give Adwaita some flavour

Hi there, a few weeks ago I released Rewaita, a spiritual successor to Gradience. With it, you can recolour GTK4/Adwaita apps to popular colour schemes. That’s where the name comes from ~ Re(colour Ad)waita.

As of v1.0.4, released this week, you can create your own custom colour palettes if the ones we provide don’t suit you, and you can also change the window controls to be either coloured or MacOS-styled.

You can find it on Flathub, but also in the AUR and NIXPKGS (the Nix Package is still under review).

Rewaita is also going through rapid development, so any help would be appreciated, or just leave us a star :). In particular, GTK3 and Cinnamon support are next up on the chopping block.

Miscellaneous

JumpLink says

ts-for-gir - TypeScript bindings for GObject Introspection

This week we’ve released a major improvement for GObject interface implementation: Virtual Interface Generation.

Instead of having to implement all methods of a GObject interface, developers can now only implement the virtual methods (vfunc_*). This matches the actual GObject-Introspection pattern and makes interface implementation much cleaner.

Before (implement all methods):

class CustomPaintable implements Gdk.Paintable {
  // Implement all methods manually
  get_current_image(): Gdk.Paintable { ... }
  get_flags(): Gdk.PaintableFlags { ... }
  get_intrinsic_width(): number { ... }
  // ... and many more
}

After (only virtual methods):

class CustomPaintable implements Gdk.Paintable.Interface {
  // Declare for TypeScript compatibility
  declare get_current_image: Gdk.Paintable["get_current_image"];
  declare get_flags: Gdk.Paintable["get_flags"];
  
  // Only implement virtual methods
  vfunc_get_current_image(): Gdk.Paintable { ... }
  vfunc_get_flags(): Gdk.PaintableFlags { ... }
}

We’ve created a comprehensive example: https://github.com/gjsify/ts-for-gir/tree/main/examples/virtual-interface-test

This shows both Gio.ListModel and Gdk.Paintable implementations using the new pattern.

Release: v4.0.0-beta.35 and v4.0.0-beta.36

Note: Last week we also released v4.0.0-beta.34 which introduced Advanced Variant Types by default, completing the gi.ts integration with enhanced TypeScript support for GLib.Variant.deepUnpack() and better type inference for GObject patterns.

That’s all for this week!

See you next week, and be sure to stop by #thisweek:gnome.org with updates on your own projects!

You have news to share?

“This Week in GNOME” is available to the entire GNOME community. No matter if core, circle or third-party project - we are interested in all news! Simply share your news in our Matrix Room!

Send Message