Command-line productivity booster, offers quick access to files and directories, inspired by autojump, z and v.
Quick Overview
Zoxide is a smarter cd command for your terminal, designed to help you navigate your filesystem more efficiently. It learns your habits and allows you to jump to frequently used directories without typing the full path.
Pros
Fast and efficient navigation through directories
Learns from your usage patterns automatically
Cross-platform support (Linux, macOS, Windows)
Written in Rust, offering excellent performance
Cons
Requires initial setup and integration with your shell
May take some time to build up an effective database of frequently used directories
Could potentially conflict with existing aliases or functions named 'z'
Might be overkill for users who don't frequently navigate complex directory structures
Code Examples
# Jump to a directory that contains 'Downloads'
z Downloads
# Jump to a directory that contains both 'projects' and 'rust'
z projects rust
# List the top 10 directories matched by a query
z -l rust
More versatile, can be used for general-purpose fuzzy finding beyond just directory navigation
Highly customizable with extensive options and keybindings
Integrates well with various command-line tools and text editors
Cons of fzf
Requires more setup and configuration to achieve similar directory navigation functionality as zoxide
Can be slower for large datasets compared to zoxide's algorithmic approach
Steeper learning curve for advanced features and customizations
Code Comparison
zoxide:
z foo # cd to highest ranked directory matching foo
zi foo # cd with interactive selection
zq foo bar # cd to highest ranked directory matching foo and bar
fzf:
cd$(find. -type d | fzf)
Key Differences
zoxide focuses specifically on smart directory navigation, while fzf is a general-purpose fuzzy finder
zoxide uses a ranking algorithm to prioritize frequently and recently accessed directories, whereas fzf relies on fuzzy matching of input strings
fzf provides a more interactive and visual selection process, while zoxide offers a simpler command-line interface for quick navigation
Both tools can significantly improve command-line productivity, with zoxide excelling in directory navigation and fzf offering broader fuzzy finding capabilities across various use cases.
fd is a file search tool, while zoxide is a smarter cd command that learns from your navigation habits. fd excels at quickly finding files and directories based on patterns, while zoxide focuses on improving directory navigation by learning from your most frequently and recently accessed paths.
fd is more suitable for one-time searches or when you need to find specific files, while zoxide shines in everyday directory navigation, especially in large project structures or complex directory hierarchies.
While both tools aim to improve command-line productivity, they serve different purposes and can be used complementarily in a developer's workflow.
ripgrep recursively searches directories for a regex pattern while respecting your gitignore
Pros of ripgrep
Extremely fast and efficient for searching large codebases
Supports various file types and encoding formats
Highly customizable with numerous command-line options
Cons of ripgrep
Limited to text search functionality
Steeper learning curve for advanced features
Requires manual navigation to search results
Code comparison
ripgrep:
rg "pattern" /path/to/search
zoxide:
z directory_name
Summary
While ripgrep excels in fast text searching across large codebases, zoxide focuses on intelligent directory navigation. ripgrep offers powerful search capabilities with support for various file types and encoding formats, making it ideal for developers working with complex projects. However, it's limited to text search functionality and requires manual navigation to search results.
zoxide, on the other hand, provides a simpler, more intuitive approach to directory navigation. It learns from your usage patterns and allows quick jumping to frequently accessed directories. This can significantly improve workflow efficiency, especially for users who frequently switch between projects or deep directory structures.
The choice between these tools depends on the specific needs of the user. Developers who frequently search through large codebases may prefer ripgrep, while those looking to optimize their directory navigation might find zoxide more beneficial. Many users may find value in using both tools in conjunction to enhance their overall productivity.
pubfnquery(keywords:&[String], all:bool)->Result<Vec<ScoredPath>>{let db =db::init()?;let matches = db.query(keywords, all);Ok(matches)}
Key Differences
z is written in shell script, while Zoxide is implemented in Rust
Zoxide offers better performance and more advanced features
z has broader shell compatibility out-of-the-box
Zoxide provides a more modern and actively maintained codebase
z relies on simpler data storage, while Zoxide uses a more sophisticated database approach
Both tools serve similar purposes for directory navigation, but Zoxide offers improved performance and features at the cost of a slightly more complex setup.
pubfnadd(path:&Path)->Result<()>{letmut db =db::init()?;
db.increment(path)?;
db.save()}
Key Differences
Language: fasd is written in shell script, while zoxide is written in Rust
Performance: zoxide generally offers better performance, especially for larger directories
Maintenance: zoxide is more actively maintained and updated
Ease of use: zoxide provides a simpler out-of-the-box experience with less configuration required
Functionality: Both offer similar core functionality, but fasd provides more customization options
Overall, zoxide is a more modern and performant alternative to fasd, while fasd offers more flexibility and customization for users willing to invest time in configuration.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
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 (bash 4.4+/fish/zsh only)
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 aftercompinit 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)"
Note:Warp provides its own completions, so Space+Tab completions are not
supported there.
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.
Import your data(optional)
If you currently use any of these plugins, you may want to import your data
into zoxide. The data file is auto-detected using each plugin's standard
conventions.
zoxide import <plugin>
Plugin
Command
atuin
zoxide import atuin
autojump
zoxide import autojump
fasd
zoxide import fasd
z
zoxide import z
z.lua
zoxide import z.lua
zsh-z
zoxide import zsh-z
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:
Hook
Description
none
Never
prompt
At 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:
OS
Path
Example
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:
OS
Separator
Example
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.
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
If you're not sure how to set an environment variable on your shell, check
out the wiki. ↩