UniGetUI

repository·main·Indexed 12 days ago

https://github.com/devolutions/unigetui

A cross-platform GUI that provides a unified interface for managing multiple CLI package managers, including WinGet, Scoop, Chocolatey, Homebrew, and APT. It allows users to discover, install, update, and uninstall software through a single application with support for bulk operations, automated updates, and a CLI for automation and IPC.

Tokens
11.5K
Snippets
28
Records
51
Agent score
98%

What's inside UniGetUI

  1. Overview of UniGetUI features

    main

    UniGetUI provides a unified GUI to manage software from multiple package managers. Key capabilities include:

    • Unified Management: Discover, install, update, and uninstall software from various managers (WinGet, Scoop, Chocolatey, Homebrew, APT, etc.) through one interface.
    • Bulk Operations: Perform actions on multiple packages simultaneously.
    • Metadata Inspection: View download URLs, publisher names, and download sizes before installing.
    • Automated Updates: Receive notifications for updates or set packages to update automatically. You can also skip specific versions or ignore updates for certain packages.
    • Customization: Configure specific installation options, architectures, or older versions for individual packages.
    • Portability & Backup: Export custom package lists for import on other machines, and backup your package list to a local file for easy recovery during migrations.
  2. Overview of the UniGetUI background IPC API

    main

    The UniGetUI background IPC API is a local automation API designed for local interaction (e.g., via the UniGetUI CLI), not for remote exposure. It exposes endpoints under the /uniget/v1/... path using one of two transport methods:

    1. Named-pipe transport (Default):
      • Windows: Uses Windows named pipes.
      • Non-Windows: Uses Unix domain sockets (typically resolving to /tmp/UniGetUI.IPC).
    2. TCP transport (Optional):
      • Binds to localhost only.

    All successful responses use JSON with camelCase property names.

  3. CLI Command grammar and compatibility notes

    main

    When using the UniGetUI CLI, keep the following syntax rules and aliases in mind:

    Noun Pluralization

    Command nouns accept both singular and plural forms (e.g., operation or operations, package or packages, manager or managers).

    Flag Aliases

    • --id maps to --package-id or --operation-id depending on the context.
    • --source maps to --package-source.

    Boolean and Async Options

    • Boolean options require explicit values, such as --enabled true or --wait false.
    • --detach is a shorthand for asynchronous package operations (equivalent to --wait false).

    Manager IDs

    When using the --manager flag, use the stable manager IDs rather than GUI labels. Supported IDs include: apt, bun, cargo, chocolatey, dnf, dotnet-tool, flatpak, homebrew, npm, pacman, pip, pwsh, scoop, snap, vcpkg, winget, and winps.

  4. Run UniGetUI in Headless Mode

    main

    UniGetUI can run without a GUI using the --headless flag. This exposes the automation API via IPC without opening a window.

    Supported Commands in Headless Mode

    • status, app status, app quit: Fully supported.
    • package update-all, package update-manager: May fail if they require GUI-side upgrade handlers.

    Unsupported Commands in Headless Mode

    • app show, app navigate: Fails because there is no window to show or navigate.
    • package show: UI-oriented and may be meaningless.

    Headless IPC Configuration

    Use these options to configure the IPC listener when running headless:

    • --ipc-api-transport {named-pipe|tcp}: Select transport (default: named-pipe).
    • --ipc-api-port <port>: Set the TCP port (if TCP transport is selected).
    • --ipc-api-pipe-name <name-or-path>: Set the pipe name or Unix socket path.
    # Start UniGetUI in headless mode using TCP on port 5000
    unigetui --headless --ipc-api-transport tcp --ipc-api-port 5000
  5. Understand headless session limitations

    main

    When running UniGetUI in a headless session, certain UI-centric endpoints are intentionally disabled and will return an HTTP 400 error with a descriptive message.

    The following endpoints will fail in headless mode:

    • POST /uniget/v1/app/show: No window exists to show.
    • POST /uniget/v1/app/navigate: No UI page stack exists to navigate.
    • POST /uniget/v1/packages/update-all: Fails unless the host has wired an OnUpgradeAll handler.
    • POST /uniget/v1/packages/update-manager: Fails unless the host has wired an OnUpgradeAllForManager handler.
  6. Authenticate requests with the UniGetUI IPC API

    main

    UniGetUI generates a unique per-session token at API startup, which is persisted with endpoint registration metadata.

    • GET /uniget/v1/status: No token required.
    • All other /uniget/v1/* endpoints: Require a token query parameter.

    Example authentication via query string: GET /uniget/v1/some-endpoint?token=YOUR_SESSION_TOKEN

  7. Install UniGetUI on Windows

    main

    UniGetUI is primarily designed for Windows 10 and 11. You can install it using several methods:

    1. Microsoft Store (Recommended): Search for UniGetUI in the Microsoft Store.
    2. Direct Installer: Download the .exe installer from GitHub Releases. Use UniGetUI.Installer.x64.exe for standard 64-bit systems.
    3. WinGet: Use the command line.
    4. Scoop: Requires the extras bucket.
    5. Chocolatey: Use the standard choco command.
    # Install via WinGet
    winget install --exact --id Devolutions.UniGetUI --source winget
    
    # Install via Scoop
    scoop bucket add extras
    scoop install extras/unigetui
    
    # Install via Chocolatey
    choco install unigetui
  8. Create a MSI wrapper for UniGetUI

    main

    If you need to deploy UniGetUI via Group Policy Objects (GPO), you can create a custom .msi wrapper using Visual Studio.

    Prerequisites

    Important: When using an MSI installer, dependencies are not installed automatically. You must ensure the target machines have the following installed:

    • Microsoft Visual C++ Redistributable 2015-2022 (x64)
    • Microsoft Edge WebView Runtime (x64)

    Setup Steps

    1. Install Visual Studio 2022 and the Microsoft Visual Studio Installer Projects 2022 extension.
    2. Clone the repository:
      git clone https://github.com/Devolutions/UniGetUI
    3. Download the desired installer version from the UniGetUI GitHub Releases.
    4. Move the downloaded .exe installer into the InstallerExtras/MsiCreator directory. The file must be renamed to exactly UniGetUI Installer.exe.
    5. Open the solution file MsiInstallerWrapper.sln in Visual Studio and build the solution.
    6. The build process will generate UniGetUISetup.msi and setup.exe. You can delete setup.exe if you only require the MSI.
    7. (Optional) Verify the installation by running UniGetUISetup.msi on a test machine.
    git clone https://github.com/Devolutions/UniGetUI
    # Move downloaded installer to InstallerExtras/MsiCreator/UniGetUI Installer.exe
  9. Refresh translation metadata and documentation

    main

    To update translated percentages, contributor metadata, and the translation documentation after making locale changes, run the Sync-TranslationMetadata.ps1 script with the -AllLanguages and -UpdateTranslationDoc flags. This process computes completion against the active English keys defined in lang_en.json.

    pwsh ./scripts/translation/Sync-TranslationMetadata.ps1 -AllLanguages -UpdateTranslationDoc
  10. Quick start with the UniGetUI CLI

    main

    The UniGetUI CLI allows you to interact with the automation session via command-line tools. Common tasks include checking status, searching for packages, and installing software using specific managers.

    Examples of common operations:

    • Check general status: unigetui status
    • Check application status: unigetui app status
    • Search for a package: unigetui package search --manager <manager-id> --query <query>
    • Install a package: unigetui package install --manager <manager-id> --id <package-id> --version <version> --scope <scope>
    • Wait for an operation to complete: unigetui operation wait --id <operation-id> --timeout <seconds>
    unigetui status
    unigetui app status
    unigetui package search --manager dotnet-tool --query dotnetsay
    unigetui package install --manager dotnet-tool --id dotnetsay --version 2.1.4 --scope Global
    unigetui operation wait --id 123 --timeout 300
  11. Contributing to UniGetUI translations

    main

    If you wish to contribute to the localization of UniGetUI, you can add or remove yourself from the contributor credits list for a specific language. Contributor credits are managed via the src/Languages/Data/Translators.json file. To make changes, please open a pull request to the repository.

    Note: Contributor credits are displayed in the application based on the data in this JSON file.

  12. Install UniGetUI on Linux

    main

    Linux builds are available via GitHub Releases. Choose the package format corresponding to your distribution:

    • Debian/Ubuntu-based: Use the .deb package.
    • Fedora/RHEL-based: Use the .rpm package.
    • Portable: Use the .tar.gz archive.

    Note: Replace x64 with arm64 in the filenames if using an ARM architecture.

    # Debian/Ubuntu-based distributions
    sudo apt install ./UniGetUI.linux-x64.deb
    
    # Fedora/RHEL-based distributions
    sudo dnf install ./UniGetUI.linux-x64.rpm
    
    # Portable archive
    tar -xzf UniGetUI.linux-x64.tar.gz
    ./UniGetUI