Zoi
Advanced Package Manager & Environment Orchestrator.
Introduction
Zoi is an advanced package manager and environment orchestrator, designed to simplify package management and environment configuration across multiple operating systems. It's part of the Zillowe Development Suite (ZDS) and aims to streamline your development workflow by managing tools and project environments with ease.
Features
- Cross-Platform: Works seamlessly on Linux, macOS, and Windows.
- Just-in-Time Privilege Escalation: Automatically prompts for
sudoonly when system-wide operations are required, keeping your environment and caches cleanly in user-space. - Dynamic Package Definitions: Define packages with dynamic Lua scripts (
.pkg.lua) for maximum flexibility. - Universal Package Support: Install packages from pre-built binaries, compressed archives, or build them from source.
- ZoiOS Distro Engine: Bootstrap and manage entire Linux distributions declaratively. Includes generational rollbacks and transactional FHS views.
- Extensive Dependency Management: Integrates with over 40 system and language package managers (
apt,brew,cargo,npm,pip,go,bun, etc.). - Version Multiplexing via Intelligent Shims: Automatically switch between different versions of the same tool (e.g. Node.js 18 vs 20) based on your project context (
zoi.lua) or legacy configuration files (.nvmrc) through its extensible Lua plugin system. - Rich Dependencies: Define runtime and build dependencies with required, optional, and selectable options.
- Project Environments: Manage project tools with
zoi.luaand named tasks withzoi.yaml. - Repository-Based: Use official, community, or your own private/public Git-based repositories. Manage multiple registries.
- Secure & Verifiable: Verifies package integrity with checksums and authenticity with GPG signatures. Includes a built-in PGP key manager and handles configuration file updates safely.
- Advanced Dependencies: Supports virtual packages (
provides) and package replacement (replaces). - Versatile Package Types: Supports different types of packages:
Package: A standard software package.Collection: A meta-package that groups other packages together.App: A template for bootstrapping new projects (zoi create).Extension: A package to extend Zoi's own functionality or configuration.
- Local Package Development: A dedicated
zoi packagecommand set (build,bundle,install,doctor,init-lsp) to streamline creating, linting, and testing packages locally. - Advanced CLI Tools:
zoi man: Read package manuals in the terminal.zoi audit: Scan installed packages for known security vulnerabilities.zoi clone: Clone a package's git repository.zoi download: Download a package archive (.zpa) or source bundle (.zsa).zoi why: Understand why a package is installed.zoi rollback: Revert a package to its previous version or roll back the newest remaining transaction log.zoi pin: Pin a package to a specific version.zoi exec: Run a package's binary without installing it.zoi dev: Enter a project-specific development shell with all dependencies.
- Zoi Mini: A lightweight, zero-sync version for quick, one-off installations via
zm.shorzm.ps1. - Library Support: Core functionality is available as a Rust library to be integrated into other applications.
Getting Started
For the fastest path through installation, registry sync, package installation, project environments, and first package creation, start with the Quick Start guide.
The minimal flow is three steps:
-
Install Zoi: Choose one of the installation methods below.
-
Sync Repositories: Before you can install packages, you need to sync the package repositories.
zoi sync -
Install a Package: Now you can install any package you want. For example, to install
hello:zoi install @zillowe/hello
Common Workflows
Quick snippets for common tasks.
Setting up a new project
mkdir my-app && cd my-app
zoi use node@20 rust # Add and install tools
zoi dev # Enter environmentFinding a command
zoi provides magick # Finds 'imagemagick'
zoi provides libssl.so.3 # Finds 'openssl'Cloning a package source
zoi clone @zillowe/hello # Clones into 'hello' directory
zoi clone @zillowe/hello . # Clones into current directoryDebugging dependencies
zoi tree @core/linux # View full graph
zoi why openssl # See what requires itSafe Upgrades
zoi update --all --dry-run # See what will change
zoi update --all # Apply changes
zoi rollback --last-transaction # Undo if brokenBuilding a Distribution (ZoiOS)
# Bootstrap ZoiOS onto a new disk or directory
sudo zoi system distro build --target /mnt --config ./system.lua
# Enter chroot and manage system generations
sudo zoi system apply
sudo zoi system rollback 42Forcing a source build
zoi install --build --type source htop # Force rebuild from sourceZoi Mini
Zoi Mini is a lightweight, zero-sync version of Zoi that allows you to install packages from the official Zoidberg registry without installing the full Zoi suite. It's designed for quick, one-off installations and as-a-service scenarios. It supports basic package management commands: install, update, uninstall, and list.
Quick Start (Zero-Install)
You can install any package from the Zoidberg registry using a single command:
Linux / macOS :
curl -fsSL https://zillowe.pages.dev/zm.sh | sh -s -- i @zillowe/helloWindows (amd64):
powershell -c "irm zillowe.pages.dev/zm.ps1 | iex" -args "i @zillowe/hello"This will download the zoi-mini binary to a temporary location, resolve the package metadata dynamically, and perform the installation.
Installation
You can install Zoi using a package manager, an installer script, or by building it from source.
Scripts
You can also use our installer scripts for a quick setup.
Linux / macOS :
curl -fsSL https://zillowe.pages.dev/scripts/zoi/install.sh | bashOr if you want a truly safe way to run this script use ZSM.
curl -fsSL https://zillowe.pages.dev/scripts/zoi/install.zsm | zsmWindows:
powershell -c "irm zillowe.pages.dev/scripts/zoi/install.ps1|iex"Package Managers
Linux
Install Zoi on Linux distros.
Arch Linux (AUR)
Install zoi-bin (Pre-compiled binary) or zoi (built from source) from the AUR using your favorite helper (e.g. yay, paru):
yay -S zoi-binOr manually without any helpers:
git clone https://aur.archlinux.org/zoi-bin.git
cd zoi-bin
makepkg -siDebian / Ubuntu (.deb)
Download the .deb package for your architecture from the latest release and install it using apt or dpkg:
# Using apt (recommended, handles dependencies)
sudo apt install ./zoi-*.deb
# Using dpkg
sudo dpkg -i zoi-*.debFedora / RHEL (.rpm)
Download the .rpm package for your architecture from the latest release and install it using dnf or rpm:
# Using dnf (recommended)
sudo dnf install ./zoi-*.rpm
# Using rpm
sudo rpm -i zoi-*.rpmFedora (COPR)
Install zoi from Fedora COPR (Supports Fedora 43, 44, Rawhide, CentOS Stream 9/10, EPEL 9, and openSUSE Tumbleweed):
sudo dnf copr enable zillowez/zoi
sudo dnf install zoiFedora (Terra)
Install zoi-rs on Fedora from Terra repo (not maintained by us so updates can be late, uses Crates.io version):
# add terra repo
dnf install --nogpgcheck --repofrompath 'terra,https://repos.fyralabs.com/terra$releasever' terra-release
# install Zoi
sudo dnf install zoi-rsMore information and instructions for using Terra are available here.
macOS
Install Zoi on macOS.
Homebrew
Install Zoi using Homebrew (Also supports linux):
brew install zillowe/tap/zoiWindows
Install Zoi on Windows.
Scoop
Install Zoi using Scoop:
scoop bucket add zillowe https://github.com/zillowe/scoop.git
scoop install zoiCrates.io
You can install zoi directly from crates.io using cargo:
cargo install zoi-rsNPM
You can install @zillowe/zoi from npm also.
npx @zillowe/zoibunx @zillowe/zoipnpm dlx @zillowe/zoiyarn dlx @zillowe/zoiBuild from Source
If you prefer, you can build Zoi from source. You'll need Rust installed.
Build the release binary:
# For Linux/macOS
./scripts/build-release.sh
# For Windows
./scripts/build-release.ps1Install it locally:
./configure
just build
sudo just installDependencies Support
What dependency installation we support.
| Manager | Ecosystem / OS | Example |
|---|---|---|
zoi | Zoi | zoi:my-other-package |
native | System's native package manager | native:openssl |
apt | Debian, Ubuntu, etc. | apt:libssl-dev |
pacman | Arch Linux | pacman:base-devel |
aur | Arch Linux (AUR) | aur:visual-studio-code-bin |
brew | macOS (Homebrew) | brew:node |
scoop | Windows | scoop:git |
snap | Linux (Snapcraft) | snap:node |
flatpak | Linux (Flathub) | flatpak:org.gimp.GIMP |
npm | Node.js | npm:typescript |
bun | Bun | bun:elysia |
deno | Deno | deno:npm-chalk or deno:jsr-@std/bytes (the - instead of : is important) |
jsr | JavaScript Registry | jsr:@std/http |
pip | Python | pip:requests |
nix | NixOS / Nix | nix:nixpkgs.hello |
And many more.
For more dependencies and information please visit the Dependencies Page.
Some of the package manager are OS specific, so when a dependency is in that package manager it only installs it for that OS.
But some other package managers like npm, it installs the dependency if the package manager is available.
Usage
Here are some common commands to get you started.
-
Install a package:
zoi install <package_name> -
Uninstall a package:
zoi uninstall <package_name> -
Update packages:
# Update all installed packages zoi update --all # Update specific packages zoi update <package1> <package2> -
Search for a package:
zoi search <term> -
Show package details:
zoi show <package_name> -
Run a project command:
# Run a command defined in zoi.yaml zoi run <command_alias> -
Enter a development shell:
# Enter a subshell with project dependencies available zoi dev -
Add a new repository:
# Interactively zoi repo add # By name from the default registry zoi repo add <repo_name> # From a git repo URL zoi repo add https://github.com/<user_name>/<repo_name>.git -
Update Zoi to the latest version:
zoi upgrade
See the full list of features.
Guides
To learn how to use Zoi in more advanced scenarios see guides.
Contributing
We welcome contributions from the community! If you'd like to contribute, please read our Contributing Guidelines for more information.
New features, enhancements and bug reports are welcome.
Repositories & Mirrors
Zoi is hosted on multiple forges. The primary locations and mirrors are:
-
Zoi Source Code
-
Packages Database (Zoidberg)
FAQ
You can create a .pkg.lua file that defines your package. This file includes metadata like the package name, version, description, and installation instructions. For a complete guide, please visit the Creating Packages guide.
To learn how to publish a package to the official repositories or your own, please visit the Publishing Packages guide.
If the package maintainer has provided a man URL in the package definition, you can run zoi man <package-name> to view it in your terminal.
You can add a new repository using the zoi repo add command. You can run it
without arguments for an interactive prompt, or provide the name of the
repository to add it directly.
Zoi is designed to be cross-platform. Mainly supports Linux, macOS and Windows, and amd64 and arm64 architectures.
Yes, Zoi supports installing dependencies from a wide range of other package
managers like brew, winget, scoop, npm, cargo, pip, and many more.
These are defined in the dependencies section of a packags's .pkg.lua
file.
You can append a version or channel after an '@' in the source string.
Examples: zoi install [email protected] or use channels defined in versions
like my-app@stable. You can also pin a resolved version to prevent updates:
zoi pin my-app VERSION and later zoi unpin my-app.
Use zoi exec <package>. Zoi resolves the package and its dependencies
into an ephemeral environment and runs the binary directly. Use --bin
to specify which binary for multi-binary packages. Sandboxed packages
are automatically wrapped with bwrap.
zoi dev is used to enter a persistent development subshell. It automatically
ensures all packages in your zoi.yaml are installed locally and sets up
environment variables like PATH, LD_LIBRARY_PATH, and CPATH so you can
immediately start compiling or running your code. zoi env is more focused on
running specific setup scripts or one-off environment configurations.
Add it with zoi repo add https://github.com/you/your-zoi-repo.git.
Install packages from it using @git/<repo-name>/<pkg-name>.
List/remove cloned git repos with zoi repo git ls and
zoi repo git rm <repo-name>.
Binaries are placed in ~/.zoi/pkgs/store/<name>/bin and linked into
~/.zoi/pkgs/bin. Zoi attempts to add this to your shell PATH on Unix and user PATH on Windows.
If commands are not found, run zoi shell <shell> to configure your shell, or add ~/.zoi/pkgs/bin to your PATH manually.
Pass --yes to installation commands to auto-accept confirmations and
optional dependency prompts. To install all optional dependencies without
being prompted, use --all-optional.
Use the full path in the source, e.g. @core/linux/amd64/nvidia-driver.
Run zoi upgrade. You can use zoi upgrade --force to upgrade even if you are on the latest version, and zoi upgrade --tag <tag> or zoi upgrade --branch <branch> to target a specific release.
If an update causes issues, you can revert to the previously installed version using zoi rollback <package-name>. Zoi automatically creates a backup before upgrading a package.
Zoi automatically keeps a record of all your installed packages in a JSON file
at ~/.zoi/pkgs/zoi.lock. You can back up this file. To restore all your
packages on a new system, simply run zoi install /path/to/your/zoi.lock.
We believe in privacy by design. Zoi does not collect any data by default. You can choose to opt-in to our anonymous telemetry to help us improve the application. To learn more about what we collect and why, please see our Telemetry & Analytics page.
2026 © All Rights Reserved.
- All the content is available under CC BY-SA 4.0, expect where otherwise stated.
- Source code is available on GitLab, licensed under Apache 2.0.
Last updated on
