ajeetdsouza

    ajeetdsouza/zoxide

    A smarter cd command. Supports all major shells.

    cli
    autojump
    bash
    command-line
    command-line-tool
    elvish
    fasd
    fish
    fish-shell
    fzf
    hacktoberfest
    jump
    nushell
    powershell
    rust
    shell
    xonsh
    xontrib
    z
    zsh
    Rust
    MIT
    33.7K stars
    737 forks
    33.7K watching
    Updated 2/27/2026
    View on GitHub
    Backblaze Advertisement

    Loading star history...

    Health Score

    75

    Weekly Growth

    +0

    +0.0% this week

    Contributors

    1

    Total contributors

    Open Issues

    154

    Generated Insights

    About zoxide

    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
      AlmaLinuxdnf install zoxide
      Alpine Linux 3.13+Alpine Linux Packagesapk add zoxide
      Arch LinuxArch Linux Extrapacman -S zoxide
      CentOS Streamdnf install zoxide
      Debian 11+1Debian 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
      Linux Mintapt.cli.rs (unofficial)Setup the repository, then apt install zoxide
      Manjaropacman -S zoxide
      openSUSE TumbleweedopenSUSE Factoryzypper install zoxide
      Parrot OS1apt install zoxide
      Raspbian 11+1Raspbian Packagesapt install zoxide
      RHEL 8+dnf install zoxide
      Rhino LinuxPacstall Packagespacstall -I zoxide-deb
      Rocky Linuxdnf install zoxide
      Slackware 15.0+SlackBuildsInstructions
      SolusSolus Packageseopkg install zoxide
      Ubuntuapt.cli.rs (unofficial)Setup the repository, then apt 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 and its derivatives update their packages very slowly. If you're using one of these distributions, consider using the install script instead. 2 3

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

    Discover Repositories

    Search across tracked repositories by name or description