Skip to content
CAI
Software that uses CAICheck a score

dahliaOS/pangolin_desktop

58.4

Adequate · 19 September 2026

13.8k

lines of production code

Dart

primary language

1

measurement over time

CAI band scale
CAI lens gauges

What this system is

Pangolin Desktop is a cross-platform desktop environment shell built with Flutter, designed to run on Linux, macOS, and Windows. It provides a comprehensive user interface featuring a taskbar, dynamic wallpaper, and a suite of system overlays for application launching, search, notifications, and quick settings. The system integrates deeply with the host OS via D-Bus and native services to manage power, windowing, and tray icons, while maintaining a modular service-based architecture for core functionality.

How it got here

2019–2020 — Pangolin Desktop initial scaffolding

10 changes.

This period established the foundational structure for the Pangolin Desktop project, including project configuration, documentation, and dependency management. It implemented the core service-based architecture and initialized the application shell with dynamic theming and locale support. Additionally, it added native build configurations and runner targets for macOS, Linux, and Windows, alongside a web entry point for Progressive Web App support.

2021 — Pangolin shell implementation

18 changes.

This period focused on developing the Pangolin desktop environment, introducing a comprehensive service-based architecture for core system functions like window management, power, and notifications. The work established a new visual identity with dedicated overlays for the taskbar, quick settings, and app launcher, alongside modern UI components such as frosted glass effects and dynamic wallpaper loading.

2022–2023 — system integration and notification infrastructure

6 changes.

This period focused on establishing deep system integration by implementing D-Bus clients for power profiles, status notifier items, and notifications. It also introduced a comprehensive notification system, including shell-side UI components for displaying, queuing, and interacting with system alerts.

Features

Add D-Bus service clients for power profiles, status notifier, and notifications

The \lib/services/dbus\ directory now includes generated D-Bus client code and high-level wrappers for interacting with system services. This adds support for the \net.hadess.PowerProfiles\ daemon, allowing the application to monitor and switch system power profiles (power-saver, balanced, performance) via a polling client. It also introduces a \StatusNotifierItem\ client that connects to the KDE StatusNotifierWatcher to expose tray icons, tooltips, and context menus, alongside the underlying \DBusMenu\ implementation for rendering those menus. Additionally, a base \Notifications\ object is added to support the \org.freedesktop.Notifications\ specification, laying the groundwork for system notification integration.

lib/services/dbus · high confidence

Add DBusImageWidget and DBusMenuEntry widgets for context menu rendering

New Flutter widgets have been added to the \lib/widgets/dbus\ directory to support the application's new context menu implementation. \DBusImageWidget\ handles the rendering of images received via D-Bus, including decoding raw pixel data, handling PNG streams, and resolving icon names to XDG icons or file resources. \DBusMenuEntry\ renders individual menu items, supporting separators, icons, labels, and toggle states (checkmarks and radio buttons) by interacting with the underlying D-Bus menu service.

lib/widgets/dbus · high confidence

Added Linux Flutter build configuration and plugin registration

The Linux build system now includes the necessary Flutter infrastructure files to compile and link the application. This adds the CMake configuration (\CMakeLists.txt\) to locate the Flutter Linux library and GTK dependencies, and generates the plugin registrant code which explicitly registers the \url\_launcher\_linux\ plugin for use on the Linux platform.

linux/flutter · high confidence

Added Windows desktop build support

The application now includes the necessary CMake configuration and C++ runner code to build and run on Windows. This addition enables the desktop experience by integrating the Flutter engine, handling window creation with DPI awareness, and registering the url\_launcher\_windows plugin.

windows · high confidence

Added web entry point and PWA manifest for Pangolin Desktop

The web location now includes the primary \index.html\ entry point and \manifest.json\ file, enabling the Flutter-based Pangolin Desktop to be served as a web application. The HTML file configures the base href, sets SEO and Open Graph meta tags (including the site name 'dahliaOS' and description), and initializes the Flutter engine. The manifest defines the app as a Progressive Web App (PWA) with a fullscreen display mode, theme color, and specific icon assets for various screen sizes and maskable purposes.

web · high confidence

Centralized system action management for power and account controls

A new ActionManager utility has been introduced to centralize system-level actions. This component now handles the logic for displaying the power and account overlays, launching the Settings application, and executing power commands (power off, reboot) on Linux systems, providing a single entry point for these shell interactions.

_lib/utils/action\manager · high confidence

Initial macOS desktop support for Pangolin

This change adds the foundational macOS Runner target for the Pangolin desktop application. It introduces the necessary Xcode configuration files (xcconfig) to manage build settings and warnings, defines the application metadata in Info.plist and AppInfo.xconfig, and implements the native macOS entry points (AppDelegate and MainFlutterWindow) to host the Flutter engine. Additionally, it configures the app's entitlements, enabling network access and JIT execution, while maintaining the default macOS app-sandboxing security model for both debug and release builds.

macos/Runner · high confidence

Initial macOS project configuration added

The macOS build configuration for the Runner target has been established, introducing the standard Xcode project structure required to build the application. This includes the project file (project.pbxproj) defining the build targets, source files (such as AppDelegate.swift and MainFlutterWindow.swift), resources (Assets.xcassets, MainMenu.xib), and configuration files (xcconfig, entitlements). Additionally, the workspace settings (IDEWorkspaceChecks.plist) and the shared scheme (Runner.xcscheme) for building, testing, and launching the app in Xcode have been created.

macos/Runner.xcodeproj · high confidence

Initial project scaffolding and documentation for Pangolin Desktop

This change establishes the foundational structure for the Pangolin Desktop project by adding essential configuration and documentation files. It introduces a \.gitignore\ to exclude build artifacts and IDE-specific files, a \Makefile\ to streamline development tasks like linting, formatting, and building for Linux, Windows, and macOS, and an \analysis\_options.yaml\ to enforce strict Dart/Flutter linting rules. Additionally, it adds a \crowdin.yml\ for localization management, a \CODE\_OF\_CONDUCT.md\ to define community standards, a \CONTRIBUTING.md\ guide for developers, and an \Apache 2.0 LICENSE\. The \README.md\ is also updated to provide a comprehensive overview, including badges, screenshots, and instructions for setting up the development environment.

(repo-wide) · high confidence

Introduce Application model with web support and launch logic

A new Application model has been added to define application metadata and behavior, including fields for name, version, description, category, and a boolean flag indicating whether the application supports web execution. The model includes a launch method that triggers the application service to start the app by its package name, providing a centralized way to manage application launching within the shell.

lib/utils/data/models · high confidence

Introduce shell-side notification display and interaction

Users can now see and interact with notifications directly within the shell overlay. This change adds the UI components for rendering individual notification cards (including app icons, summaries, bodies, and action buttons) and a wrapper that handles slide-in animations, auto-dismissal timers, and swipe-to-dismiss gestures. A listener mixin is also provided to keep the UI in sync with the notification service events (add, remove, replace).

lib/components/overlays/notifications/widgets · high confidence

Introduce shell-side notification shelf and queue

Adds a new notification overlay component that displays incoming notifications in a slide-in shelf at the bottom-right of the screen. The implementation includes a queue mechanism that temporarily holds notifications (up to 5) with a 5-second auto-dismiss timer, and integrates with the shell service to manage the overlay's visibility state and dismiss incoming toasts when the main notification shelf is opened.

lib/components/overlays/notifications · high confidence

Introduction of a modular service architecture for core system functions

The system now uses a dedicated service layer in lib/services to manage core capabilities, replacing previous ad-hoc implementations. This includes an ApplicationService for discovering and launching desktop applications on Linux, an IconService for optimized icon lookup, a NotificationService for handling system notifications via DBus, a PowerService for battery and power profile management, a TrayService for system tray integration, and a ShellService for managing UI overlays. Additional services provide localized search, date/time formatting, and network management, creating a unified foundation for shell features.

lib/services · high confidence

New AcrylicLayer widget for frosted glass UI effects

A new \AcrylicLayer\ widget has been added to the library, enabling a frosted glass visual effect for UI components. This widget applies a background blur and an optional noise texture overlay, with configurable opacity and distinct rendering logic for dark and light modes. It allows developers to easily integrate this aesthetic into their applications by wrapping content within the layer.

lib/widgets/acrylic · high confidence

New Quick Settings sub-pages for account, language, network, and theme customization

The Quick Settings overlay now includes dedicated pages for managing user accounts, system language, network connections, and theme/accent colors. Users can select a display language with a visible translation progress percentage, toggle system dark mode, and choose from a grid of accent colors, all integrated into the existing Quick Settings navigation flow.

_lib/components/overlays/quick\settings/pages · high confidence

New system overlays for account, power, overview, tray, and keyboard

The system now includes dedicated overlay components for account management, power actions, desktop overview, system tray, and an on-screen keyboard. The Account and Power overlays provide user-facing menus for signing out, locking, changing settings, powering off, sleeping, and restarting, utilizing the new SurfaceLayer styling. The Overview overlay displays a desktop management interface with wallpaper previews and a button to create new desktops. The Tray overlay renders system status icons in a grid layout, integrating with D-Bus for live updates and context menus. Additionally, a new on-screen keyboard is available for input, and a Welcome overlay guides new users through initial setup.

lib/components/overlays · high confidence

New utility extensions for localization, theming, and notifications

A new \extensions.dart\ file has been added to \lib/utils/extensions\ to provide helper methods for several core types. For desktop integration, \DesktopEntry\ objects can now retrieve localized names, comments, generic names, and keywords by leveraging the \LangPacksService\ for translation lookups. Theming is improved by adding a \label\ property to \BuiltinColor\ that returns the user-facing string for each color. Additionally, \NotificationService\ gains a \getNotification\ method to retrieve a specific notification by ID, and \LocalizedResource\ gains a \resolve\ method to map Flutter locales to the system's locale format.

lib/utils/extensions · high confidence

New utility libraries for JSON validation, computation pooling, and shell notifications

This change introduces several new utility classes in the \lib/utils/other\ directory. It adds a \Benchmark\ class for measuring execution duration, a \ComputationPool\ for managing and waiting on asynchronous computations, and a comprehensive \Json\ validation framework supporting objects, arrays, constants, and transformers. Additionally, it implements a logging setup that integrates with the shell service to push system notifications for warnings and errors, allowing users to view error details and stack traces directly from the notification interface.

lib/utils/other · high confidence

New widget library for system UI components and resource handling

This change introduces a comprehensive set of new UI widgets in the \lib/widgets\ directory, establishing the visual foundation for the system interface. Key additions include a battery indicator with support for charging and power-saving states, a new context menu system with submenu and radio item support, and a markup text widget for rendering styled text with links. The update also brings resource management capabilities, featuring an icon cache, automatic resolution of icons and images (including SVG and XPM formats), and reusable UI primitives like quick action buttons, surface layers with shadows/outlines, and a separated flex layout helper.

lib/widgets · high confidence

Behavioural changes

Compact app launcher with pinned apps and tooltips

The app launcher overlay has been redesigned into a compact layout that displays applications in a sorted list alongside a sidebar for account info and system actions. Each app tile now includes a tooltip showing the application's comment, and users can pin apps to a favorites section via a pin icon that appears on hover. The launcher also supports long-pressing app buttons to toggle their pinned status.

lib/components/overlays/launcher · high confidence

Desktop wallpaper now loads dynamically from the API instead of bundled assets

The desktop wallpaper component has been refactored to fetch wallpaper data from the dahliaOS GitHub Wallpaper repository API rather than relying on locally bundled assets. This change introduces a new \WallpaperLayer\ and \WallpaperPicker\ UI that displays default wallpapers fetched via the API and tracks recently used wallpapers in the \CustomizationService\. Users can now select from a dynamic list of wallpapers and see their recent selections, with the system state managed through the new service-based architecture.

lib/components/desktop · high confidence

Initialize Pangolin desktop shell with service-based architecture

The application now initializes via a new \lib/main.dart\ entry point that registers a comprehensive set of system services (including Shell, Locale, Search, WindowManager, Application, Icon, Preferences, Tray, Notification, Power, Customization, and DateTime) using the \ServiceBuilderWidget\. This service layer drives the core UI configuration, including dynamic theming via \YatlApp\ and \ZenitUI\, locale support, and the rendering of the \Desktop\ shell, replacing the previous startup mechanism.

lib · high confidence

Initialize macOS Flutter build configuration and plugin registration

The macOS build environment is now configured to support Flutter plugins. New xcconfig files establish the build settings for Debug and Release modes, while the GeneratedPluginRegistrant.swift file explicitly registers the path\_provider\_foundation, shared\_preferences\_foundation, sqflite, and url\_launcher\_macos plugins. Additionally, the Xcode workspace is set up to include the Pods project, ensuring that CocoaPods dependencies are correctly linked during compilation.

macos/Flutter · high confidence

Introduction of new Quick Settings overlay with modular pages and services

The Quick Settings overlay has been replaced with a new implementation that uses a service-based architecture (importing \dahlia\_shared\, \power\, \shell\, \tray\, and \wm\ services) and integrates with the \zenit\_ui\ and \yatl\_flutter\ libraries. The overlay now features a structured navigation system with distinct pages for account, network, theme, and language settings, accessible via a route stack. It includes new UI components such as \QsShortcutButton\, \QsSlider\, \QsToggleButton\, and \QsTrayItem\, and displays user-specific information like the current Linux username and battery status. The visual design has been updated to use \SurfaceLayer\ for the background and \SharedAxisTransition\ for page transitions, providing a more cohesive look with the rest of the shell.

_lib/components/overlays/quick\settings · high confidence

Introduction of new window surface and toolbar components

The windowing UI now uses newly introduced \PangolinWindowSurface\ and \PangolinWindowToolbar\ widgets. The toolbar provides a 40px high title bar that displays the app icon and title, supports drag-to-move and dock effects, and includes a context menu with options to close, minimize, or view app info. The surface component renders the window body with a drop shadow, replacing the previous implementation.

lib/components/window · high confidence

Linux build system migrated to GTK3

The Linux desktop build has been updated to use GTK3 instead of the previous toolkit. This change ensures the application window integrates with modern Linux desktop environments (such as GNOME) by utilizing GTK3's native windowing and header bar support, providing a more standard look and feel for Linux users.

linux · high confidence

New Pangolin window management layout and hierarchy system

The window manager now uses a new layout delegate and hierarchy controller for the Pangolin shell. This introduces animated window transitions (150ms) when windows are maximized, docked, or resized, and adds support for window docking positions (left, right, top-left, top-right, bottom-left, bottom-right). It also adds a stable ID property to windows to allow for more robust identification and removal of window entries.

lib/utils/wm · high confidence

New search overlay with app launching and recent suggestions

The search overlay has been replaced with a new implementation that provides a unified search experience. Users can now type queries to search for installed applications, which are displayed in a scrollable list with icons and descriptions. Selecting a result launches the corresponding app and dismisses the overlay. When no search text is entered, the overlay displays a list of recent search results for quick access. The search input field uses the ZenitTextField component and includes a clear button.

lib/components/overlays/search · high confidence

New taskbar implementation with compact launcher and notification shelf

The taskbar has been completely redesigned to support a new compact launcher overlay, a notification shelf with an unread count indicator, and a system tray menu. The app list now features a reorderable layout that allows users to pin and unpin applications, while the quick settings button displays real-time system status icons (Wi-Fi, Bluetooth, battery) and the current time. Additional taskbar elements include a keyboard toggle, a search button, and a show-desktop button that minimizes or restores all windows.

lib/components/taskbar · high confidence

Pangolin shell introduces new desktop environment with dock effects and service-based overlays

The shell component has been replaced with a new implementation (Pangolin) that restructures the desktop experience. The new \Desktop\ widget initializes the shell via \WindowManagerService\ and registers a suite of overlays (Compact Launcher, Search, Overview, Quick Settings, Power, Account, Welcome, Notifications, and Tray) through \ShellService\. A key behavioral addition is the \EffectsLayer\, which provides animated visual feedback (rectangular inset and opacity transitions) when windows are docked to screen edges. The \Shell\ widget itself now manages the taskbar layout (Launcher, Search, Overview, App List, Tray, Quick Settings, Notifications, Show Desktop) and handles global overlay dismissal on background taps, while also displaying a \NotificationQueue\ in the bottom-right corner.

lib/components/shell · high confidence

Quick Settings widgets rewritten with ZenitUI and new tray support

The Quick Settings overlay components have been refactored to use the ZenitUI design system, replacing previous implementations with new stateless widgets for sliders, toggles, and shortcuts. The toggle button now supports dynamic titles and icons based on its enabled state, while the slider integrates with the new QuickActionButton for icon interaction. Additionally, a new tray item widget has been added to display system status icons with context menus and scroll support, and a titlebar widget provides navigation and header controls for the overlay.

_lib/components/overlays/quick\settings/widgets · high confidence

Wallpapers now load dynamically from remote APIs

The application no longer bundles wallpaper images as static local assets. Instead, it fetches wallpapers dynamically at runtime from two remote sources: the dahliaOS GitHub repository for standard desktop wallpapers and the Bing Image of the Day API for daily featured images. This change introduces new data models to parse the JSON responses from these APIs and updates the global utility layer to handle the network requests, ensuring wallpapers are always up-to-date without requiring app updates.

lib/utils/data · high confidence

Test coverage

Added initial macOS test suite structure

Added a new test file (RunnerTests.swift) for the macOS Runner target, establishing the basic XCTest framework structure to support future test coverage for the application.

macos/RunnerTests · high confidence

Dependencies

Initial dependency configuration for Pangolin desktop environment

The project now includes its primary dependency manifest (pubspec.yaml) and macOS build configuration (Podfile/Podfile.lock), establishing the foundation for the Pangolin desktop environment. This sets the Dart SDK requirement to version 3.0.0 and integrates key libraries including zenit\_ui (v0.0.12) for the UI framework, dahlia\_shared for shared logic, and xdg\_directories (v1.0.3) for system directory access. It also adds support for battery monitoring via battery\_plus, localization with intl (v0.18.0), and persistent storage using shared\_preferences, while configuring macOS to target OS X 10.15.

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Baseline

  • First survey — no prior run to compare against. CAI 58.

Lenses

  • Code Health 94
  • Architecture 96
  • Maturity 46
  • Readiness 62
  • Security 58
  • Domain Modelling 100

Changes since last survey

  • 300 commits — 245 feature/other, 55 fixes

By area

  • lib/components — 65 commits
  • (root) — 44 commits
  • assets/locales — 42 commits
  • (repo) — 36 commits
  • lib/utils — 23 commits
  • lib/services — 21 commits
  • .github/workflows — 15 commits
  • lib/widgets — 9 commits
  • assets/images — 8 commits
  • linux/flutter — 8 commits
  • lib/generated — 6 commits
  • web/index.html — 5 commits
  • lib/main.dart — 3 commits
  • macos/Runner — 3 commits
  • .github/ISSUE_TEMPLATE — 2 commits
  • .github/dependabot.yaml — 2 commits
  • assets/icons — 2 commits
  • .vscode/launch.json — 1 commit
  • assets/fonts — 1 commit
  • bin/locale_gen — 1 commit

Notable commits

  • fix: Fix applications path
  • fix: Fix badge error
  • fix: Fix broken images
  • fix: Fix context menu problems on web (#380)
  • fix: Fix device architecture
  • fix: Fix double input trigger in TaskBar (#356)
  • fix: Fix icon loading jank
  • fix: Fix locale gen flutter version
  • fix: Fix one warning
  • fix: Fix power command
  • fix: Fix settings consistency when titlebar color is transparent
  • fix: Fix shields
  • fix: Fix stub imports and update readme
  • fix: Fixes for zenit again
  • fix: Large update with some clean up and changes - Removed unused fonts - Removed unused icons - Removed visualData - Removed unused manifests for fuchsia and dap - Remove dap and web app implementations - Switched to theme, darkTheme and themeMode in the MaterialApp - Changed BoxSurface to SurfaceLayer - Switched to ZenitTextField in wallpaper picker - Restructured Account- and PowerMenu and adapted it to ZenitUI - Simplified the OverviewOverlay code - Changed AppLauncher to AppLauncherButton and simplified the code - Removed large launcher - Slightly shrunk QuickSettingsOverlay and cleaned code - Made the accent color buttons in the qs theme page clickable - Made QsShortcutButton stateless and cleaned the code - Cleaned QsSlider and made it Stateless as well - Made QsToggleButton stateless and cleaned the code - Simplified SearchOverlay and enlarged it - Moved SearchTile - Simplified Searchbar code - Removed unused darkening surface in shell that was used for the large launcher - Removed LauncherButton context menu - Simplified QuickSettings taskbar button - Removed BuiltInApps Service - Removed switchLauncher from ActionManager - Changed QuickActionButton to zenit style and simplify code - Fixed IconService null exception (@HrX03) - Updated generated files - Sorted pubspec.yaml alphabetically again
  • fix: March changes: - simplified theming - account manager overlay (non-functional) - tooltips in the launcher - sort apps in both launcher alphabetically - fix qs divider colour - add more context menu options to taskbar items - slightly darken acrylic - show actual wallpaper in overview (& an outline) - fix gesture behaviour in launcher - rewrite the app launcher button
  • fix: Merge pull request #346 from dahliaOS/fix/deprecated
  • fix: Merge pull request #347 from dahliaOS/fix/wallpapers
  • fix: Merge pull request #368 from whiskeyPeak/fix-welcome-overlay-dismiss
  • fix: Un-fix warning for the sake of more severe consequences
  • …and 280 more

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

dahliaOS/pangolin_desktop was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 19 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit a3e2795ea413b81ef56b20af12ec741519d570d7 — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-13a154b7f5d1.