News thumbnail
Technology / Sun, 14 Jun 2026 MakeUseOf

If you're still using cd to navigate your terminal, you're doing it wrong

Setting up the engine is easyHowever, wiring it takes a minuteGetting zoxide running on your system is not a big deal, but it requires a quick configuration step before it behaves correctly. But think about how often you run cd ~/Downloads or wherever your downloads land, across how many terminal sessions per day. On Windows, you can install fzf with:Subscribe for newsletter tips on zoxide and shells Curious for more terminal tooling? On a fresh install, typing z project will do nothing if you have never navigated to a project folder since installing the tool. If you use a terminal only occasionally and mostly for one or two tasks, zoxide will probably feel like overkill.

I spend a significant portion of my workday inside the terminal, and for years, the cd command was my primary tool for navigating the file system. It was a tedious process of typing partial directory names, hitting the Tab key for auto-completion, and occasionally hitting backspace when I mistyped a path.

I accepted this friction as a normal routine of command-line life. Then I installed zoxide, one of those lightweight tools that should earn a permanent spot in your workflow because it acts as a smarter version of the traditional change-directory command — and I was mildly annoyed that I had ignored it for as long as I had.

Setting up the engine is easy

However, wiring it takes a minute

Getting zoxide running on your system is not a big deal, but it requires a quick configuration step before it behaves correctly. The tool is available through most major package managers, making the binary installation easy. If you are on Windows, you can use Scoop or the Windows Package Manager (Winget) to fetch the latest version:

winget install ajeetdsouza.zoxide

On macOS, using Homebrew handles it cleanly:

brew install zoxide

On Linux or WSL, the official install script is the most reliable path. The Debian and Ubuntu packages in the default repositories lag noticeably behind upstream, so if you're on either of those, reach for the script instead of apt :

curl -sSfL https://raw.githubusercontent.com/ajeetdsouza/zoxide/main/install.sh | sh

If you use Arch, you can use pacman -S zoxide , and Fedora 32 and above has it via dnf install zoxide . The binary lands quickly either way.

Now, installing the binary alone does nothing. You have to initialize zoxide in your shell config; this step actually wires it into your workflow. For Bash, add this to the end of ~/.bashrc :

eval "$(zoxide init bash)"

For Zsh, add this to the end of ~/.zshrc :

eval "$(zoxide init zsh)"

This line has to appear after compinit is called, or completions will not work correctly. If completions seem off after setup, running rm ~/.zcompdump*; compinit and restarting your shell usually clears it.

For the Fish shell — a tool that gives you the terminal features Bash forgot to add — the end of ~/.config/fish/config.fish gets this:

zoxide init fish | source

For PowerShell, find your profile path by running echo $profile , then add:

Invoke-Expression (& { (zoxide init powershell | Out-String) })

Once that's in place and the shell is reloaded, zoxide starts running silently in the background. Every directory you navigate to gets logged and scored, and you don't notice it. That's the point. After a day or two of normal work, the database has enough history actually to be useful.

With z working, cd should start feeling ancient

Interactive navigation is a superpower

The core behavior is that zoxide tracks a score for every directory you navigate to, and when you run z with a query, it jumps to the highest-ranked matching directory. In practice, this plays out beautifully. If I have been working in ~/dev/myapp/backend/src regularly, for example, I can type:

z src

And land there. If I have multiple directories with "src" in the name, I can narrow it down by providing multiple terms:

z myapp src

zoxide will jump to the highest-ranked directory matching both myapp and src. That covers the common situation where you clone several repositories with similar structures and do not want to specify the full path every time.

While you should absolutely master essential Bash shortcuts to fly through the terminal, here are a few movement patterns that stop being tedious once zoxide handles them:

z .. # moves up one directory level

z - # returns you to the previous directory

z downloads

That last one, z downloads, might sound trivial. But think about how often you run cd ~/Downloads or wherever your downloads land, across how many terminal sessions per day. It adds up faster than you expect.

When multiple matches need a tiebreaker, the zi command brings up an interactive selection interface powered by fzf, which is one of those hidden Linux commands that are ridiculously useful once you learn them. On Windows, you can install fzf with:

Subscribe for newsletter tips on zoxide and shells Curious for more terminal tooling? Subscribe to the newsletter for concise zoxide setup notes, practical shell snippets, and curated tool roundups. The newsletter focuses on zoxide and adjacent workflows through hands-on coverage and examples. Get Updates By subscribing, you agree to receive newsletter and marketing emails, and accept our Terms of Use and Privacy Policy . You can unsubscribe anytime.

winget install junegunn.fzf

This lets you choose from multiple matching directories rather than letting zoxide guess. It is especially useful when several project folders share a common keyword. Running:

zi project

Opens a fuzzy-search list of all matching paths in your history, sorted by how often you visit them, and lets you pick the one you want. fzf is an optional dependency for this. The minimum supported version of fzf for this integration is v0.51.0; check if you have an older install. If you do not have fzf at all, zoxide's core jumping functionality works fine without it, and zi will not be available.

You can also use z foo in Bash (4.4 and above), Fish, and Zsh to get inline interactive completions without switching to zi mode at all.

It is not flashy, which is exactly why it sticks

What makes zoxide worth writing about is not any single feature. It is the combination of a narrow scope and zero ceremony. You do not adopt a new workflow to use it. You do not give up your existing shell, your aliases, your keybindings, or your mental model of your filesystem. zoxide simply intercepts navigation and starts learning from it in the background while you work normally.

That said, a few honest caveats. zoxide is not a file manager and does not try to be. It has no visual interface, no tree view, nothing that replaces Ranger or a Linux file manager like Yazi if you want to explore unfamiliar territory. It also needs actual usage before it feels smart. On a fresh install, typing z project will do nothing if you have never navigated to a project folder since installing the tool. The history has to exist in its database first.

If you use a terminal only occasionally and mostly for one or two tasks, zoxide will probably feel like overkill. But if you spend real time in shells, cloning repos, editing configs, moving between workspaces, and jumping in and out of nested project directories, the history builds fast, and within a day or two, the tool starts anticipating exactly where you want to go.

© All Rights Reserved.