{"id":15059802,"url":"https://github.com/abdes/droidnet","last_synced_at":"2026-01-02T13:38:18.673Z","repository":{"id":219269796,"uuid":"748294311","full_name":"abdes/DroidNet","owner":"abdes","description":"“DroidNet” is a robust suite of sub-projects for WinUI app development, focusing on automation and quality assurance. Its modular architecture makes it a powerful tool for developers working with WinUI and Windows App SDK.","archived":false,"fork":false,"pushed_at":"2024-04-13T18:58:00.000Z","size":1053,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-04-13T20:56:14.838Z","etag":null,"topics":["application","desktop","docking","dotnet","framework","hosting","monorepo","windows","windowsappsdk","winui","winui3"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/abdes.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2024-01-25T17:16:28.000Z","updated_at":"2024-04-15T16:10:56.529Z","dependencies_parsed_at":"2024-02-19T19:12:56.223Z","dependency_job_id":"a63c52fb-e22f-47ff-95cf-ac46ac5da102","html_url":"https://github.com/abdes/DroidNet","commit_stats":null,"previous_names":["abdes/droidnet"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abdes%2FDroidNet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abdes%2FDroidNet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abdes%2FDroidNet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abdes%2FDroidNet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/abdes","download_url":"https://codeload.github.com/abdes/DroidNet/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243681084,"owners_count":20330155,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["application","desktop","docking","dotnet","framework","hosting","monorepo","windows","windowsappsdk","winui","winui3"],"created_at":"2024-09-24T22:48:05.223Z","updated_at":"2026-01-02T13:38:18.661Z","avatar_url":"https://github.com/abdes.png","language":"C#","readme":"# README\n\n\u003c!-- markdownlint-disable-next-line no-inline-html --\u003e\n\u003cdiv align=\"center\"\u003e\n\n[![Windows][windows-badge]][WinUI]\n[![pre-commit][pre-commit-badge]][pre-commit]\n\n\u003c/div\u003e\n\n\u003e A toolkit and example for mono-repo style WindowsAppSdk development with\n\u003e Visual Studio.\n\n[windows-badge]: https://img.shields.io/badge/OS-windows-blue\n[WinUI]: https://learn.microsoft.com/en-us/windows/apps/winui/\n[pre-commit-badge]: https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit\n[pre-commit]: https://github.com/pre-commit/pre-commit\n\n## Overview\n\n“DroidNet” is envisioned as a comprehensive suite of sub-projects aimed at\nautomating and streamlining the development, testing, and continuous integration\nof WinUI apps. “DroidNet” is designed to be a robust and comprehensive solution\nfor developing WinUI applications. Its focus on automation and quality\nassurance, combined with its modular architecture, makes it a powerful tool for\nany developer working with WinUI and WinAppSDK. Happy coding!\n\n## Key Features\n\n\"DroidNet\" has been designed with a focus on the following features:\n\n- **Automation**: Automate repetitive tasks in your development process, such as\n  building, testing, and deployment.\n\n- **Modularity**: The project has been structured as a mono-repo, allowing for\n  easy management and separation of concerns between different sub-projects.\n\n- **Quality Assurance**: Includes built-in tools for code linting and\n  formatting, as well as pre-commit hooks to ensure code quality before commits.\n\n- **Integration with WinUI and WinAppSDK**: The project is designed to work\n  seamlessly with WinUI and WinAppSDK, allowing developers to leverage the\n  latest technologies in Windows app development.\n\n### Docking framework for WinUI 3\n\nThe [Docking](projects/Docking/) project contains a flexible docking frameowrk\nfor WinUI. Dockable views can be embedded in Docks, which are managed in a tree\nstructure by a Docker. Combined with a pluggable layout engine, the docking tree\ncan be rendered into dock panels which can be attached to the workspace edges or\nrelative to other docks.\n\n![Example docking workspace](media/routing-debugger.png \"Docking Workspace\")\n\n### MVVM ViewModel first router\n\nSimilar to what Angular does in a web application, the [Router](projects/Routing/)\nprovides a routing frameowrk to navigate within the WinUI application using URIs.\nWith the provided source generators, it is easy to declare views, view models, and\nwire them together. The routing configuration is completely declarative and follows\nthe same principles than Angular.\n\n### Application host and Dependency Container\n\nThe [Hosting](projects/Hosting/) project offers an integration with .Net Host and\nthe DryIoc container. The source generators automate the injection of services and\nview models and a view locator service makes it intuitive to locate a view for a\nparticular view model.\n\n## Projects Overview\n\nDroidNet is organized as a modular mono-repo with specialized projects for different aspects of WinUI application development:\n\n### Core Infrastructure\n\n- **[Hosting](projects/Hosting/)** - Integration of .NET Generic Host for WinUI applications, providing dependency injection, configuration, logging, and application lifecycle management with a `UserInterfaceHostedService` for managing UI as a background service.\n\n- **[Mvvm](projects/Mvvm/)** - MVVM infrastructure with intelligent view resolution, strong typing via `IViewFor\u003cT\u003e` interface, and XAML-friendly converters for binding ViewModels to Views.\n\n- **[Routing](projects/Routing/)** - Angular-inspired URI-based navigation framework with support for outlets, matrix parameters, nested routes, and declarative route configuration for WinUI applications.\n\n- **[Bootstrap](projects/Bootstrap/)** - Reusable bootstrapping library providing a fluent configuration API for setting up dependency injection, logging, routing, MVVM, and WinUI integration in a single coherent startup flow.\n\n### UI \u0026 Presentation Layer\n\n- **[Docking](projects/Docking/)** - Flexible docking framework for managing dockable panels with tree-based layout management, support for multiple dock types (CenterDock, ToolDock), tab-based interfaces, and resizable panels.\n\n- **[Controls](projects/Controls/)** - Custom WinUI 3 controls with best practices for implementation, including DynamicTreeItem and other reusable components. Demonstrates proper patterns for dependency properties, template parts, visual states, and styling.\n\n- **[Aura](projects/Aura/)** - Comprehensive WinUI 3 shell framework providing window management, custom decorations, theming, OS notifications, and taskbar integration. Handles all UI infrastructure around core business logic.\n\n- **[Converters](projects/Converters/)** - Collection of value converters for WinUI XAML binding, including `BoolToBrushConverter`, `NullToVisibilityConverter`, `ItemClickEventArgsToClickedItemConverter`, and `DictionaryValueConverter`.\n\n### Data \u0026 Configuration\n\n- **[Config](projects/Config/)** - Configuration management services including `PathFinder` for environment-aware path resolution and MVVM-friendly settings services with change tracking, validation, and durable persistence.\n\n- **[Collections](projects/Collections/)** - Extension methods and custom collections for working with `ObservableCollection\u003cT\u003e`, including `DynamicObservableCollection` for transforming collections and sorted insertion helpers.\n\n- **[Coordinates](projects/Coordinates/)** - Type-safe spatial coordinate transformations for WinUI with multi-monitor DPI awareness, supporting conversion between element, window, and screen coordinate spaces.\n\n- **[Resources](projects/Resources/)** - Lightweight localization library with extension helpers for retrieving localized strings from resource maps with graceful fallback behavior.\n\n### Code Generation \u0026 Tools\n\n- **[Mvvm.Generators](projects/Mvvm.Generators/)** - C# source generator for automatic View-ViewModel wiring using `[ViewModel]` attribute, reducing boilerplate and improving maintainability.\n\n- **[Mvvm.Generators.Attributes](projects/Mvvm.Generators.Attributes/)** - Attribute types for MVVM source generators, providing the `[ViewModel]` attribute for decorating View classes.\n\n- **[Resources.Generator](projects/Resources.Generator/)** - Source generator that emits per-assembly localization helpers (`L()` and `R()` extension methods) for simplified resource access.\n\n### Utilities \u0026 Testing\n\n- **[TimeMachine](projects/TimeMachine/)** - Undo/Redo infrastructure for implementing undo/redo functionality in applications.\n\n- **[TestHelpers](projects/TestHelpers/)** - Testing utilities providing logging configuration, dependency injection setup, assertion handling, and event handler testing helpers for unit tests.\n\n- **[UITests.Shared](projects/UITests.Shared/)** - Shared utilities and helpers for UI testing across projects.\n\n### Oxygen Game Engine and Editor\n\nThe Oxygen projects represent a comprehensive game editor and engine implementation built on top of DroidNet:\n\n- **[Oxygen.Engine](projects/Oxygen.Engine/)** - C++ game engine with bindless rendering capabilities, providing the runtime for the Oxygen Editor.\n\n- **[Oxygen.Editor](projects/Oxygen.Editor/)** - Main game editor application built with WinUI 3, integrating all DroidNet components for a professional IDE-like experience.\n\n- **[Oxygen.Core](projects/Oxygen.Core/)** - Core libraries providing path finding, input validation, and essential services for the Oxygen Editor.\n\n- **[Oxygen.Editor.Interop](projects/Oxygen.Editor.Interop/)** - Interoperability layer between managed code and the C++ engine.\n\n- **[Oxygen.Editor.ProjectBrowser](projects/Oxygen.Editor.ProjectBrowser/)** - Project browsing and management UI component.\n\n- **[Oxygen.Editor.Projects](projects/Oxygen.Editor.Projects/)** - Project file and structure management.\n\n- **[Oxygen.Storage](projects/Oxygen.Storage/)** - Persistence and data storage services for projects and editor state.\n\n- **[Oxygen.Editor.WorldEditor](projects/Oxygen.Editor.WorldEditor/)** - World editing and scene management UI.\n\n- **[Oxygen.Editor.Data](projects/Oxygen.Editor.Data/)** - Data models and serialization for world and project data.\n\n## Getting Started\n\nTo get started with \"DroidNet\", you'll need to have Visual Studio installed on\nyour machine. You can then clone the repository and open the solution in Visual\nStudio to start developing. Simply use the `open.cmd` script in any of the folders\nto generate the solution file and open it in Visual Studio.\n\n## Contributions\n\nContributions to \"DroidNet\" are welcome! If you have a feature request, bug\nreport, or want to contribute to the code, please feel free to open an issue or\na pull request.\n\n## License\n\n\"DroidNet\" is licensed under the MIT License. See the LICENSE file for more\ninformation.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fabdes%2Fdroidnet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fabdes%2Fdroidnet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fabdes%2Fdroidnet/lists"}