Home

Awesome

<!-- markdownlint-configure-file { "MD013": { "code_blocks": false, "tables": false }, "MD033": false, "MD041": false } --> <div align="center">

<sup>Special thanks to:</sup>

<a href="https://www.warp.dev/?utm_source=github&utm_medium=referral&utm_campaign=zoxide_20231001"> <div> <img src="contrib/warp.png" width="230" alt="Warp" /> </div> <b> Warp is a modern, Rust-based terminal with AI built in so you and your team can build great software, faster. </b> <div> <sup>Visit <u>warp.dev</u> to learn more.</sup> </div> </a> <hr />

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.<br /> zoxide works on all major shells.

Getting startedInstallationConfigurationIntegrations

</div>

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.

    <details> <summary>Linux / WSL</summary>

    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 <br /> 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 <br /> 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
    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
    Ubuntu 21.04+1Ubuntu Packagesapt install zoxide
    Void LinuxVoid Linux Packagesxbps-install -S zoxide
    </details> <details> <summary>macOS</summary>

    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 <br /> 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
    
    </details> <details> <summary>Windows</summary>

    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
    
    </details> <details> <summary>BSD</summary>

    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
    
    </details> <details> <summary>Android</summary>

    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
    
    </details>
  2. Setup zoxide on your shell

    To start using zoxide, add it to your shell.

    <details> <summary>Bash</summary>

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

    eval "$(zoxide init bash)"
    
    </details> <details> <summary>Elvish</summary>

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

    eval (zoxide init elvish | slurp)
    

    Note zoxide only supports elvish v0.18.0 and above.

    </details> <details> <summary>Fish</summary>

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

    zoxide init fish | source
    
    </details> <details> <summary>Ksh</summary>

    Add this to the <ins>end</ins> of your config file (usually ~/.kshrc):

    # ksh93
    eval "$(zoxide init ksh)"
    
    # mksh, oksh, etc.
    eval "$(zoxide init ksh --hook=prompt)"
    
    </details> <details> <summary>Nushell</summary>

    Add this to the <ins>end</ins> 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 <ins>end</ins> of your config file (find it by running $nu.config-path in Nushell):

    source ~/.zoxide.nu
    

    Note zoxide only supports Nushell v0.89.0+.

    </details> <details> <summary>PowerShell</summary>

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

    Invoke-Expression (& { (zoxide init powershell | Out-String) })
    
    </details> <details> <summary>Xonsh</summary>

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

    execx($(zoxide init xonsh), 'exec', __xonsh__.ctx, filename='zoxide')
    
    </details> <details> <summary>Zsh</summary>

    Add this to the <ins>end</ins> 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.

    </details> <details> <summary>Any POSIX shell</summary>

    Add this to the <ins>end</ins> of your config file:

    eval "$(zoxide init posix --hook prompt)"
    
    </details>
  3. Install fzf <sup>(optional)</sup>

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

    Note zoxide only supports fzf v0.33.0 and above.

  4. Import your data <sup>(optional)</sup>

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

    <details> <summary>autojump</summary>

    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
    </details> <details> <summary>fasd, z, z.lua, zsh-z</summary>

    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
    </details> <details> <summary>ZLocation</summary>

    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
    
    </details>

Configuration

Flags

When calling zoxide init, the following flags are available:

Environment variables

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

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
telescope.nvimFuzzy finder for Neovimtelescope-zoxide
ttmux session managerNatively supported
tmux-session-wizardtmux 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
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.