Skip to main content

🌍 Web Page | 💻 Source Code | 🚀 Releases

📦 ipm - Integrated Package Manager

A cross-platform tool that unifies CLI for various package managers, simplifies installation, updates, and removal of packages by standardizing commands.

ipm project banner

📌 About

ipm - Integrated Package Manager is a powerful, cross-platform tool designed to unify the command-line interface (CLI) commands for various package managers. It acts as a universal frontend, working on top of other package managers to provide a seamless and consistent experience for managing software packages across different operating systems.

In today's diverse development environments, developers, software engineers, and system engineers often face the challenge of dealing with multiple package managers, each with its own set of commands and interfaces. This can lead to inefficiencies, errors, and a steep learning curve, especially when switching between different platforms.

ipm aims to solve these issues by offering a single, unified CLI that abstracts away the complexities of individual package managers. Whether you're working on Windows, Linux, or macOS, ipm provides a consistent and intuitive interface for installing, updating, and removing software packages. By standardizing package management commands, ipm simplifies the workflow, reduces the potential for errors, and enhances productivity.

Terminal
$ ipm
Usage:
ipm [command]

Available Commands:
manager Manage package manager configurations
info Execute info command for apt
install Execute install command for apt
list Execute list command for apt
search Execute search command for apt
uninstall Execute uninstall command for apt
update Execute update command for apt
upgrade Execute upgrade command for apt
upgrade-all Execute upgrade-all command for apt
apk Run apk commands
apt Run apt commands
brew Run brew commands
choco Run choco commands
dnf Run dnf commands
emerge Run emerge commands
eopkg Run eopkg commands
npm Run npm commands
pip Run pip commands
pip3 Run pip3 commands
winget Run winget commands
yum Run yum commands
zypper Run zypper commands

Flags:
-h, --help help for ipm

Use "ipm [command] --help" for more information about a command.

🧠 Philosophy

The philosophy behind ipm is to create a tool that enhances the developer experience by providing a unified and consistent interface for package management across different platforms. This is achieved by abstracting the complexities of individual package managers.

🔑 Key Features

  • Cross-Platform Compatibility: Supports multiple operating systems including Windows, Linux, and macOS.
  • Unified Interface: Provides a single, consistent CLI interface for managing packages across different platforms.
  • Efficient Package Management: Simplifies the installation, update, and removal of software packages.
  • Customizable Configurations: Allows users to define custom commands and configurations for different package managers.
  • Extensible: Easily extendable to support additional package managers and custom commands.

📦 Supported Package Managers

Package ManagerEnabled (default)Disabled (default)
apk
apt
brew
cards
choco
dnf
emerge
eopkg
flatpak
guix
nala
nix-env
npm
opkg
pacman
pip
pip3
scoop
slackpkg
snap
winget
xbps
yum
zypper

🛠️ Installation

📦 Pre-built Binaries

Pre-built binaries for various platforms are available in the releases section. Download the appropriate binary for your platform and add it to your system's PATH.

⬇️ Download the Binary

Navigate to the releases page and download the binary for your operating system.

🚂 Move the Binary to a Directory

Move the downloaded binary to a directory of your choice.

🫵 Add the Binary to PATH

Add the directory containing the binary to your system's PATH. This allows you to run ipm from any terminal session.

🐧 Linux
Terminal
# Add the directory to your PATH
echo 'export PATH=$PATH:/path/to/ipm' >> ~/.bashrc
source ~/.bashrc
🍏 macOS
Terminal
# Add the directory to your PATH
echo 'export PATH=$PATH:/path/to/ipm' >> ~/.bashrc
source ~/.bashrc
🪟 Windows
Terminal
# Add the directory to your PATH
[System.Environment]::SetEnvironmentVariable(
"Path",
$env:Path + ";path\to\ipm",
[System.EnvironmentVariableTarget]::Machine
)

🏗️ Building from Source

To build ipm from source, you need to have Go installed on your system.

🌀 Clone the Repository

Terminal
git clone https://github.com/your-repo/ipm.git
cd ipm

🔨 Make Build

To build ipm, you can use the provided build scripts.

🐧 Linux (Shell Script)
  • Open a terminal.
  • Run the build script: ./scripts/build/build.sh
🍏 macOS (Shell Script)
  • Open a terminal.
  • Run the build script: ./scripts/build/build.sh
🪟 Windows (PowerShell Script)
  • Open a PowerShell terminal.
  • Run the build script: .\scripts\build\build.ps1.

These scripts will build the binaries for the multiple platforms and create archives (ZIP for Windows and TAR.GZ for other platforms) in the dist/release directory.

🐳 Dockerfiles

Dockerfiles are provided to build Docker images for ipm. These Dockerfiles are located in the dockerfiles directory.

🏗️ Building Docker Images

To build a Docker image for ipm, run the following command from project root:

Terminal
docker build -t ipm-<package-manager-name>:latest -f dockerfiles/<package-manager-name>/Dockerfile .

🚀 Running Docker Container

To run ipm Docker container:

Terminal
docker run --rm -it ipm-<package-manager-name>:latest /bin/sh

📋 Usage

🔍 Default Package Manager (auto-detected)

📝 Basic Commands

📃 List Installed Packages
Terminal
ipm list
🔎 Search for a Package
Terminal
ipm search <package-name>
📖 Check Information about a Package
Terminal
ipm info <package-name>
📥 Install a Package
Terminal
ipm install <package-name>
🔄 Update Index of the Package Manager
Terminal
ipm update
⬆️ Upgrade a Package
Terminal
ipm upgrade <package-name>
⬆️ Upgrade all Packages
Terminal
ipm upgrade-all
🗑️ Remove a package
Terminal
ipm uninstall <package-name>

💡 Example

To install the jq package:

Terminal
ipm install jq

🛠️ Custom Package Manager

📝 Basic Commands

📃 List Installed Packages
Terminal
ipm <package-manager> list
🔎 Search for a Package
Terminal
ipm <package-manager> search <package-name>
📖 Check Information about a Package
Terminal
ipm <package-manager> info <package-name>
📥 Install a Package
Terminal
ipm <package-manager> install <package-name>
🔄 Update Index of the Package Manager
Terminal
ipm <package-manager> update
⬆️ Upgrade a Package
Terminal
ipm <package-manager> upgrade <package-name>
⬆️ Upgrade all Packages
Terminal
ipm <package-manager> upgrade-all
🗑️ Remove a package
Terminal
ipm <package-manager> uninstall <package-name>

💡 Example

To install the fast-json-stringify package using npm:

Terminal
ipm npm install fast-json-stringify

⚙️ Configuration

ipm uses a JSON configuration file to define custom commands and settings for different package managers. The configuration file is located in the config directory.

🪞 Example Configuration

ipm/config/manager/config/apt.json
{
"enabled": true,
"commands": {
"info": "apt-cache show {{.Package}}",
"install": "apt-get install -y {{.Package}}",
"list": "dpkg --list",
"search": "apt-cache search {{.Package}}",
"uninstall": "apt-get remove -y {{.Package}}",
"update": "apt-get update",
"upgrade": "apt-get install --only-upgrade {{.Package}}",
"upgrade-all": "apt-get upgrade"
}
}

🙏 Acknowledgements

I would like to extend my heartfelt thanks to all the developers and contributors whose work has made this project possible. Your dedication and contributions to the open-source community are invaluable, and I am grateful for the tools, libraries, and frameworks that you have created and maintained.

🌟 Special Thanks

I would like to specifically acknowledge the developers of the following tools, frameworks and dependencies which are used in this project:

  • Go Language Team: For providing a powerful and efficient programming language that forms the backbone of this project.
  • Package Manager Developers: For creating and maintaining the various package managers that ipm integrates with, including apt, yum, brew, choco, npm, pip, and many others.
  • Library Authors: For the numerous libraries and tools that have been utilized in this project, enhancing its functionality and performance, specially:

Your hard work and commitment to excellence have made it possible for me to build ipm and provide a unified package management experience for developers across different platforms. Thank you for your contributions to the open-source ecosystem.

📄 Important Documents

📜 License

This project is licensed under the MIT License, allowing anyone to use, modify, and distribute it freely for personal or commercial purposes.