Tangram is a GNOME desktop application written in JavaScript (GJS) that functions as a specialized browser for managing web applications as persistent, sandboxed tabs. It uses GTK4, Libadwaita, and WebKitGTK to render each tab independently, with per-tab settings (name, URL, user agent, notification priority) stored via GSettings. The application provides a tab overview (Adw.TabOverview), navigation controls, and integrates with the GNOME notification system. It is packaged as a Flatpak and supports translations via Weblate. The codebase is well-structured, modular, and follows modern GNOME development practices, with unit tests for URL utilities and web app metadata extraction.
Foliate is a desktop e-book reader for GNOME/Linux, built with GTK4, Libadwaita, and GJS (GNOME JavaScript). It supports EPUB, Mobipocket, Kindle, FB2, CBZ, and PDF formats, using WebKitGTK to render book content via a custom JavaScript rendering engine (foliate-js). The application provides a full-featured reading experience with paginated and scrolled modes, customizable fonts and themes, annotations (highlights, notes, bookmarks), text-to-speech via Speech Dispatcher, OPDS catalog browsing, and dictionary/Wikipedia lookups. Architecture: The main entry point is src/main.js, which initializes the GJS application and loads the GResource-bundled source files. The core UI is defined in src/app.js (window creation, file handling) and src/book-viewer.js (reading view with sidebar, search, navbar, TTS). The library view (src/library.js) manages book collections and OPDS integration. Reading state (annotations, bookmarks, progress) is persisted per-book as JSON files in the user's data directory. The rendering pipeline lives in the WebView: src/reader/reader.js handles content display, CSS injection, and footnotes, while the foliate-js submodule parses e-book formats into a pageable model. External dependencies: GNOME platform (GTK 4.12, Libadwaita 1.8, WebKitGTK 6.0, GJS 1.82), Speech Dispatcher for TTS, Tracker (optional) for file indexing, and third-party APIs (Wiktionary, Wikipedia, Google Translate) for lookup tools. The build system uses Meson, with Flatpak and Snap packaging provided. Internationalization across 30+ languages is maintained via gettext PO files. Data flows: User opens a file → book is parsed by foliate-js into a structured document model → rendered in WebView → user interactions (scroll, search, annotate, bookmark) are communicated back to GJS via the WebView's async RPC pattern (exec/iter/provide) → state is persisted as JSON files. OPDS catalogs are fetched via HTTP and rendered in a separate WebView frontend (src/opds/main.html).
Tiling Shell is a GNOME Shell extension that provides advanced, customizable window tiling and management. It replaces the default window snapping with a flexible layout system where users can define custom tile arrangements (via a built-in editor or JSON files), use snap assist for precise placement, enable edge tiling with multiple modes (default, adaptive, granular), and auto-tile new windows. The extension also adds a panel indicator, keyboard shortcuts, window border customization with dynamic corner radius detection, and a window suggestions feature that proposes layouts after tiling. The architecture follows a manager pattern: per-monitor subsystems (TilingManager, ResizeManager, WindowBorderManager, RaiseTogetherManager) are created and destroyed by the main extension lifecycle. Communication is event-driven via GObject signals, with a central GlobalState singleton and a Settings wrapper around GSettings. The codebase is written in TypeScript, compiled for GJS, and supports GNOME Shell versions 42–50 on both X11 and Wayland. It includes a complex build pipeline that produces separate outputs for modern and legacy GNOME versions, along with full internationalization (10+ languages). While the extension is actively maintained and feature-rich, it relies heavily on private GNOME Shell APIs and contains version-specific workarounds, which introduces maintenance risk as the shell evolves.