Skip to content

Repository files navigation

DevNav

Fast native workspace navigation for PowerShell 7 on Windows.

CICodeQLOpenSSF Best PracticesOpenSSF ScorecardWindowsPowerShell 7+Rust 1.97+npmLicense: MIT

English | Español

DevNav is a native workspace navigator for developers who live in PowerShell and work across multiple repositories. Fuzzy-find a project, jump into it, and launch the agent or command you need without breaking terminal flow.

Why DevNav

Working across many repositories creates friction beyond typing cd: remembering paths, switching context, finding the right workspace, and repeating setup before real work starts.

DevNav turns that overhead into a fast, repeatable workflow:

  • Find and jump instantly — fuzzy-search projects instead of navigating directory trees or remembering paths.
  • Reduce context switching — favorites, aliases, and custom commands keep frequent work one action away.
  • Start ready to work — launch coding agents or commands directly in the selected repository, already in the right context.
  • Stay fast and lightweight — the core is native Rust, designed for a responsive terminal workflow with no extra runtime required after installation.

Animated DevNav terminal interface

TUI preview

Real captures from the native DevNav executable: the navigator, the F1 help panel, and the centered F3 custom-command manager.

Navigator

DevNav navigator

Help — F1

DevNav help modal

Custom commands — F3

DevNav custom-command manager

Install DevNav

Choose the tool you already use. Every bootstrap installs the same native DevNav release for Windows x64 or ARM64.

Package runners

Bun

bunx --bun @jacoboptimiza/devnav install

npm

npx --yes @jacoboptimiza/devnav install

pnpm

pnx @jacoboptimiza/devnav install

Yarn

yarn dlx -p @jacoboptimiza/devnav devnav install

These are verified bootstrap channels, not JavaScript installations of DevNav. They have no postinstall script or runtime dependencies: the bootstrap selects the official x64 or ARM64 installer, verifies its SHA-256 against release-manifest.json, installs it, and validates the installed version.

For npm, pnpm, and Yarn, the bootstrap package declares Node.js >=22. CI validates that package on Node 22, 24, and 26; Node 24 is the release baseline and Node 26 is the forward-compatibility lane. Bun runs this bootstrap with its own runtime. None of these runtimes is required after DevNav is installed.

After installation, update DevNav with dev update—not with npm, Bun, pnpm, or Yarn. The package runner is a discovery and bootstrap channel; it does not own the installed application.

How package-runner installation works

The npm package contains the installers published by the canonical GitHub Release. Running install detects Windows and the current architecture, checks the selected installer against the release inventory, invokes the silent per-user Inno Setup installer, and confirms that dev.exe --version matches the package version. The runner exits after setup and is not required at runtime.

Scoop

Add the official DevNav bucket:

scoop bucket add jacoboptimiza https://github.com/JacobOptimiza/scoop-bucket

Then install DevNav:

scoop install jacoboptimiza/devnav

Scoop installs the portable native build and owns the installed files. It does not use the Inno Setup installer.

Update Scoop-managed installations with:

scoop update devnav

PowerShell

No Node.js or package manager is required. Run the official installer from PowerShell 7:

irm https://raw.githubusercontent.com/JacobOptimiza/dev-nav/main/install.ps1 | iex

To inspect the script before executing it:

$installer=Join-Path$env:TEMP'devnav-install.ps1'Invoke-WebRequest https://raw.githubusercontent.com/JacobOptimiza/dev-nav/main/install.ps1 -OutFile $installerGet-Content$installer&$installer

The same per-user x64 and ARM64 installers are also available from the latest GitHub Release.

Other distribution channels

ChannelStatus
GitHub installerAvailable
npm, Bun, pnpm and YarnAvailable
ScoopAvailable — official JacobOptimiza/scoop-bucket
WinGetPending Microsoft approval of JacobOptimiza.DevNav

Start DevNav

Open a new PowerShell 7 session:

dev

Continue with First run to choose the folder DevNav opens by default.

Requirements

  • Windows 10 or 11 on x64 or ARM64.
  • PowerShell 7 or newer (pwsh).
  • Windows Terminal recommended.

Published binaries do not require Rust or Visual Studio. A package runner is required only when you choose its bootstrap command. Windows PowerShell 5.1, 32-bit Windows, Linux, and macOS are not supported.

Why DevNav?

  • Starts directly in your chosen workspace.
  • Keeps every favorite available while you navigate across drives.
  • Opens coding agents or runs commands in the highlighted repository.
  • Returns directory changes to the current PowerShell session correctly.
  • Runs as a native, keyboard-first Windows application with no telemetry.

First run: choose your startup directory

The startup directory is the folder containing your repositories, or any folder you want DevNav to show on launch.

  1. Run dev. On the first interactive launch only, choose whether DevNav may silently check for new releases at startup; this never installs without asking.
  2. A fresh installation opens at $HOME. Navigate with , , and . Press p to enter any absolute path or drive.
  3. Highlight the directory you want to use as your startup directory.
  4. Press Ctrl+S.
  5. Verify the full path and press Enter; press Esc to cancel.

For scripts and coding agents, the equivalent command is:

Set-DevRoot$HOMEGet-DevRoot

For existing setups, DEV_HOME remains a fallback until a saved startup directory exists; a directory saved with Ctrl+S or Set-DevRoot takes precedence.

Global favorites

Press f on a directory to add or remove it from global favorites. Every saved favorite stays at the top while you navigate, including the favorite matching the current directory.

Global favorite shortcuts are visible by default. Press Shift+F to hide or show them. DevNav persists this preference between sessions; hiding shortcuts does not delete favorites or hide real child directories.

Favorites, aliases, startup directory, and UI preferences live outside the repository in %LOCALAPPDATA%\DevNav\config.tsv. Updates do not overwrite it.

Shortcuts

Press F1 at any time for the complete, scrollable help panel.

Navigation and organization

ShortcutAction
/ or j / kMove the selection
EnterSelect the directory and return to PowerShell
/ lEnter the highlighted directory
/ h / BackspaceGo to the parent directory
/Start incremental fuzzy filtering
pOpen any absolute path or drive
.Select the directory currently shown
gReturn to the startup directory
Ctrl+SSave the highlighted directory as startup directory, with confirmation
fAdd or remove a global favorite
Shift+FShow or hide global favorite shortcuts
aCreate or edit an alias

Coding agents and commands

ShortcutAction
cCodex: new session in the highlighted repository
rCodex: resume the repository's last session
d / Shift+DClaude Code: new / last session
o / Shift+OOpenCode: new / last session
i / Shift+IKimi: new / last session
eEnter and run a command in the highlighted directory
uRefresh the current directory
Ctrl+UEnable or disable update checks at startup
Shift+UCheck for and install a DevNav update
F1Open or close the shortcuts panel
F2Switch between English and Español
F3Open the custom-command manager
q / EscExit or cancel

: remains available as a Vim-style alias for e.

Custom commands

Bind commands to Shift+1–9 and run them in the highlighted project:

Press F3 to open the centered manager. It has nine Shift+1–9 slots; use / to move or 1–9 to select a slot directly. Enter adds or edits, and Delete asks for removal confirmation. In the editor, Tab switches between Alias and Command, Enter saves, and Esc cancels. F2 changes the language without losing the manager state or editor draft. Shift+1–9 execute their commands only from the normal navigator, never while managing slots.

dev shortcut 1"Dev""bun run dev"
dev shortcut 2"Tests""cargo test"

Use Set-DevShortcut for scripts, overwrite a slot by using the same index, or remove one with Remove-DevShortcut -Index 1 (or dev shortcut 1). Bindings persist locally and appear in the F1 help panel.

You can also select a repository and pass an optional agent or shell command from PowerShell:

dev codex
dev "git status"

The agent CLIs are optional. DevNav returns the command to PowerShell, so the CLI you choose must be installed and available on PATH.

Language

On the first interactive launch, DevNav detects the first supported language in your Windows UI language preference list (es-* or en-*). It shows a bilingual confirmation before asking about startup update checks. The confirmed choice is stored as es-ES or en-US, so the prompt appears only once.

Use F2 at any time to switch language without losing the current folder, selection, mode, scroll position or input. From PowerShell:

dev language
dev language en
dev language es

The equivalent module commands are Get-DevLanguage and Set-DevLanguage.

Update

From PowerShell:

dev update

Or press Shift+U inside the TUI. DevNav compares the installed semantic version with the latest release, downloads only when needed, verifies checksums, and reports the result. The updater replaces only application files and preserves the separate local configuration.

Installs bootstrapped through npm, Bun, pnpm, Yarn, PowerShell, or the GitHub installer use dev update; the bootstrap tool does not own future updates.

Scoop-managed installations use scoop update devnav. Their .devnav-managed-by-scoop marker tells dev update to detect Scoop ownership, skip self-updating, and show the Scoop command instead.

On the first interactive launch, DevNav asks once whether it may check GitHub for new releases at startup. This check never downloads or installs anything without an explicit confirmation. It stays silent when DevNav is current or the network is unavailable, and it is skipped in non-interactive sessions. Change the saved preference with Ctrl+U or from PowerShell:

Set-DevUpdateCheck$true# enableSet-DevUpdateCheck$false# disable

Architecture

  • Rust 2024 with direct Win32 integration through windows-sys.
  • Native keyboard input through ReadConsoleInputW.
  • Custom VT renderer with row buffering and differential updates.
  • Event-driven loop with no polling or idle rendering.
  • Separate result channel so PowerShell can persist directory changes.
  • One direct dependency and no TUI framework.

Security and privacy

  • No telemetry. Network access is limited to installation, the optional consented release check, and explicit updates.
  • Release binaries and the PowerShell module are verified with SHA-256.
  • Local configuration is excluded from the repository and preserved on updates.
  • GitHub Actions use minimal permissions and commit-pinned actions.
  • npm releases use OIDC Trusted Publishing; no NPM_TOKEN is stored.
  • Security reports use GitHub Private Vulnerability Reporting; use the issue or pull-request templates for non-sensitive work.

See SECURITY.md, CONTRIBUTING.md, and the troubleshooting guide.

Build from source

Requires stable Rust and the MSVC Build Tools:

git clone https://github.com/JacobOptimiza/dev-nav.git
Set-Location dev-nav
.\install.ps1 -BuildFromSource

Development checks:

cargo fmt --all ----check
cargo check --workspace --all-targets
cargo test --workspace
cargo clippy --workspace --all-targets ---D warnings
cargo deny check
./scripts/validate-powershell.ps1
Invoke-Pester-Path ./tests/powershell

The MSRV is Rust 1.97; CI pins Rust 1.97.1 with rustfmt and clippy. PowerShell quality gates use the native parser, PSScriptAnalyzer 1.25.0 and Pester 6.1.0. Dependency licenses, advisories, registries and duplicate versions are checked by cargo-deny using deny.toml. CI runs all of these checks.

See the public roadmap for planned distribution work.

License

MIT. See LICENSE.

About

Fast native workspace navigator for PowerShell 7 on Windows. Jump between projects, fuzzy-search, save favorites and aliases, and launch coding agents or commands.

Topics

Resources

Contributing

Security policy

Stars

2 stars

Watchers

1 watching

Forks

Releases

Used by

Contributors

Languages