Your package manager,
as you type.
A frame appears under your prompt and follows every keystroke. And one syntax for Homebrew, winget, scoop and pacman, instead of one each.
macOS
Windows
Omarchy
It follows your typing.
Type a package-manager command and the frame appears on its own, narrowing down with every letter. Nothing to trigger, nothing to remember.
- ⇥ inserts the current candidate
- ↓ enters the list
- ↑ moves up, then hands the keyboard back to the shell
- ^G closes it for this line
- ^R filters by regex instead of by prefix
Your arrow keys are never taken over. Until the popup holds the keyboard, ↑ and ↓ stay your shell history — where they belong.
Not only package managers. Type ssh, scp or sftp and the popup offers the hosts of your ~/.ssh/config, each with its HostName alongside. jigger never opens the connection — it completes the line you will run yourself, and shows nothing at all when it has no host to offer. The SSH picker has a page of its own →
One vocabulary, every dialect.
jg install fd reaches whichever of Homebrew, winget, scoop or pacman knows fd — without you having to know which.
❯ jg ╭──────────────────────────────────────────────────────────╮ │❯ jigger jigger 0.21.0│ │ • cleanup │ │ • doctor │ │ • info │ │ • install │ │ │ │ ⇥ insert ↩ execute ↓ browse ^G close │ ╰──────────────────────────────────────────────────────────╯
- install
- uninstall
- upgrade
- list
- outdated
- search
- info
- source
- pin
- unpin
- cleanup
- doctor
The first seven work everywhere. The others exist only where the manager knows them — asking winget for cleanup, or pacman for source, fails cleanly, naming who would know how to do it.
Never an automatic choice. When a single manager knows the name, it wins silently. When several do, the picker opens and you decide — two packages sharing a name are not necessarily the same software. No setting changes that; --pm is the way to settle it in a script.
On Arch, pacman and yay are two doors onto the same database: yay drives, pacman reads. Whichever one you have, jg lists your packages once — never twice.
Three channels, one binary.
jigger sits between your shell and your package managers by three separate paths: it reads their catalogs to complete what you type, translates one vocabulary into each of their dialects, and counts pending upgrades in the background for your prompt.
Blue — completion reads, it never runs anything. Amber — the facade translates a verb, then lets the manager do the work and relays its output untouched. Green — the prompt: dashed where it runs in the background, solid where the hook only reads one line and costs nothing.
It stays out of the way.
-
Nothing slow while you type
Catalogs are cached and read from disk. A keystroke never waits on a package manager.
-
Your manager's output, untouched
Prompts, progress bars, elevation dialogs — jigger relays them as they are instead of parsing them away.
-
Made for pipes too
Every listing verb takes --json, so a script never has to read a table meant for humans.
A block in your prompt, if you want one.
Ready-made segments for oh-my-posh and starship: your manager's version, and how many packages are waiting — counted apart, and never on the prompt's critical path.
~ via 🐍 v3.14.7 🍺 6.0.17 🔬 5 📦 2 ❯
Set JIGGER_PROMPT=1 before loading the plugin, then paste the segment for your prompt and your manager — brew, pacman and Windows versions all ship with jigger.
And when you'd rather see than type.
Cocktails is the macOS app of the same family: your packages, their dependencies and your updates, at a glance. jigger works perfectly well without it — they are independent.
Visit the Cocktails site →Two lines, then one in your shell.
Homebrew on macOS and Linux, scoop on Windows, go install anywhere else. Then one source line in ~/.zshrc, or one Import-Module in your PowerShell profile.
The commands live on a page of their own, next to what to check when nothing shows up, the keys, and the settings worth knowing on day one.