나는 패키지 매니저를 기억하기 싫다. 리눅스에서도 brew처럼 설치하고 삭제하겠다. 팩맨이고 뭐고 몰라. 묻지 마. 그냥
xbrew install nomachine할 거야. 알아서 해줘.
That's the whole idea. xbrew install <thing> — it figures out where the thing
lives (brew? pacman? AUR? flatpak? a .dmg?), installs it, and remembers what
it used so xbrew uninstall <thing> just works. You never think about a
package manager again. Same commands on macOS, Arch, Debian/Ubuntu, and
RHEL/Amazon Linux.
xbrew install nomachine telegram slack # one or many
xbrew uninstall nomachine
xbrew listcurl -fsSL https://raw.githubusercontent.com/2lab-ai/xbrew/HEAD/install.sh | bashPrebuilt binary, no toolchain needed. Bleeding edge: append XBREW_CHANNEL=preview.
Update later with xbrew self-update.
| Platform | It tries, in order |
|---|---|
| macOS | Homebrew formula/cask → recipe (cask / .dmg) |
| Arch | recipe → Homebrew → pacman → any AUR package (makepkg) |
| Debian/Ubuntu | recipe → Homebrew → apt |
| RHEL/Amazon Linux | recipe → Homebrew → dnf/yum |
(See docs/PLATFORMS.md for detection and per-platform recipe fields.)
The first one that has your package wins, and the choice is written to
~/.xbrew/state.json. Already installed it by hand? xbrew install <name>
detects that and just adopts it into tracking — no rebuild, no reinstall. Uninstall reads that and calls the right remover
(brew uninstall, pacman -Rns, flatpak uninstall, or deletes the .app) —
so you don't have to remember which one installed it.
xbrew install <name>
xbrew uninstall <name>
xbrew list # what you installed, and how
xbrew bundle <manifest.yaml>... # install a whole manifest (Brewfile-style)
xbrew version <name> # installed version of a tracked package
xbrew info <name>
xbrew search <query>
xbrew self-update
xbrew bundle installs everything declared in one or more YAML manifests —
merged in order (e.g. a common file + a per-OS file), duplicates collapsed. It
registers trust: taps first (so brew-backed formulae resolve), installs each
xbrew: entry, and verifies optional version constraints.
trust:
- 2lab-ai/tap
xbrew:
- brew # no constraint = latest
- claude-code >= 2.1.204 # verified after install; also == > <= <
- telegram >= 6.9.3xbrew bundle software.yaml software.arch.yamlStuff that isn't a plain brew/pacman package is a tiny TOML recipe. A recipe is
authoritative — if one exists for a name, xbrew installs it that way instead
of guessing from a same-named brew/pacman package. Built-ins: brew, claude,
claude-code, nomachine, rustdesk, slack, sunshine, telegram — and
anything in the AUR works without a recipe at all. Add your own by dropping a
file in recipes/ (shipped) or ~/.xbrew/recipes/*.toml (local):
name = "nomachine"
description = "NoMachine remote desktop"
[arch]
aur = "nomachine" # or: pacman = "telegram-desktop", flatpak = "org.example.App"
[macos]
cask = "nomachine" # or: dmg = "https://.../App-arm64.dmg", app = "App.app"just check (fmt + clippy + test) before every commit. See CLAUDE.md
for architecture and the release flow. MIT licensed.