UniGetUI is a WinUI 3 desktop app (C#/.NET 8, Windows App SDK) providing a GUI for CLI package managers (WinGet, Scoop, Chocolatey, Pip, Npm, .NET Tool, PowerShell Gallery, Cargo, Vcpkg). Solution lives in src/UniGetUI.sln.
The codebase follows a layered, modular structure with ~40 projects:
UniGetUI/- WinUI 3 entry point, XAML pages, controls, and app shell (EntryPoint.cs,MainWindow.xaml)UniGetUI.Core.*- Shared infrastructure:Logger,Settings,Tools(includesCoreTools.Translate()),IconEngine,LanguageEngineUniGetUI.PackageEngine.Interfaces- Contracts:IPackageManager,IPackage,IManagerSource,IPackageDetailsUniGetUI.PackageEngine.PackageManagerClasses- Base implementations:PackageManager(abstract),Package, helpers (BasePkgDetailsHelper,BasePkgOperationHelper,BaseSourceHelper)UniGetUI.PackageEngine.Managers.*- Concrete manager implementations (one project per manager:WinGet,Scoop,Chocolatey,Pip,Npm, etc.)UniGetUI.PackageEngine.Operations- Install/update/uninstall operation orchestrationUniGetUI.Interface.*- Enums, telemetry, background API
Each manager extends PackageManager and must override three abstract methods:
protected override IReadOnlyList<Package> FindPackages_UnSafe(string query);
protected override IReadOnlyList<Package> GetAvailableUpdates_UnSafe();
protected override IReadOnlyList<Package> GetInstalledPackages_UnSafe();Each manager also provides three helper classes (in a Helpers/ subfolder):
*PkgDetailsHelperextendsBasePkgDetailsHelper- overridesGetDetails_UnSafe,GetInstallableVersions_UnSafe,GetIcon_UnSafe, etc.*PkgOperationHelperextendsBasePkgOperationHelper- overrides_getOperationParameters,_getOperationResult*SourceHelperextendsBaseSourceHelper- overridesGetSources_UnSafe,GetAddSourceParameters, etc.
The constructor sets Capabilities, Properties, and wires the helpers. See src/UniGetUI.PackageEngine.Managers.Scoop/Scoop.cs as a clean reference implementation.
# Restore & test (from src/)
dotnet restore
dotnet test --verbosity q --nologo
# Publish release build
dotnet publish src/UniGetUI/UniGetUI.csproj /p:Configuration=Release /p:Platform=x64- Target framework:
net8.0-windows10.0.26100.0(min10.0.19041) - Build generates secrets via
src/UniGetUI/Services/generate-secrets.ps1and integrity tree viascripts/generate-integrity-tree.ps1 - Self-contained, publish-trimmed (partial), Windows App SDK self-contained
- Tests use xUnit (
[Fact],Assert.*)
File-based settings via Settings.Get(Settings.K.*) / Settings.Set(Settings.K.*, value) and Settings.GetValue(Settings.K.*) / Settings.SetValue(Settings.K.*, value). Setting keys are defined in the Settings.K enum in SettingsEngine_Names.cs. Boolean settings are stored as file existence; string settings as file content.
Use Logger.Info(), Logger.Warn(), Logger.Error(), Logger.Debug(), Logger.ImportantInfo() from UniGetUI.Core.Logging. Accepts both string and Exception parameters.
Use CoreTools.Translate("text") for all user-facing strings. Parameterized: CoreTools.Translate("{0} packages found", count). In XAML, use the TranslatedTextBlock control. Translation assets live under src/UniGetUI.Core.LanguageEngine/Assets/; do not assume Tolgee-based automation exists in this repository.
- Types, methods, properties: PascalCase
- Private fields:
__doubleUnderscoreor_singleUnderscoreprefix - Internal unsafe methods: suffix
_UnSafe(e.g.,FindPackages_UnSafe) - Nullable enabled globally;
LangVersionislatest - Code style enforced in build (
EnforceCodeStyleInBuild=true)
FALSE_PACKAGE_NAMES,FALSE_PACKAGE_IDS,FALSE_PACKAGE_VERSIONSstatic arrays filter CLI parsing noise- Manager initialization flows through
Initialize()->_loadManagerExecutableFile()->_loadManagerVersion()->_performExtraLoadingSteps() - Operations that may fail return
OperationVeredict(note: intentional misspelling used throughout codebase)
| Purpose | Path |
|---|---|
| Solution | src/UniGetUI.sln |
| Shared build props | src/Directory.Build.props |
| Version info | src/SharedAssemblyInfo.cs |
| Manager interface | src/UniGetUI.PAckageEngine.Interfaces/IPackageManager.cs |
| Base manager class | src/UniGetUI.PackageEngine.PackageManagerClasses/Manager/PackageManager.cs |
| Package class | src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Package.cs |
| Settings engine | src/UniGetUI.Core.Settings/SettingsEngine.cs |
| Setting keys | src/UniGetUI.Core.Settings/SettingsEngine_Names.cs |
| Logger | src/UniGetUI.Core.Logger/Logger.cs |
| CI test workflow | .github/workflows/dotnet-test.yml |