Guided tour
From nothing installed, to fluent.
Eleven steps, in order, each one building on the last. Steps 1 to 3 install jigger and wire it in; from step 4 on, nothing is ever installed again — you type, and you watch. Every command below follows the system you pick in the header, and the recordings are what actually happens, not mock-ups.
The two ways in are both here. You keep your own commands — brew, winget, pacman — and the popup appears over them, uninvited (steps 4 to 7). Or you use one syntax for all of them, jg (steps 8 and 9). Neither replaces the other, and step 11 shows the binary answering with no shell at all.
1
Install the binary.
One command on macOS and Windows, where the project publishes a package. On Arch there is none, so Go builds it — jigger has no runtime dependency beyond the managers themselves, and the compiled binary is the whole of it.
macOS
brew tap yves/cocktails https://gitlab.yg-devworks.com/yves/homebrew-cocktails.git
brew install jigger
Windows
scoop bucket add jigger https://gitlab.yg-devworks.com/yves/scoop-jigger.git
scoop install jigger
Omarchy
sudo pacman -S --needed go git zsh
go install gitlab.yg-devworks.com/yves/jigger@latest
export PATH="$HOME/go/bin:$PATH"
Why these URLs, what the formula builds, how to upgrade later: the Use it page carries the detail. This tour keeps to the shortest road.
2
Wire it into your shell.
The binary alone completes nothing. What draws the popup and watches your typing is a shell plugin, and it has to be loaded by your shell — once, in your startup file.
macOS
One line in ~/.zshrc, then exec zsh. It covers every manager the machine has — the plugin doesn't need to be told which.
source "$(brew --prefix jigger)/share/jigger/jigger.plugin.zsh"
Windows
The bucket installed the binary only. The module comes from the repository, so clone it first, then import it from $PROFILE and open a new tab.
git clone https://github.com/Yves848/jigger.git $HOME\git\jigger
Import-Module $HOME\git\jigger\shell\jigger.psm1
Omarchy
The plugin is not in the Go module — clone the repository, then source it from ~/.zshrc and run exec zsh.
git clone https://github.com/Yves848/jigger.git ~/git/jigger
source ~/git/jigger/shell/jigger.plugin.zsh
3
Check it took.
The version first, then who answers. An old binary shadowing a newer install in the PATH is the most painful failure to diagnose, and one line settles it.
macOS
jigger --version
which -a jigger
Windows
jigger --version
Get-Command jigger -All
Omarchy
jigger --version
which -a jigger
Nothing at all? The plugin says so when it refuses to load: a message at shell startup reports that the binary is missing from the PATH, or that it is too old for this plugin. It never fails silently.
4
Your own command, intercepted.
This is the moment worth understanding. You do not learn a new command: you type the one you already typed, and the frame appears under your prompt on its own, narrowing with every letter. Nothing to trigger, nothing to remember — and if you ignore it, your line runs exactly as it always did.
Open a fresh shell and type the line below without pressing Enter.
macOS
Windows
Omarchy
5
Choose, and insert.
Five keys, and they are the same everywhere — whichever manager is answering, and on all three systems.
- ⇥ inserts the current candidate
- ↓ enters the list, then moves down one candidate
- ↑ moves up; on the first candidate, hands the keyboard back to the shell
- ⏎ completes the last part and runs the line, in one keystroke
- ^G closes the popup for this line — ⇥ reopens it
Your arrow keys are never confiscated. Until the popup holds the keyboard, ↑ and ↓ remain your shell's history, popup open or not. What they will do is written in the frame's footer, so you never have to guess which mode you are in.
6
Filter harder: ^R.
Prefix matching runs out when you don't know how the name starts. ^R switches the filter — and only the filter: the line, the frame and the keys don't move, and the title says which mode is on.
Watch the list grow at the moment of the switch: the pattern is not anchored, so it matches anywhere in a name. Then the alternation cuts it down to four — something no prefix search can express. A pattern that doesn't compile matches nothing, and the frame says so rather than spilling the whole catalogue.
macOS
Windows
Omarchy
7
Complete, then run — for real.
⏎ completes the last part and launches the line, in a single keystroke. From that point on jigger does nothing at all: what scrolls past is the manager's own output, relayed as is — progress bars, prompts and elevation included.
macOS
Installing through the popup behaves the same on macOS, with brew answering. There is no recording, and there will not be one: it would install packages for real on the machine doing the filming. Switch to Windows above — it runs on a VM built for it, and the gesture is identical.
Windows
Omarchy
Same on Arch, with yay answering — its own AUR prompts relayed as is, since jigger does nothing at all once the line is running. There is no capture, and there will not be one: filming it means installing for real, which belongs on a dedicated machine. The Windows recording does exactly that.
8
The other way in: one syntax, jg.
Everything so far kept your manager's own words. jg speaks a single language for all of them: jg install fd reaches whichever manager knows fd, without you having to know which one. The facade only adds — brew install fd keeps working exactly as before, popup included.
When several managers know the same name, jigger never chooses for you: the picker opens and you decide. When none does, it says so, with the closest neighbours.
macOS
Windows
Omarchy
9
Same gesture, other verbs.
Nothing here is specific to installing. upgrade, search, list and outdated are completed and run the same way — twelve verbs in all, each translated into what your manager actually expects.
macOS
It is the same on macOS, with brew doing the upgrading — and no capture either, for the same reason: upgrading for real belongs on a dedicated machine.
Windows
Omarchy
Same gesture on Arch. Note that yay drives and pacman only reads, which is why jg install --pm pacman does not exist while yay is installed. No capture either, for the same reason: upgrading for real belongs on a dedicated machine.
10
Not only package managers.
Type ssh and a space: the popup offers the hosts of your ~/.ssh/config, each with its HostName alongside. Same frame, same keys — only the catalogue changed. jigger never opens the connection; it completes the line you will run yourself.
macOS
Windows
Omarchy
The SSH picker has a page of its own → — what it completes, what it never reads, and why a pattern is not a server.
11
Without the popup: calling jigger yourself.
The plugin is only a client. Every subcommand works on its own — which is the clearest way to see what is happening when something looks wrong, and the only way when there is no interactive shell at all: a script, a cron, a CI.
jigger complete "brew install fire"
The candidates, one per line — exactly what the popup would have drawn.
jigger render --line "brew ins" --cols 80
One popup frame, drawn once on standard output, metadata included.
jigger pick "brew uninstall 7z"
The full-screen picker — the same one JIGGER_LIVE=0 gives you on ⇥ if you would rather nothing ever appeared unasked.
jigger prompt
The cached state your prompt hook reads — how many upgrades are waiting, without a single network call.
jigger warm --all
Rebuilds the catalogues. Slow, and worth knowing about the day the frame says “building the catalog…” and never stops.
And to pick rows into a pipe, ask for it explicitly — --select draws the view on the terminal and sends only the chosen names down the pipe, one per line:
jg install $(jg search fd --select)
Nothing changes when the output isn't a terminal: jg list | grep fd prints the same plain table it always has, byte for byte, and --json is never paged — it is a machine contract.