[releases]
# Jump
**Jump** integrates with your shell and learns where you go. It tracks the directories you visit and lets you jump to the right one with just a few fuzzy-typed characters.

---
# Installation
Packages are available on the following platforms:
| Platform | Command |
| --- | --- |
| macOS | `brew install jump` or `port install jump` |
| Linux | `sudo snap install jump` |
| Nix | `nix-env -iA nixpkgs.jump` |
| Go | `go install github.com/gsamokovarov/jump@latest` |
Linux distribution packages
| Distribution | Command |
| --- | --- |
| Arch | `sudo yay -S jump` |
| Ubuntu / Debian | `wget https://github.com/gsamokovarov/jump/releases/download/v0.67.0/jump_0.67.0_amd64.deb && sudo dpkg -i jump_0.67.0_amd64.deb` |
| Fedora | `wget https://github.com/gsamokovarov/jump/releases/download/v0.67.0/jump-0.67.0-1.x86_64.rpm && sudo rpm -i jump-0.67.0-1.x86_64.rpm` |
| Void | `xbps-install -S jump` |
---
# Shell Integration
Jump is used through its helper function – `j` by default. Add it to your shell:
**bash / zsh**
```bash
eval "$(jump shell)"
```
**fish**
```
jump shell fish | source
```
**PowerShell**
```
Invoke-Expression (&jump shell pwsh | Out-String)
```
**Nushell**
```
jump shell nushell | save --append $nu.config-path
```
**Murex**
```
murex-package install https://github.com/lmorg/murex-module-jump.git
```
Jump begins tracking directories automatically once integrated.
## Custom binding
The letter `j` is the default binding for Jump. But if that's not your jam, you can customize it to your liking.
```bash
eval "$(jump shell --bind=z)"
eval "$(jump shell --bind=goto)"
```
Or bind it directly to `cd`:
```bash
eval "$(jump shell --bind=cd)"
```
Typing `cd project` now performs a fuzzy jump.
---
# Usage
## Summary (Quick Examples)
```bash
j wc # Fuzzy Jump
j web-console # Exact Match
j dev/soc/web # Deep Jump
j ch site # Multi-Part Match
j app/ # Relative Jump
j . # Repo Root
j . cable # Based Mode
j - # cd -
j .. # cd ..
j ../.. # cd ../..
j # Reverse Jump
j Dev # Case-Sensitive
```
That was a quick overview of how `j` behaves. The sections below explain each feature with landing paths.
---
## Regular jump
```bash
j wc # -> /Users/genadi/Development/rails/web-console
j console # -> /Users/genadi/Development/rails/web-console
j b-c # -> /Users/genadi/Development/rails/web-console
j web-console # -> /Users/genadi/Development/rails/web-console (exact)
```
---
## Deep jump
```bash
j ch site # -> /Users/genadi/Development/chaos/website
j dev/soc/web # -> /Users/genadi/Development/society/website
```
Spaces and slashes work interchangeably.
---
## Based Mode
```bash
j . cable # -> /Users/genadi/Development/rails/rails/actioncable
j . actionview/app # -> /Users/genadi/Development/rails/rails/actionview/app
j . # -> /Users/genadi/Development/rails/rails
```
Useful for monorepos with many repeated directory names.
---
## Relative Jump
If your input contains or ends with a slash, Jump checks for a relative directory.
```bash
# In /Users/genadi/Development/rails/rails
j actioncable/ # -> ./actioncable
j actionpack/app # -> ./actionpack/app
```
Jump also mirrors familiar shell movements:
```bash
j - # -> previous directory
j .. # -> parent directory
j ../.. # -> grandparent directory
```
If the relative path does not exist, Jump falls back to fuzzy search.
---
## Reverse jump
```bash
j web # -> /Users/genadi/Development/society/website
j # -> /Users/genadi/Development/chaos/website
```
---
## Case-sensitive jump
```bash
j Dev # -> /Users/genadi/Development
```
---
## Pins
```bash
cd /Users/genadi/development/rails
jump pin r
j r # -> /Users/genadi/development/rails
```
List and remove pins:
```bash
jump pins
jump unpin r
```
---
## Database Tools
```bash
jump clean # remove stale entries
jump forget # forget current directory
jump top # ranked directories
jump top --score # ranked directories with numeric scores
jump top dev # fuzzy filtered list
```
---
## Importing from `autojump` or `z`
```bash
jump import
jump import autojump
jump import z
```
Imports merge into your existing database without overwriting scores.
---
# Why Jump?
Jump embraces fuzzy matching, forgiving inputs, expressive hints (`Dev`, `soc/web`, tapping `j` again), and natural relative path handling.
It is designed to save keystrokes without giving up control.
If it feels hand-crafted… that is for you to call. 😄