Back to Search
ajeetdsouza

ajeetdsouza/zoxide

A smarter cd command. Supports all major shells.

32,745stars
719forks
32,745watchers
MIT License
Updated 1/21/2026
autojumpbashclicommand-linecommand-line-toolelvishfasdfishfish-shellfzfhacktoberfestjumpnushellpowershellrustshellxonshxontribzzsh

README.md

Special thanks to:

Sponsored by Warp
Warp, built for coding with multiple AI agents.
Available for macOS, Linux, and Windows.
Visit warp.dev to learn more.

zoxide

crates.io Downloads Built with Nix

zoxide is a smarter cd command, inspired by z and autojump.

It remembers which directories you use most frequently, so you can "jump" to them in just a few keystrokes.
zoxide works on all major shells.

Getting startedInstallationConfigurationIntegrations

Getting started

Tutorial

z foo              # cd into highest ranked directory matching foo
z foo bar          # cd into highest ranked directory matching foo and bar
z foo /            # cd into a subdirectory starting with foo

z ~/foo            # z also works like a regular cd command
z foo/             # cd into relative path
z ..               # cd one level up
z -                # cd into previous directory

zi foo             # cd with interactive selection (using fzf)

z foo<SPACE><TAB>  # show interactive completions (zoxide v0.8.0+, bash 4.4+/fish/zsh only)

Read more about the matching algorithm here.

Installation

zoxide can be installed in 4 easy steps:

  1. Install binary

    zoxide runs on most major platforms. If your platform isn't listed below, please open an issue.

    Linux / WSL

    The recommended way to install zoxide is via the install script:

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

    Or, you can use a package manager:

    DistributionRepositoryInstructions
    Anycrates.iocargo install zoxide --locked
    Anyasdfasdf plugin add zoxide https://github.com/nyrst/asdf-zoxide.git
    asdf install zoxide latest
    Anyconda-forgeconda install -c conda-forge zoxide
    Anyguixguix install zoxide
    AnyLinuxbrewbrew install zoxide
    Anynixpkgsnix-env -iA nixpkgs.zoxide
    Alpine Linux 3.13+Alpine Linux Packagesapk add zoxide
    Arch LinuxArch Linux Extrapacman -S zoxide
    Debian1Debian Packagesapt install zoxide
    Devuan 4.0+Devuan Packagesapt install zoxide
    Exherbo LinuxExherbo packagescave resolve -x repository/rust
    cave resolve -x zoxide
    Fedora 32+Fedora Packagesdnf install zoxide
    GentooGentoo Packagesemerge app-shells/zoxide
    Manjaropacman -S zoxide
    openSUSE TumbleweedopenSUSE Factoryzypper install zoxide
    Parrot OS1apt install zoxide
    Raspbian1Raspbian Packagesapt install zoxide
    Rhino LinuxPacstall Packagespacstall -I zoxide-deb
    Slackware 15.0+SlackBuildsInstructions
    SolusSolus Packageseopkg install zoxide
    Ubuntu1Ubuntu Packagesapt install zoxide
    Void LinuxVoid Linux Packagesxbps-install -S zoxide
    macOS

    To install zoxide, use a package manager:

    RepositoryInstructions
    crates.iocargo install zoxide --locked
    Homebrewbrew install zoxide
    asdfasdf plugin add zoxide https://github.com/nyrst/asdf-zoxide.git
    asdf install zoxide latest
    conda-forgeconda install -c conda-forge zoxide
    MacPortsport install zoxide
    nixpkgsnix-env -iA nixpkgs.zoxide

    Or, run this command in your terminal:

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

    zoxide works with PowerShell, as well as shells running in Cygwin, Git Bash, and MSYS2.

    The recommended way to install zoxide is via winget:

    winget install ajeetdsouza.zoxide
    

    Or, you can use an alternative package manager:

    RepositoryInstructions
    crates.iocargo install zoxide --locked
    Chocolateychoco install zoxide
    conda-forgeconda install -c conda-forge zoxide
    Scoopscoop install zoxide

    If you're using Cygwin, Git Bash, or MSYS2, you can also use the install script:

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

    To install zoxide, use a package manager:

    DistributionRepositoryInstructions
    Anycrates.iocargo install zoxide --locked
    DragonFly BSDDPortspkg install zoxide
    FreeBSDFreshPortspkg install zoxide
    NetBSDpkgsrcpkgin install zoxide

    Or, run this command in your terminal:

    curl -sS https://raw.githubusercontent.com/ajeetdsouza/zoxide/main/install.sh | bash
    
    Android

    To install zoxide, use a package manager:

    RepositoryInstructions
    Termuxpkg install zoxide

    Or, run this command in your terminal:

    curl -sS https://raw.githubusercontent.com/ajeetdsouza/zoxide/main/install.sh | bash
    
  2. Setup zoxide on your shell

    To start using zoxide, add it to your shell.

    Bash

    Add this to the end of your config file (usually ~/.bashrc):

    eval "$(zoxide init bash)"
    
    Elvish

    Add this to the end of your config file (usually ~/.elvish/rc.elv):

    eval (zoxide init elvish | slurp)
    

    Note zoxide only supports elvish v0.18.0 and above.

    Fish

    Add this to the end of your config file (usually ~/.config/fish/config.fish):

    zoxide init fish | source
    
    Nushell

    Add this to the end of your env file (find it by running $nu.env-path in Nushell):

    zoxide init nushell | save -f ~/.zoxide.nu
    

    Now, add this to the end of your config file (find it by running $nu.config-path in Nushell):

    source ~/.zoxide.nu
    

    Note zoxide only supports Nushell v0.89.0+.

    PowerShell

    Add this to the end of your config file (find it by running echo $profile in PowerShell):

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

    Add this to the end of your config file (usually ~/.tcshrc):

    zoxide init tcsh > ~/.zoxide.tcsh
    source ~/.zoxide.tcsh
    
    Xonsh

    Add this to the end of your config file (usually ~/.xonshrc):

    execx($(zoxide init xonsh), 'exec', __xonsh__.ctx, filename='zoxide')
    
    Zsh

    Add this to the end of your config file (usually ~/.zshrc):

    eval "$(zoxide init zsh)"
    

    For completions to work, the above line must be added after compinit is called. You may have to rebuild your completions cache by running rm ~/.zcompdump*; compinit.

    Any POSIX shell

    Add this to the end of your config file:

    eval "$(zoxide init posix --hook prompt)"
    
  3. Install fzf (optional)

    fzf is a command-line fuzzy finder, used by zoxide for completions / interactive selection. It can be installed from here.

    Note The minimum supported fzf version is v0.51.0.

  4. Import your data (optional)

    If you currently use any of these plugins, you may want to import your data into zoxide:

    autojump

    Run this command in your terminal:

    zoxide import --from=autojump "/path/to/autojump/db"
    

    The path usually varies according to your system:

    OSPathExample
    Linux$XDG_DATA_HOME/autojump/autojump.txt or $HOME/.local/share/autojump/autojump.txt/home/alice/.local/share/autojump/autojump.txt
    macOS$HOME/Library/autojump/autojump.txt/Users/Alice/Library/autojump/autojump.txt
    Windows%APPDATA%\autojump\autojump.txtC:\Users\Alice\AppData\Roaming\autojump\autojump.txt
    fasd, z, z.lua, zsh-z

    Run this command in your terminal:

    zoxide import --from=z "path/to/z/db"
    

    The path usually varies according to your system:

    PluginPath
    fasd$_FASD_DATA or $HOME/.fasd
    z (bash/zsh)$_Z_DATA or $HOME/.z
    z (fish)$Z_DATA or $XDG_DATA_HOME/z/data or $HOME/.local/share/z/data
    z.lua (bash/zsh)$_ZL_DATA or $HOME/.zlua
    z.lua (fish)$XDG_DATA_HOME/zlua/zlua.txt or $HOME/.local/share/zlua/zlua.txt or $_ZL_DATA
    zsh-z$ZSHZ_DATA or $_Z_DATA or $HOME/.z
    ZLocation

    Run this command in PowerShell:

    $db = New-TemporaryFile
    (Get-ZLocation).GetEnumerator() | ForEach-Object { Write-Output ($_.Name+'|'+$_.Value+'|0') } | Out-File $db
    zoxide import --from=z $db
    

Configuration

Flags

When calling zoxide init, the following flags are available:

  • --cmd

    • Changes the prefix of the z and zi commands.
    • --cmd j would change the commands to (j, ji).
    • --cmd cd would replace the cd command.
  • --hook <HOOK>

    • Changes how often zoxide increments a directory's score:

      HookDescription
      noneNever
      promptAt every shell prompt
      pwd (default)Whenever the directory is changed
  • --no-cmd

    • Prevents zoxide from defining the z and zi commands.
    • These functions will still be available in your shell as __zoxide_z and __zoxide_zi, should you choose to redefine them.

Environment variables

Environment variables2 can be used for configuration. They must be set before zoxide init is called.

  • _ZO_DATA_DIR

    • Specifies the directory in which the database is stored.

    • The default value varies across OSes:

      OSPathExample
      Linux / BSD$XDG_DATA_HOME or $HOME/.local/share/home/alice/.local/share
      macOS$HOME/Library/Application Support/Users/Alice/Library/Application Support
      Windows%LOCALAPPDATA%C:\Users\Alice\AppData\Local
  • _ZO_ECHO

    • When set to 1, z will print the matched directory before navigating to it.
  • _ZO_EXCLUDE_DIRS

    • Excludes the specified directories from the database.

    • This is provided as a list of globs, separated by OS-specific characters:

      OSSeparatorExample
      Linux / macOS / BSD:$HOME:$HOME/private/*
      Windows;$HOME;$HOME/private/*
    • By default, this is set to "$HOME".

  • _ZO_FZF_OPTS

    • Custom options to pass to fzf during interactive selection. See man fzf for the list of options.
  • _ZO_MAXAGE

    • Configures the aging algorithm, which limits the maximum number of entries in the database.
    • By default, this is set to 10000.
  • _ZO_RESOLVE_SYMLINKS

    • When set to 1, z will resolve symlinks before adding directories to the database.

Third-party integrations

ApplicationDescriptionPlugin
aercEmail clientNatively supported
alfredmacOS launcheralfred-zoxide
clinkImproved cmd.exe for Windowsclink-zoxide
emacsText editorzoxide.el
felixFile managerNatively supported
joshutoFile managerNatively supported
lfFile managerSee the wiki
nnnFile managernnn-autojump
rangerFile managerranger-zoxide
raycastmacOS launcherraycast-zoxide
rfmFile managerNatively supported
seshtmux session managerNatively supported
telescope.nvimFuzzy finder for Neovimtelescope-zoxide
tmux-session-wizardtmux session managerNatively supported
tmux-sessionxtmux session managerNatively supported
vim / neovimText editorzoxide.vim
xplrFile managerzoxide.xplr
xxhTransports shell configuration over SSHxxh-plugin-prerun-zoxide
yaziFile managerNatively supported
zabbFinds the shortest possible query for a pathNatively supported
zeshzellij session managerNatively supported
zsh-autocompleteRealtime completions for zshNatively supported

Footnotes

  1. Debian / Ubuntu derivatives update their packages very slowly. If you're using one of these distributions, consider using the install script instead. 2 3 4

  2. If you're not sure how to set an environment variable on your shell, check out the wiki.