{"id":13602297,"url":"https://github.com/verseles/xpm","last_synced_at":"2026-01-05T06:27:53.856Z","repository":{"id":63435101,"uuid":"90639876","full_name":"verseles/xpm","owner":"verseles","description":"Universal package manager for any unix-like distro","archived":false,"fork":false,"pushed_at":"2023-06-20T21:48:57.000Z","size":1707,"stargazers_count":52,"open_issues_count":24,"forks_count":3,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-26T16:07:14.928Z","etag":null,"topics":["apk","apt","archlinux","aur","brew","cargo","centos","clearlinux","composer","emerge","fedora","hacktoberfest","macos","npm","pacman","pip","rhel","termux","unix","yarn"],"latest_commit_sha":null,"homepage":"https://xpm.link","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-4-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/verseles.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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,"publiccode":null,"codemeta":null}},"created_at":"2017-05-08T14:50:37.000Z","updated_at":"2025-06-16T01:31:05.000Z","dependencies_parsed_at":"2024-09-14T01:22:06.258Z","dependency_job_id":"8857dd82-3c97-4c3b-9185-aba31ae1c778","html_url":"https://github.com/verseles/xpm","commit_stats":{"total_commits":299,"total_committers":2,"mean_commits":149.5,"dds":0.06020066889632103,"last_synced_commit":"f912bd3a6ea4d33b057c920d67b1aca18eb0878c"},"previous_names":[],"tags_count":109,"template":false,"template_full_name":null,"purl":"pkg:github/verseles/xpm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/verseles%2Fxpm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/verseles%2Fxpm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/verseles%2Fxpm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/verseles%2Fxpm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/verseles","download_url":"https://codeload.github.com/verseles/xpm/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/verseles%2Fxpm/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262099717,"owners_count":23258668,"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":["apk","apt","archlinux","aur","brew","cargo","centos","clearlinux","composer","emerge","fedora","hacktoberfest","macos","npm","pacman","pip","rhel","termux","unix","yarn"],"created_at":"2024-08-01T18:01:19.585Z","updated_at":"2026-01-05T06:27:53.844Z","avatar_url":"https://github.com/verseles.png","language":"Dart","funding_links":[],"categories":["archlinux"],"sub_categories":[],"readme":"# xpm - uniX Package Manager\n\n[![CI](https://github.com/verseles/xpm/actions/workflows/ci.yml/badge.svg)](https://github.com/verseles/xpm/actions/workflows/ci.yml)\n\nA universal package manager for any unix-like distro including macOS. Rewritten in **Rust** for maximum performance and portability.\n\n## What is xpm?\n\nXPM is a package manager for unix systems like Linux, BSD, MacOS, etc. It can be a wrapper for native package managers or a package manager itself by using its way of installing packages. For the list of packages available, see [xpm-popular](https://github.com/verseles/xpm-popular).\n\n### Our key values\n\n- Easy to install, update, upgrade, remove, search (and filter)\n- No questions asked, can run in a non-interactive way\n- Easy to create new installers or a full repository\n- Be agnostic, following unix standards and relying on very known tools\n- Include many popular distros, including macOS and Android (termux)\n- Prefer native pm way and falls back to xpm way\n\n## Features\n\n- **Universal**: Works on Linux (Arch, Debian, Ubuntu, Fedora, openSUSE), macOS, and Android/Termux\n- **Fast**: Built with Rust for maximum performance (~3MB static binary)\n- **Unified**: Search and install packages from XPM repositories AND native package managers\n- **AUR Support**: Full AUR helper support (paru, yay) on Arch Linux\n- **Offline-first**: Local database with cached package metadata\n- **Script-based packages**: Simple bash scripts for package installation\n\n## Supported Operating Systems \u0026 Package Managers\n\n### 🎯 **Integrated Support** (Native PM with formatted search)\n- **Debian/Ubuntu** \u0026 derivatives → **APT**\n- **Arch Linux** → **Pacman** (with AUR support via **Paru** and **Yay**)\n\nThese systems get full native package manager integration with intelligent search, metadata extraction, and clean formatted output.\n\n### 📜 **Script-Based Support** (via installers)\nFor other systems, XPM provides script-based installation through the [xpm-popular](https://github.com/verseles/xpm-popular) repository:\n\n**Linux Distributions:**\n- **Fedora** → DNF\n- **openSUSE** → Zypper\n- **Clear Linux** → swupd\n- **Android (Termux)** → pkg\n- **Alpine Linux** → via custom scripts\n\n**macOS** → Homebrew (brew) - via scripts\n\n## Installation\n\n### From Source\n\n```bash\n# Clone the repository\ngit clone https://github.com/verseles/xpm.git\ncd xpm\n\n# Build\ncargo build --release\n\n# Install to /usr/local/bin\nsudo cp target/release/xpm /usr/local/bin/\n```\n\n### From Cargo\n\n```bash\ncargo install --git https://github.com/verseles/xpm.git\n```\n\n## Quick Start\n\n```bash\n# Check your system\nxpm check\n\n# Add the default repository (pulls from xpm-popular)\nxpm refresh\n\n# Search for packages (searches XPM + native PM)\nxpm search neovim\n\n# Install a package\nxpm install neovim\n\n# Remove a package\nxpm remove neovim\n```\n\n## Commands\n\n| Command | Alias | Description |\n|---------|-------|-------------|\n| `search` | `s` | Search for packages (XPM + native PM) |\n| `install` | `i` | Install a package |\n| `remove` | `rm` | Remove a package |\n| `refresh` | - | Refresh package database |\n| `upgrade` | - | Upgrade installed packages (coming soon) |\n| `get` | - | Download a file |\n| `file` | - | File operations (copy, move, delete, bin) |\n| `repo` | - | Repository management |\n| `checksum` | `hash` | Compute file checksums |\n| `shortcut` | - | Create desktop shortcuts |\n| `log` | - | Show installed packages |\n| `check` | - | Check system configuration |\n| `make` | - | Create a package (coming soon) |\n\n### Search Examples\n\n```bash\n# Basic search\nxpm search vim\n\n# Multiple terms\nxpm search text editor\n\n# Limit results\nxpm search rust --limit 10\n\n# JSON output (for scripts)\nxpm search go --json\n```\n\n## Architecture\n\nXPM is built as a Rust workspace with two crates:\n\n- **xpm-core**: Core library with database, OS abstraction, and package management\n- **xpm-cli**: Command-line interface\n\n### Key Components\n\n- **Native DB**: Fast, embedded database using native_db (redb backend)\n- **Async I/O**: Full async support with Tokio\n- **Git integration**: Uses git2 for repository management\n- **Native PM integration**: Seamless integration with apt, pacman, paru, yay\n\n## Creating Packages\n\nPackages are bash scripts with metadata headers:\n\n```bash\n#!/bin/bash\nreadonly xNAME=\"my-package\"\nreadonly xVERSION=\"1.0.0\"\nreadonly xTITLE=\"My Package\"\nreadonly xDESC=\"Description of my package\"\nreadonly xURL=\"https://example.com\"\n\nxARCHS=(x86_64 aarch64)\nxDEFAULT=(any)\n\ninstall_any() {\n    # Installation logic\n    echo \"Installing...\"\n}\n\nremove_any() {\n    # Removal logic\n    echo \"Removing...\"\n}\n\nvalidate() {\n    # Validation - return 0 if installed correctly\n    which my-package \u003e/dev/null\n}\n```\n\nSave as `my-package/my-package.bash` in your repository.\n\n## Repository Structure\n\n```\nmy-xpm-repo/\n├── package1/\n│   └── package1.bash\n├── package2/\n│   └── package2.bash\n└── ...\n```\n\n## Building from Source\n\n```bash\n# Development build\ncargo build\n\n# Release build (optimized)\ncargo build --release\n\n# Run tests\ncargo test\n\n# Run with verbose output\ncargo run -- --verbose check\n\n# Pre-commit checks (format + lint + test)\nmake precommit\n```\n\n## Container Testing\n\nTest xpm on different distributions using Podman:\n\n```bash\n# Build and test on Ubuntu\nmake test-ubuntu\n\n# Build and test on Arch Linux\nmake test-arch\n\n# Build and test all distros\nmake docker-test\n\n# Clean container images\nmake docker-clean\n```\n\n## Contributing\n\nContributions are welcome! Please:\n\n1. Fork the repository\n2. Create a feature branch\n3. Make your changes\n4. Run `cargo test` and `cargo clippy`\n5. Submit a pull request\n\n## License\n\nBSD-4-Clause\n\n## Credits\n\nBuilt with ❤️ by [Verseles](https://verseles.com)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fverseles%2Fxpm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fverseles%2Fxpm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fverseles%2Fxpm/lists"}