### Quick Start Commands for UniGetUI Source: https://github.com/devolutions/unigetui/blob/main/docs/CLI.md Basic commands to get started with UniGetUI, including checking status, searching, installing packages, and waiting for operations. ```powershell unigetui status ``` ```powershell unigetui app status ``` ```powershell unigetui package search --manager dotnet-tool --query dotnetsay ``` ```powershell unigetui package install --manager dotnet-tool --id dotnetsay --version 2.1.4 --scope Global ``` ```powershell unigetui operation wait --id 123 --timeout 300 ``` -------------------------------- ### Install Package Source: https://context7.com/devolutions/unigetui/llms.txt Initiates the installation of a specified package. This operation is asynchronous. ```APIDOC ## POST /uniget/v1/packages/install ### Description Starts the process of installing a package. The operation is performed asynchronously. ### Method POST ### Endpoint /uniget/v1/packages/install ### Parameters #### Query Parameters - **packageId** (string) - Required - The unique identifier of the package to install. - **manager** (string) - Required - The package manager to use for installation (e.g., "winget"). - **wait** (boolean) - Optional - If true, the request will wait for the operation to complete. Defaults to false. - **token** (string) - Required - The session token. ### Response #### Success Response (200) - **operationId** (integer) - The ID of the initiated operation. - **status** (string) - The initial status of the operation (e.g., "queued"). ``` -------------------------------- ### Install UniGetUI via WinGet Source: https://github.com/devolutions/unigetui/blob/main/README.md Use this command to install UniGetUI directly using the WinGet package manager. Ensure WinGet is installed and configured. ```cmd winget install --exact --id Devolutions.UniGetUI --source winget ``` -------------------------------- ### Install UniGetUI via Scoop Source: https://github.com/devolutions/unigetui/blob/main/README.md Use these commands to add the Scoop bucket and install UniGetUI. ```cmd scoop bucket add extras scoop install extras/unigetui ``` -------------------------------- ### Bundle Install Source: https://context7.com/devolutions/unigetui/llms.txt Installs packages from a bundle file, with options for elevated privileges and interactivity. ```APIDOC ## POST /uniget/v1/bundles/install ### Description Installs all packages listed within a specified bundle file. ### Method POST ### Endpoint /uniget/v1/bundles/install ### Parameters #### Query Parameters - **token** (string) - Required - The session token. #### Request Body - **elevated** (boolean) - Optional - Whether to run the installation with elevated privileges. Defaults to false. - **interactive** (boolean) - Optional - Whether to allow interactive prompts during installation. Defaults to false. - **skipHash** (boolean) - Optional - If true, skips hash verification of package files. Defaults to false. ``` -------------------------------- ### UniGetUI Deep Links and Installer Parameters Source: https://context7.com/devolutions/unigetui/llms.txt Utilize the 'unigetui://' URL scheme to open UniGetUI and navigate to specific pages or show package details. The installer supports silent installations and skipping bundled runtimes using command-line arguments. ```powershell # Deep links (open UniGetUI and navigate directly) Start-Process "unigetui://showPackage?id=Git.Git&managerName=winget&sourceName=winget" Start-Process "unigetui://showUniGetUI" Start-Process "unigetui://showDiscoverPage" Start-Process "unigetui://showUpdatesPage" Start-Process "unigetui://showInstalledPage" # Installer: silent install, no auto-start, no startup entry UniGetUI.Installer.exe /VERYSILENT /SUPPRESSMSGBOXES /NoAutoStart /NoRunOnStartup # Installer: skip bundled runtimes UniGetUI.Installer.exe /VERYSILENT /NoVCRedist /NoEdgeWebView /NoWinGet # Application startup flags UniGetUI.exe --daemon # start minimized to tray UniGetUI.exe --updateapps # force-install all available updates UniGetUI.exe --headless # no window, IPC API only # Settings import/export UniGetUI.exe --export-settings C:\backup\unigetui-settings.json UniGetUI.exe --import-settings C:\backup\unigetui-settings.json # Toggle a boolean setting at launch UniGetUI.exe --enable-setting AutomaticallyUpdatePackages UniGetUI.exe --disable-setting DisableTelemetry # Set a string setting at launch UniGetUI.exe --set-setting-value PreferredLanguage fr # Load a bundle file directly (opens Package Bundles page) UniGetUI.exe "C:\packages\mysetup.ubundle" ``` -------------------------------- ### Configure Package Installation Options Source: https://context7.com/devolutions/unigetui/llms.txt Programmatically create and configure install options, including administrator privileges, interactive mode, architecture, scope, version pinning, pre/post commands, and custom parameters. Options can be serialized to JSON and copied. ```csharp using UniGetUI.PackageEngine.Serializable; using UniGetUI.PackageEngine.Enums; // Create options programmatically var opts = new InstallOptions { RunAsAdministrator = true, InteractiveInstallation = false, SkipHashCheck = false, Architecture = Architecture.x64, InstallationScope = PackageScope.Machine, Version = "2.44.0", PreRelease = false, RemoveDataOnUninstall = false, AutoUpdatePackage = true, PreInstallCommand = "echo 'Starting install...'", PostInstallCommand = "echo 'Done!'", KillBeforeOperation = { "notepad.exe" }, CustomParameters_Install = { "--silent", "--norestart" }, }; Console.WriteLine(opts.DiffersFromDefault()); // true // Serialize to JSON (only non-default values are written) var json = opts.AsJsonNode(); Console.WriteLine(json.ToJsonString()); // {"RunAsAdministrator":true,"Architecture":"x64","InstallationScope":"machine",...} // Deserialize from JSON var opts2 = new InstallOptions(json); Console.WriteLine(opts2.Architecture); // "x64" // Copy InstallOptions copy = opts.Copy(); copy.Architecture = Architecture.arm64; Console.WriteLine(opts.Architecture); // still "x64" // Get options for a package (respects package-level overrides then manager defaults) InstallOptions resolved = await somePackage.GetInstallOptions(); ``` -------------------------------- ### Manage UniGetUI Bundles via CLI Source: https://context7.com/devolutions/unigetui/llms.txt Commands for bundle operations including getting, adding, exporting, importing, and installing bundles. ```bash unigetui bundle get ``` ```bash unigetui bundle add --id Git.Git --manager winget ``` ```bash unigetui bundle export --path C:\backup\packages.ubundle ``` ```bash unigetui bundle import --path C:\backup\packages.ubundle ``` ```bash unigetui bundle install --elevated true ``` -------------------------------- ### Install UniGetUI via Chocolatey Source: https://github.com/devolutions/unigetui/blob/main/README.md Use this command to install UniGetUI using Chocolatey. ```cmd choco install wingetui ``` -------------------------------- ### Install a Package Asynchronously via UniGetUI IPC HTTP API Source: https://context7.com/devolutions/unigetui/llms.txt Initiates an asynchronous package installation request. The response includes an operation ID to poll for status. ```powershell # Install a package (async) curl -X POST "http://localhost:7058/uniget/v1/packages/install?packageId=Git.Git&manager=winget&wait=false&token=$TOKEN" # {"operationId": 7, "status": "queued"} ``` -------------------------------- ### Install Bundle via UniGetUI IPC HTTP API with JSON Body Source: https://context7.com/devolutions/unigetui/llms.txt Installs a bundle of packages, allowing configuration of elevated privileges, interactivity, and hash skipping via a JSON request body. ```powershell # Bundle install curl -X POST "http://localhost:7058/uniget/v1/bundles/install" \ -H "Content-Type: application/json" \ -d '{"elevated":false,"interactive":false,"skipHash":false}' \ "?token=$TOKEN" ``` -------------------------------- ### Interact with Package Managers using IPackageManager Source: https://context7.com/devolutions/unigetui/llms.txt Demonstrates how to load package managers, search for packages, list installed software, check for updates, and inspect manager capabilities using the IPackageManager interface and PEInterface. ```csharp using UniGetUI.PackageEngine; using UniGetUI.PackageEngine.Interfaces; // Access all managers via PEInterface PEInterface.LoadLoaders(); PEInterface.LoadManagers(); // initializes all managers in parallel (60 s timeout) // Work with a specific manager IPackageManager winget = PEInterface.WinGet; Console.WriteLine($"Manager: {winget.Name}, Ready: {winget.IsReady()}"); // Search packages IReadOnlyList results = winget.FindPackages("vscode"); foreach (IPackage pkg in results) Console.WriteLine($" {pkg.Id} — {pkg.VersionString}"); // List installed packages for all ready managers foreach (IPackageManager manager in PEInterface.Managers) { if (!manager.IsReady()) continue; IReadOnlyList installed = manager.GetInstalledPackages(); Console.WriteLine($"{manager.Name}: {installed.Count} packages installed"); } // List available updates IReadOnlyList updates = winget.GetAvailableUpdates(); Console.WriteLine($"WinGet updates available: {updates.Count}"); // Refresh indexes winget.RefreshPackageIndexes(); // Check manager capabilities ManagerCapabilities caps = winget.Capabilities; Console.WriteLine($"CanRunAsAdmin: {caps.CanRunAsAdmin}"); Console.WriteLine($"SupportsCustomVersions: {caps.SupportsCustomVersions}"); Console.WriteLine($"SupportsCustomScopes: {caps.SupportsCustomScopes}"); Console.WriteLine($"SupportsProxy: {caps.SupportsProxy}"); ``` -------------------------------- ### Troubleshoot Winget Package Installation Source: https://github.com/devolutions/unigetui/blob/main/README.md If you encounter issues installing or upgrading a Winget package, try the command-line first. If it fails there, consult the Winget project page. ```powershell winget upgrade --id Microsoft.PowerToys ``` -------------------------------- ### List Installed Packages Source: https://context7.com/devolutions/unigetui/llms.txt Lists packages installed on the system, optionally filtered by package manager. ```APIDOC ## GET /uniget/v1/packages/installed ### Description Retrieves a list of all packages currently installed on the system. ### Method GET ### Endpoint /uniget/v1/packages/installed ### Parameters #### Query Parameters - **manager** (string) - Optional - Filters results to a specific package manager. - **token** (string) - Required - The session token. ``` -------------------------------- ### Manage UniGetUI Settings via CLI Source: https://context7.com/devolutions/unigetui/llms.txt Commands to list, get, and set configuration settings for UniGetUI, including package update behavior and preferred language. ```bash unigetui settings list ``` ```bash unigetui settings get --key AutomaticallyUpdatePackages ``` ```bash unigetui settings set --key AutomaticallyUpdatePackages --enabled true ``` ```bash unigetui settings set --key PreferredLanguage --value fr ``` -------------------------------- ### Get Settings Source: https://context7.com/devolutions/unigetui/llms.txt Retrieves all current UniGetUI settings. ```APIDOC ## GET /uniget/v1/settings ### Description Retrieves a list of all configurable settings for UniGetUI. ### Method GET ### Endpoint /uniget/v1/settings ### Parameters #### Query Parameters - **token** (string) - Required - The session token. ``` -------------------------------- ### List Installed Packages via UniGetUI IPC HTTP API Source: https://context7.com/devolutions/unigetui/llms.txt Retrieves a list of installed packages, with options to filter by manager (e.g., pip). ```powershell # List installed packages curl "http://localhost:7058/uniget/v1/packages/installed?token=$TOKEN" curl "http://localhost:7058/uniget/v1/packages/installed?manager=pip&token=$TOKEN" ``` -------------------------------- ### Start UniGetUI in TCP Mode Source: https://github.com/devolutions/unigetui/blob/main/docs/IPC.md Launches UniGetUI in headless mode with the IPC API listening on TCP port 7058 for manual testing. ```powershell UniGetUI.exe --headless --ipc-api-transport tcp --ipc-api-port 7058 ``` -------------------------------- ### Install Git Hooks Source: https://github.com/devolutions/unigetui/blob/main/CONTRIBUTING.md Run this script once after cloning to enable the repository's pre-commit hook, which helps maintain code quality. ```powershell pwsh ./scripts/install-git-hooks.ps1 ``` -------------------------------- ### IPackageManager Interface Usage Source: https://context7.com/devolutions/unigetui/llms.txt Demonstrates how to load package managers, interact with a specific manager (like WinGet), search for packages, list installed packages, check for updates, refresh indexes, and query manager capabilities. ```APIDOC ## IPackageManager Interface ### Description The central abstraction for every supported package manager. Each concrete manager (WinGet, Scoop, Chocolatey, pip, npm, etc.) implements `IPackageManager` and is accessed through the `PEInterface` static class. The interface exposes discovery, listing, update checking, source management, and initialization lifecycle. ### Usage Example ```csharp using UniGetUI.PackageEngine; using UniGetUI.PackageEngine.Interfaces; // Access all managers via PEInterface PEInterface.LoadLoaders(); PEInterface.LoadManagers(); // initializes all managers in parallel (60 s timeout) // Work with a specific manager IPackageManager winget = PEInterface.WinGet; Console.WriteLine($"Manager: {winget.Name}, Ready: {winget.IsReady()}"); // Search packages IReadOnlyList results = winget.FindPackages("vscode"); foreach (IPackage pkg in results) Console.WriteLine($" {pkg.Id} — {pkg.VersionString}"); // List installed packages for all ready managers foreach (IPackageManager manager in PEInterface.Managers) { if (!manager.IsReady()) continue; IReadOnlyList installed = manager.GetInstalledPackages(); Console.WriteLine($"{manager.Name}: {installed.Count} packages installed"); } // List available updates IReadOnlyList updates = winget.GetAvailableUpdates(); Console.WriteLine($"WinGet updates available: {updates.Count}"); // Refresh indexes winget.RefreshPackageIndexes(); // Check manager capabilities ManagerCapabilities caps = winget.Capabilities; Console.WriteLine($"CanRunAsAdmin: {caps.CanRunAsAdmin}"); Console.WriteLine($"SupportsCustomVersions: {caps.SupportsCustomVersions}"); Console.WriteLine($"SupportsCustomScopes: {caps.SupportsCustomScopes}"); Console.WriteLine($"SupportsProxy: {caps.SupportsProxy}"); ``` ### Methods - **`PEInterface.LoadLoaders()`**: Initializes the loader classes for package managers. - **`PEInterface.LoadManagers()`**: Initializes all supported package managers in parallel. This operation has a 60-second timeout. - **`PEInterface.WinGet`**: Property to access the WinGet package manager instance. - **`PEInterface.Managers`**: Property to get a collection of all loaded package managers. - **`IPackageManager.Name`**: Gets the name of the package manager. - **`IPackageManager.IsReady()`**: Checks if the package manager is initialized and ready for use. - **`IPackageManager.FindPackages(string query)`**: Searches for packages matching the given query. - **`IPackageManager.GetInstalledPackages()`**: Retrieves a list of currently installed packages. - **`IPackageManager.GetAvailableUpdates()`**: Retrieves a list of packages with available updates. - **`IPackageManager.RefreshPackageIndexes()`**: Refreshes the local package indexes for the manager. - **`IPackageManager.Capabilities`**: Gets an object detailing the capabilities of the package manager. ### Properties - **`IPackage.Id`**: The unique identifier of a package. - **`IPackage.VersionString`**: The version string of a package. - **`ManagerCapabilities.CanRunAsAdmin`**: Boolean indicating if the manager supports running operations as administrator. - **`ManagerCapabilities.SupportsCustomVersions`**: Boolean indicating if the manager supports custom package versions. - **`ManagerCapabilities.SupportsCustomScopes`**: Boolean indicating if the manager supports custom installation scopes. - **`ManagerCapabilities.SupportsProxy`**: Boolean indicating if the manager supports proxy configurations. ``` -------------------------------- ### InstallOptions Source: https://context7.com/devolutions/unigetui/llms.txt Configures how a package is installed, updated, or uninstalled. Options include elevation, interactive mode, architecture, scope, version pinning, pre/post commands, custom CLI parameters, and hash-skip. Options are serializable to JSON and can be saved per-package or per-manager. ```APIDOC ## InstallOptions Configures how a package is installed, updated, or uninstalled. Options include elevation, interactive mode, architecture, scope, version pinning, pre/post commands, custom CLI parameters, and hash-skip. Options are serializable to JSON and can be saved per-package or per-manager. ```csharp using UniGetUI.PackageEngine.Serializable; using UniGetUI.PackageEngine.Enums; // Create options programmatically var opts = new InstallOptions { RunAsAdministrator = true, InteractiveInstallation = false, SkipHashCheck = false, Architecture = Architecture.x64, InstallationScope = PackageScope.Machine, Version = "2.44.0", PreRelease = false, RemoveDataOnUninstall = false, AutoUpdatePackage = true, PreInstallCommand = "echo 'Starting install...'", PostInstallCommand = "echo 'Done!'", KillBeforeOperation = { "notepad.exe" }, CustomParameters_Install = { "--silent", "--norestart" }, }; Console.WriteLine(opts.DiffersFromDefault()); // true // Serialize to JSON (only non-default values are written) var json = opts.AsJsonNode(); Console.WriteLine(json.ToJsonString()); // {"RunAsAdministrator":true,"Architecture":"x64","InstallationScope":"machine",...} // Deserialize from JSON var opts2 = new InstallOptions(json); Console.WriteLine(opts2.Architecture); // "x64" // Copy InstallOptions copy = opts.Copy(); copy.Architecture = Architecture.arm64; Console.WriteLine(opts.Architecture); // still "x64" // Get options for a package (respects package-level overrides then manager defaults) InstallOptions resolved = await somePackage.GetInstallOptions(); ``` ``` -------------------------------- ### Host Test Files Locally Source: https://github.com/devolutions/unigetui/blob/main/testing/UPDATE-TESTING.md Starts a local Python HTTP server to host test files. Ensure the server is running before proceeding with other test steps. ```powershell Push-Location testing python -m http.server 8080 Pop-Location ``` -------------------------------- ### Clone UniGetUI Repository Source: https://github.com/devolutions/unigetui/blob/main/InstallerExtras/MsiCreator/README.md Clone the UniGetUI repository to access the necessary tools for creating the MSI installer. ```bash git clone https://github.com/Devolutions/UniGetUI ``` -------------------------------- ### PEInterface — Package Engine Entry Point Source: https://context7.com/devolutions/unigetui/llms.txt `PEInterface` is the static entry point for the entire package engine. It holds singleton instances of all supported managers, initializes them in parallel, and owns the four global package loaders (discoverable, installed, upgradable, bundles). ```APIDOC ## PEInterface — Package Engine Entry Point `PEInterface` is the static entry point for the entire package engine. It holds singleton instances of all supported managers, initializes them in parallel, and owns the four global package loaders (discoverable, installed, upgradable, bundles). ```csharp using UniGetUI.PackageEngine; using UniGetUI.PackageEngine.PackageLoader; // Bootstrap (call once at app startup) PEInterface.LoadLoaders(); // creates DiscoverablePackagesLoader, InstalledPackagesLoader, etc. PEInterface.LoadManagers(); // calls Initialize() on all managers in parallel // Enumerate all managers foreach (var m in PEInterface.Managers) Console.WriteLine($"{m.Name} — enabled={m.IsEnabled()} ready={m.IsReady()}"); // Platform-specific managers (Windows) // PEInterface.WinGet, PEInterface.Scoop, PEInterface.Chocolatey, PEInterface.PowerShell // Cross-platform managers // PEInterface.Npm, PEInterface.Pip, PEInterface.DotNet, PEInterface.PowerShell7 // PEInterface.Cargo, PEInterface.Vcpkg // Linux managers (auto-selected by distro family from /etc/os-release) // PEInterface.Apt (Debian/Ubuntu), PEInterface.Dnf (Fedora/RHEL) // PEInterface.Pacman (Arch), PEInterface.Snap, PEInterface.Flatpak // Trigger a background reload of installed packages _ = InstalledPackagesLoader.Instance.ReloadPackages(); _ = UpgradablePackagesLoader.Instance.ReloadPackages(); // Attempt a lightweight repair on a manager (e.g., reconnect WinGet COM API) PEInterface.WinGet.AttemptFastRepair(); // Find all candidate executable files for a manager IReadOnlyList candidates = PEInterface.Pip.FindCandidateExecutableFiles(); // e.g. ["/usr/bin/pip", "/usr/local/bin/pip3"] ``` ``` -------------------------------- ### Logging Usage Source: https://github.com/devolutions/unigetui/blob/main/CLAUDE.md Examples of how to use the logging framework for different severity levels. The Logger accepts both string messages and Exception objects. ```csharp Logger.Info() Logger.Warn() Logger.Error() Logger.Debug() Logger.ImportantInfo() ``` -------------------------------- ### Settings API Source: https://github.com/devolutions/unigetui/blob/main/docs/IPC.md Endpoints for managing UniGet general settings, including listing, getting, setting, clearing, and resetting. ```APIDOC ## GET /uniget/v1/settings ### Description Retrieves all UniGet settings. ### Method GET ### Endpoint /uniget/v1/settings ### Parameters None ### Response #### Success Response (200) - settings (object) - An object containing all UniGet settings. ``` ```APIDOC ## GET /uniget/v1/settings/item ### Description Retrieves a specific UniGet setting by its key. ### Method GET ### Endpoint /uniget/v1/settings/item ### Parameters #### Query Parameters - **key** (string) - Required - The key of the setting to retrieve. ### Response #### Success Response (200) - value (string) - The value of the requested setting. ``` ```APIDOC ## POST /uniget/v1/settings/set ### Description Sets a UniGet setting. ### Method POST ### Endpoint /uniget/v1/settings/set ### Parameters #### Query Parameters - **key** (string) - Required - The key of the setting to set. - **enabled** (boolean) - Optional - Whether the setting is enabled. - **value** (string) - Optional - The value to set for the setting. ### Response #### Success Response (200) - status (string) - The status of the set operation. ``` ```APIDOC ## POST /uniget/v1/settings/clear ### Description Clears a specific UniGet setting by its key. ### Method POST ### Endpoint /uniget/v1/settings/clear ### Parameters #### Query Parameters - **key** (string) - Required - The key of the setting to clear. ### Response #### Success Response (200) - status (string) - The status of the clear operation. ``` ```APIDOC ## POST /uniget/v1/settings/reset ### Description Resets all UniGet settings to their default values. ### Method POST ### Endpoint /uniget/v1/settings/reset ### Parameters None ### Response #### Success Response (200) - status (string) - The status of the reset operation. ``` -------------------------------- ### Settings Access Methods Source: https://github.com/devolutions/unigetui/blob/main/CLAUDE.md Demonstrates how to get and set application settings using the Settings engine. Setting keys are defined in the 'Settings.K' enum. Boolean settings are managed by file existence, while string settings use file content. ```csharp Settings.Get(Settings.K.*) / Settings.Set(Settings.K.*, value) and Settings.GetValue(Settings.K.*) / Settings.SetValue(Settings.K.*, value) ``` -------------------------------- ### UniGetUI Command-Line Interface (CLI) Source: https://context7.com/devolutions/unigetui/llms.txt Interact with UniGetUI's package management features via a verb-based CLI. Supports package searching, installation, updating, uninstallation, listing, manager control, and operation lifecycle management. ```powershell # Quick start unigetui status unigetui app status # Search packages across all managers or a specific one unigetui package search --query "nodejs" unigetui package search --manager winget --query "git" --max-results 5 # Install a package (synchronous — waits for completion) unigetui package install --manager winget --id Git.Git # Install with options (async — returns operation id immediately) unigetui package install --manager dotnet-tool --id dotnetsay --version 2.1.4 ` --scope Global --elevated true --detach # Update a package unigetui package update --manager winget --id Microsoft.PowerToys # Uninstall unigetui package uninstall --manager scoop --id git --remove-data true # List installed packages unigetui package installed unigetui package installed --manager pip # List available updates unigetui package updates # Update all packages unigetui package update-all # Operation lifecycle unigetui operation list unigetui operation wait --id 42 --timeout 300 unigetui operation output --id 42 --tail 50 unigetui operation cancel --id 42 # Manager management unigetui manager list unigetui manager enable --manager chocolatey unigetui manager disable --manager vcpkg unigetui manager reload --manager winget unigetui manager set-executable --manager pip --path /usr/local/bin/pip3 ``` -------------------------------- ### Manage Settings via UniGetUI IPC HTTP API Source: https://context7.com/devolutions/unigetui/llms.txt Endpoints to retrieve all settings, get a specific setting by key, or set a setting's value. ```powershell # Settings curl "http://localhost:7058/uniget/v1/settings?token=$TOKEN" curl "http://localhost:7058/uniget/v1/settings/item?key=AutomaticallyUpdatePackages&token=$TOKEN" curl -X POST "http://localhost:7058/uniget/v1/settings/set?key=AutomaticallyUpdatePackages&enabled=true&token=$TOKEN" ``` -------------------------------- ### Interact with UniGetUI IPC HTTP API - Status and Token Source: https://context7.com/devolutions/unigetui/llms.txt Demonstrates how to start UniGetUI in headless TCP mode and perform an unauthenticated status check to retrieve a session token for subsequent authenticated requests. ```powershell # Start UniGetUI in headless TCP mode for easy curl testing UniGetUI.exe --headless --ipc-api-transport tcp --ipc-api-port 7058 # Unauthenticated status check curl http://localhost:7058/uniget/v1/status # {"running":true,"transport":"tcp","tcpPort":7058,"version":"2026.1.0","buildNumber":106,...} # All further requests require ?token= $TOKEN = (curl -s http://localhost:7058/uniget/v1/status | ConvertFrom-Json).token ``` -------------------------------- ### Initialize and Use Package Engine Entry Point (PEInterface) Source: https://context7.com/devolutions/unigetui/llms.txt Bootstrap the package engine by loading loaders and managers. Enumerate available managers, access platform-specific or cross-platform managers, trigger background reloads, perform lightweight repairs, and find candidate executable files. ```csharp using UniGetUI.PackageEngine; using UniGetUI.PackageEngine.PackageLoader; // Bootstrap (call once at app startup) PEInterface.LoadLoaders(); // creates DiscoverablePackagesLoader, InstalledPackagesLoader, etc. PEInterface.LoadManagers(); // calls Initialize() on all managers in parallel // Enumerate all managers foreach (var m in PEInterface.Managers) Console.WriteLine($"{m.Name} — enabled={m.IsEnabled()} ready={m.IsReady()}"); // Platform-specific managers (Windows) // PEInterface.WinGet, PEInterface.Scoop, PEInterface.Chocolatey, PEInterface.PowerShell // Cross-platform managers // PEInterface.Npm, PEInterface.Pip, PEInterface.DotNet, PEInterface.PowerShell7 // PEInterface.Cargo, PEInterface.Vcpkg // Linux managers (auto-selected by distro family from /etc/os-release) // PEInterface.Apt (Debian/Ubuntu), PEInterface.Dnf (Fedora/RHEL) // PEInterface.Pacman (Arch), PEInterface.Snap, PEInterface.Flatpak // Trigger a background reload of installed packages _ = InstalledPackagesLoader.Instance.ReloadPackages(); _ = UpgradablePackagesLoader.Instance.ReloadPackages(); // Attempt a lightweight repair on a manager (e.g., reconnect WinGet COM API) PEInterface.WinGet.AttemptFastRepair(); // Find all candidate executable files for a manager IReadOnlyList candidates = PEInterface.Pip.FindCandidateExecutableFiles(); // e.g. ["/usr/bin/pip", "/usr/local/bin/pip3"] ``` -------------------------------- ### Using IPackage Interface Source: https://context7.com/devolutions/unigetui/llms.txt Demonstrates how to use the IPackage interface to access package identity, version, update status, icons, and manage update ignore rules. Assumes a package object is already obtained. ```csharp using UniGetUI.PackageEngine.Interfaces; using UniGetUI.PackageEngine.Enums; // Assume 'package' is obtained from manager.FindPackages() or GetInstalledPackages() IPackage package = PEInterface.WinGet.FindPackages("git")[0]; // Identity and version Console.WriteLine(package.Name); // "Git" Console.WriteLine(package.Id); // "Git.Git" Console.WriteLine(package.VersionString); // "2.44.0" Console.WriteLine(package.IsUpgradable); // false / true // Hash-based identity comparison IPackage other = PEInterface.WinGet.GetInstalledPackages() .First(p => p.Id == "Git.Git"); Console.WriteLine(package.IsEquivalentTo(other)); // true (same id+source+manager) Console.WriteLine(package.GetHash() == other.GetHash()); // true // Icon Uri iconUrl = package.GetIconUrl(); // always-valid file:// or ms-appx:// URI Uri? iconOrNull = package.GetIconUrlIfAny(); // Screenshots IReadOnlyList screenshots = package.GetScreenshots(); // Ignore update rules await package.AddToIgnoredUpdatesAsync(); // ignore all updates await package.AddToIgnoredUpdatesAsync("2.45.0"); // ignore a specific version bool isIgnored = await package.HasUpdatesIgnoredAsync(); string ignoredVersion = await package.GetIgnoredUpdatesVersionAsync(); // "*" or "2.45.0" await package.RemoveFromIgnoredUpdatesAsync(); // Cross-collection lookup IReadOnlyList installed = package.GetInstalledPackages(); IPackage? upgradable = package.GetUpgradablePackage(); // Serialization for bundle export SerializablePackage serialized = await package.AsSerializableAsync(); // Installation options InstallOptions opts = await package.GetInstallOptions(); Console.WriteLine($"RunAsAdmin: {opts.RunAsAdministrator}"); ``` -------------------------------- ### Perform UniGetUI Backups via CLI Source: https://context7.com/devolutions/unigetui/llms.txt Commands to create local backups and initiate GitHub or cloud backup processes. ```bash unigetui backup local create ``` ```bash unigetui backup github login start --launch-browser ``` ```bash unigetui backup cloud create ``` -------------------------------- ### Optional: Disable Signer Thumbprint Check Source: https://github.com/devolutions/unigetui/blob/main/testing/UPDATE-TESTING.md Enables a registry override to skip the signer thumbprint check. Use this only when testing with locally generated, unsigned installers or installers signed with a non-Devolutions certificate. ```powershell Set-ItemProperty -Path 'HKLM:\Software\Devolutions\UniGetUI' -Name 'UpdaterSkipSignerThumbprintCheck' -Type DWord -Value 1 ``` -------------------------------- ### Packages API Source: https://github.com/devolutions/unigetui/blob/main/docs/IPC.md Endpoints for searching, managing, and installing packages. ```APIDOC ## GET /uniget/v1/packages/search ### Description Searches for packages. ### Method GET ### Endpoint /uniget/v1/packages/search ### Parameters #### Query Parameters - **query** (string) - Required - The search query. - **manager** (string) - Optional - The package manager to search within. - **maxResults** (integer) - Optional - The maximum number of results to return. ### Response #### Success Response (200) - **packages** (array) - A list of found packages. ``` ```APIDOC ## GET /uniget/v1/packages/installed ### Description Retrieves a list of installed packages. ### Method GET ### Endpoint /uniget/v1/packages/installed ### Parameters #### Query Parameters - **manager** (string) - Optional - The package manager to query. ### Response #### Success Response (200) - **packages** (array) - A list of installed packages. ``` ```APIDOC ## GET /uniget/v1/packages/updates ### Description Retrieves a list of upgradable packages. ### Method GET ### Endpoint /uniget/v1/packages/updates ### Parameters #### Query Parameters - **manager** (string) - Optional - The package manager to query. ### Response #### Success Response (200) - **packages** (array) - A list of upgradable packages. ``` ```APIDOC ## GET /uniget/v1/packages/details ### Description Retrieves details for specified packages. ### Method GET ### Endpoint /uniget/v1/packages/details ### Parameters #### Query Parameters - **packageActionQuerySet** (object) - Required - A set of package identifiers and actions. ### Response #### Success Response (200) - **packageDetails** (array) - Details for the requested packages. ``` ```APIDOC ## GET /uniget/v1/packages/versions ### Description Retrieves installable versions for specified packages. ### Method GET ### Endpoint /uniget/v1/packages/versions ### Parameters #### Query Parameters - **packageActionQuerySet** (object) - Required - A set of package identifiers and actions. ### Response #### Success Response (200) - **packageVersions** (array) - Installable versions for the requested packages. ``` ```APIDOC ## GET /uniget/v1/packages/ignored ### Description Lists packages that have ignored-update rules. ### Method GET ### Endpoint /uniget/v1/packages/ignored ### Parameters None ### Response #### Success Response (200) - **ignoredPackages** (array) - A list of packages with ignored-update rules. ``` ```APIDOC ## POST /uniget/v1/packages/ignore ### Description Adds an ignored-update rule for a package. ### Method POST ### Endpoint /uniget/v1/packages/ignore ### Parameters #### Request Body - **packageActionQuerySet** (object) - Required - A set of package identifiers and actions. ### Response #### Success Response (200) - **message** (string) - Confirmation message. ``` ```APIDOC ## POST /uniget/v1/packages/unignore ### Description Removes an ignored-update rule for a package. ### Method POST ### Endpoint /uniget/v1/packages/unignore ### Parameters #### Request Body - **packageActionQuerySet** (object) - Required - A set of package identifiers and actions. ### Response #### Success Response (200) - **message** (string) - Confirmation message. ``` ```APIDOC ## POST /uniget/v1/packages/download ### Description Starts or performs the download of specified packages. ### Method POST ### Endpoint /uniget/v1/packages/download ### Parameters #### Request Body - **packageActionQuerySet** (object) - Required - A set of package identifiers and actions. ### Response #### Success Response (200) - **message** (string) - Confirmation message. ``` ```APIDOC ## POST /uniget/v1/packages/install ### Description Starts or performs the installation of specified packages. ### Method POST ### Endpoint /uniget/v1/packages/install ### Parameters #### Request Body - **packageActionQuerySet** (object) - Required - A set of package identifiers and actions. ### Response #### Success Response (200) - **message** (string) - Confirmation message. ``` ```APIDOC ## POST /uniget/v1/packages/reinstall ### Description Reinstalls a specified package. ### Method POST ### Endpoint /uniget/v1/packages/reinstall ### Parameters #### Request Body - **packageActionQuerySet** (object) - Required - A set of package identifiers and actions. ### Response #### Success Response (200) - **message** (string) - Confirmation message. ``` ```APIDOC ## POST /uniget/v1/packages/update ### Description Updates a specified package. ### Method POST ### Endpoint /uniget/v1/packages/update ### Parameters #### Request Body - **packageActionQuerySet** (object) - Required - A set of package identifiers and actions. ### Response #### Success Response (200) - **message** (string) - Confirmation message. ``` ```APIDOC ## POST /uniget/v1/packages/uninstall ### Description Uninstalls a specified package. ### Method POST ### Endpoint /uniget/v1/packages/uninstall ### Parameters #### Request Body - **packageActionQuerySet** (object) - Required - A set of package identifiers and actions. ### Response #### Success Response (200) - **message** (string) - Confirmation message. ``` ```APIDOC ## POST /uniget/v1/packages/uninstall-then-reinstall ### Description Performs a repair flow for a specified package (uninstall then reinstall). ### Method POST ### Endpoint /uniget/v1/packages/uninstall-then-reinstall ### Parameters #### Request Body - **packageActionQuerySet** (object) - Required - A set of package identifiers and actions. ### Response #### Success Response (200) - **message** (string) - Confirmation message. ``` ```APIDOC ## POST /uniget/v1/packages/show ### Description Displays package details for UI purposes. ### Method POST ### Endpoint /uniget/v1/packages/show ### Parameters #### Query Parameters - **packageId** (string) - Required - The ID of the package. - **packageSource** (string) - Required - The source of the package. ### Response #### Success Response (200) - **message** (string) - Confirmation message. ``` ```APIDOC ## POST /uniget/v1/packages/update-all ### Description Updates all packages. Requires `OnUpgradeAll` handler to be wired. ### Method POST ### Endpoint /uniget/v1/packages/update-all ### Parameters None ### Response #### Success Response (200) - **message** (string) - Confirmation message. ``` ```APIDOC ## POST /uniget/v1/packages/update-manager ### Description Updates all packages for a specific manager. Requires `OnUpgradeAllForManager` handler to be wired. ### Method POST ### Endpoint /uniget/v1/packages/update-manager ### Parameters #### Query Parameters - **manager** (string) - Required - The package manager to update. ### Response #### Success Response (200) - **message** (string) - Confirmation message. ``` -------------------------------- ### Get Specific Setting Source: https://context7.com/devolutions/unigetui/llms.txt Retrieves the value of a specific UniGetUI setting. ```APIDOC ## GET /uniget/v1/settings/item ### Description Retrieves the value of a single, specific setting. ### Method GET ### Endpoint /uniget/v1/settings/item ### Parameters #### Query Parameters - **key** (string) - Required - The name of the setting to retrieve (e.g., "AutomaticallyUpdatePackages"). - **token** (string) - Required - The session token. ``` -------------------------------- ### Build and Test Commands for UniGetUI Source: https://github.com/devolutions/unigetui/blob/main/CLAUDE.md Commands for restoring dependencies, running tests with minimal output, and publishing a release build for the UniGetUI project. Ensure you are in the 'src/' directory before executing. ```shell # 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 ``` -------------------------------- ### Get Available Updates Source: https://context7.com/devolutions/unigetui/llms.txt Retrieves a list of packages that have available updates. ```APIDOC ## GET /uniget/v1/packages/updates ### Description Checks for and lists all installed packages that have available updates. ### Method GET ### Endpoint /uniget/v1/packages/updates ### Parameters #### Query Parameters - **token** (string) - Required - The session token. ``` -------------------------------- ### Get Operation Output Source: https://context7.com/devolutions/unigetui/llms.txt Retrieves the output logs for a specific operation, with an option to limit the number of lines. ```APIDOC ## GET /uniget/v1/operations/{operationId}/output ### Description Fetches the output logs generated by a specific operation. ### Method GET ### Endpoint /uniget/v1/operations/{operationId}/output ### Parameters #### Path Parameters - **operationId** (integer) - Required - The ID of the operation whose output is requested. #### Query Parameters - **tailLines** (integer) - Optional - The number of the most recent lines to retrieve. Defaults to 20. - **token** (string) - Required - The session token. ``` -------------------------------- ### Bundles API Source: https://github.com/devolutions/unigetui/blob/main/docs/IPC.md Endpoints for managing bundles, including listing, resetting, importing, exporting, adding, removing, and installing. ```APIDOC ## GET /uniget/v1/bundles ### Description Retrieves a list of available bundles. ### Method GET ### Endpoint /uniget/v1/bundles ### Parameters None ### Response #### Success Response (200) - **bundles** (array) - A list of bundle objects. ``` ```APIDOC ## POST /uniget/v1/bundles/reset ### Description Resets all bundles. ### Method POST ### Endpoint /uniget/v1/bundles/reset ### Parameters None ### Response #### Success Response (200) - **message** (string) - Confirmation message. ``` ```APIDOC ## POST /uniget/v1/bundles/import ### Description Imports a bundle. ### Method POST ### Endpoint /uniget/v1/bundles/import ### Parameters #### Request Body - **bundle import request body** (object) - The bundle import request payload. ### Response #### Success Response (200) - **message** (string) - Confirmation message. ``` ```APIDOC ## POST /uniget/v1/bundles/export ### Description Exports a bundle. ### Method POST ### Endpoint /uniget/v1/bundles/export ### Parameters #### Request Body - **bundle export request body** (object) - The bundle export request payload. ### Response #### Success Response (200) - **message** (string) - Confirmation message. ``` ```APIDOC ## POST /uniget/v1/bundles/add ### Description Adds a package to a bundle. ### Method POST ### Endpoint /uniget/v1/bundles/add ### Parameters #### Request Body - **bundle package request body** (object) - The request body for adding a package to a bundle. ### Response #### Success Response (200) - **message** (string) - Confirmation message. ``` ```APIDOC ## POST /uniget/v1/bundles/remove ### Description Removes a package from a bundle. ### Method POST ### Endpoint /uniget/v1/bundles/remove ### Parameters #### Request Body - **bundle package request body** (object) - The request body for removing a package from a bundle. ### Response #### Success Response (200) - **message** (string) - Confirmation message. ``` ```APIDOC ## POST /uniget/v1/bundles/install ### Description Installs a bundle. ### Method POST ### Endpoint /uniget/v1/bundles/install ### Parameters #### Request Body - **bundle install request body** (object) - The request body for installing a bundle. ### Response #### Success Response (200) - **message** (string) - Confirmation message. ``` -------------------------------- ### Using IPackageDetails Interface Source: https://context7.com/devolutions/unigetui/llms.txt Shows how to retrieve and load detailed metadata for a package using the IPackageDetails interface. Details are lazy-loaded and require an asynchronous Load() call. ```csharp using UniGetUI.PackageEngine.Interfaces; IPackage package = PEInterface.WinGet.FindPackages("vlc")[0]; IPackageDetails details = package.Details; // Load details asynchronously await details.Load(); if (details.IsPopulated) { Console.WriteLine(details.Description); Console.WriteLine(details.Publisher); Console.WriteLine(details.Author); Console.WriteLine(details.HomepageUrl); // Uri? Console.WriteLine(details.License); // "GPL-2.0" Console.WriteLine(details.LicenseUrl); // Uri? Console.WriteLine(details.InstallerUrl); // Uri? Console.WriteLine(details.InstallerHash); // "sha256:abc123..." Console.WriteLine(details.InstallerType); // ".exe", ".msi", etc. Console.WriteLine(CoreTools.FormatAsSize(details.InstallerSize)); // "42.0 MB" Console.WriteLine(details.UpdateDate); // "2024-03-15" Console.WriteLine(details.ReleaseNotes); Console.WriteLine(details.ReleaseNotesUrl); Console.WriteLine(string.Join(", ", details.Tags)); foreach (var dep in details.Dependencies) Console.WriteLine($" Dep: {dep.Name} {dep.Version} (mandatory={dep.Mandatory})"); } ``` -------------------------------- ### Navigate and Control UniGetUI App via CLI Source: https://context7.com/devolutions/unigetui/llms.txt Commands for navigating the UniGetUI application interface, showing its status, and quitting the application. Requires a GUI session. ```bash unigetui app navigate --page updates ``` ```bash unigetui app show ``` ```bash unigetui app quit ``` -------------------------------- ### Test IPC API Endpoint with Curl Source: https://github.com/devolutions/unigetui/blob/main/docs/IPC.md Sends a GET request to the /uniget/v1/status endpoint using curl. For authenticated endpoints, a 'token' query parameter is required. ```bash curl http://localhost:7058/uniget/v1/status ``` -------------------------------- ### Manage UniGetUI Sources via CLI Source: https://context7.com/devolutions/unigetui/llms.txt Commands to list, add, and remove package sources for UniGetUI using the Scoop manager. ```bash unigetui source list --manager scoop ``` ```bash unigetui source add --manager scoop --name extras --url https://github.com/ScoopInstaller/Extras ``` ```bash unigetui source remove --manager scoop --name extras ```