▸ brew bundle — but for dnf/yum

Declarative packages
for RHEL & Fedora.

Define your system dependencies once in a Yumfile. Install, sync, and audit them with a single command — idempotently, every time.

Install
$ curl -fsSL https://raw.githubusercontent.com/yum-bundle/yum-bundle/main/install.sh | sudo bash
Run
$ sudo yum-bundle

See it in action

One Yumfile. One command. Your packages, repos, keys, and modules — all applied.

Yumfile
# Core tools
yum vim
yum curl
yum git
 
# Enable EPEL
epel
 
# COPR repository
copr atim/lazygit
yum lazygit
 
# Node.js via DNF module
module nodejs:18
yum nodejs
 
# Custom repo with GPG key
key https://packages.example.com/gpg.key
baseurl https://packages.example.com/el9/
yum my-package
Output
$ sudo yum-bundle
 
→ Importing GPG keys...
example.com GPG key imported
 
→ Enabling EPEL...
epel-release installed
 
→ Enabling COPR repositories...
atim/lazygit enabled
 
→ Enabling DNF modules...
nodejs:18 enabled
 
→ Installing packages...
vim (already installed)
curl (already installed)
git → installing...
lazygit → installing...
nodejs → installing...
 
✓ Done. 4 installed, 2 already present.

Built for real workflows

Everything you need to manage system dependencies on RPM-based Linux — without the complexity.

📦

Declarative

One Yumfile describes your entire system dependency set. Commit it to git and share it.

🔄

Idempotent

Safe to run repeatedly. Already-installed packages, keys, and repos are skipped without error.

🔑

Keys & Repos

Import GPG keys, add .repo files, enable COPR, or add a baseurl — all from one file.

🧩

DNF Modules

Enable module streams like nodejs:18 or php:8.1 before installing packages.

🔀

Sync

yum-bundle sync installs missing packages and removes ones no longer in the Yumfile.

🚀

GitHub Actions

Native action with built-in caching and lockfile support for reproducible CI builds.

🩺

Doctor & Check

Validate your Yumfile and environment before applying. Machine-friendly JSON output for CI.

📤

Dump

Generate a Yumfile from your current system's installed packages in one command.

Command reference

All subcommands at a glance. See full docs for flags and examples.

Command Description
sudo yum-bundle Install all packages, repos, keys, and modules from the Yumfile
yum-bundle sync Install missing + remove packages no longer in the Yumfile
yum-bundle check Exit 0 only if all Yumfile entries are satisfied; JSON flag for CI
yum-bundle dump Print a Yumfile from currently-installed packages
yum-bundle lock Pin installed versions to Yumfile.lock for reproducible installs
yum-bundle outdated List packages with available upgrades (exit 1 if any)
yum-bundle doctor Validate the Yumfile and check environment prerequisites
yum-bundle cleanup Remove packages tracked by yum-bundle but no longer in the Yumfile

Why not just a shell script?

Idempotency is hard to get right. Repository and key management is error-prone. Scripts grow unmaintainable.

yum-bundle gives you a single declarative file and predictable behavior every time — no YAML, no DSL, no config management paradigm to learn. It works with your existing dnf/yum ecosystem, handles GPG keys, COPR repos, DNF modules, and gets out of your way.