UnitDesk is a modular, customizable desktop widget framework for Windows that provides real-time system monitoring. It uses Windows Presentation Foundation (WPF) to create lightweight, transparent widgets that sit directly on your desktop.
-
Multiple Widget Types:
- System Info Widget (CPU, RAM, GPU usage)
- Disk Space Monitoring
- Clock and Date Display
- Easily extensible for custom widgets
-
System Tray Integration:
- Manage widgets directly from the Windows system tray icon
- Open, close, or exit the application from the tray menu
- Tray menu always reflects the current widget state in real time
-
Widget State Persistence:
- Remembers which widgets you had open or closed at your last session
- On restart, only your previously open widgets are restored
- Works automatically, no setup required
-
Desktop Integration:
- Widgets sit directly on the desktop background
- Semi-transparent, non-intrusive design
- Stay-on-top capability
-
User-Friendly:
- Drag and drop positioning
- Position memory between sessions
- Reset to default position option
- Simple close button for each widget
-
Performance Monitoring:
- Real-time CPU usage tracking
- RAM usage monitoring
- GPU load and memory usage for NVIDIA and AMD cards
- Disk space monitoring for all drives
- Framework: .NET 8.0 with WPF (Windows Presentation Foundation)
- Language: C#
- Hardware Monitoring: LibreHardwareMonitor
- Serialization: System.Text.Json
- Windows Integration: Win32 API via P/Invoke
UnitDesk is built with a modular, extensible architecture following SOLID principles:
-
Widget Framework:
BaseWidget: Abstract base class for all widgetsWidgetManager: Singleton service that handles widget creation and lifecycleWidgetConfiguration: Configuration system for widget settings
-
Utility Services:
HardwareMonitor: System hardware monitoring (CPU, RAM, GPU)DiskMonitor: Disk space monitoringWidgetStorageService: Persistence of widget settingsDesktopIntegration: Desktop background integration via Win32 API
- Modular Design: Each component has a single responsibility
- Extensibility: Easy to add new widget types
- Dependency Injection: Services are injected into widgets
- Error Handling: Robust exception handling throughout
- Resource Management: Proper cleanup with IDisposable implementation
- Windows 10/11
- .NET 8.0 Runtime
- Visual Studio 2022 (for development)
- Clone the repository or download the release
- Build the solution using Visual Studio or .NET CLI
- Run the application (UnitDesk.exe)
- Each push to the repository triggers a GitHub Actions workflow that:
- Builds the app for Windows (self-contained, no .NET runtime needed)
- Packages the app into a Windows installer (
UnitDeskSetup.exe) using Inno Setup - Uploads the installer as a downloadable artifact on the Actions page
- You can always get the latest installer from the GitHub Actions tab.
When you start UnitDesk, three default widgets will appear on your desktop:
- System Info Widget (CPU, RAM, GPU stats)
- Disk Info Widget (Drive space information)
- Clock Widget (Time and date)
Each widget has the following controls:
- Drag Area: Click and drag anywhere on the widget to reposition
- Reset Button (⟲): Click to reset widget to its default position
- Close Button (✕): Click to close the widget
Widget settings are stored in:
%APPDATA%\UnitDesk\
- Individual widget positions:
widget-id.json - Widget configurations:
widgets.json
To create a new widget type:
- Create a new XAML file and code-behind class in the Widgets folder
- Inherit from BaseWidget
- Implement the required abstract methods:
- InitializeWidget()
- StartDataUpdates()
- Add your widget to App.xaml.cs or the widget configuration
Example:
// In App.xaml.cs
WidgetManager.Instance.CreateWidget<YourCustomWidget>("your-widget-id");This project is licensed under the MIT License - see the LICENSE file for details.
- LibreHardwareMonitor for hardware monitoring capabilities
