The terminal is the most underrated productivity surface in software. Here's the stack that runs my entire dev workflow — from blank file to deployed PR in 30 minutes, no IDE required.
Every dev task is one of five jobs: navigate, search, version, multiplex, monitor. The 12 tools below are the best 2026 has for each. Everything else is overhead.
Most of your day is jumping. To a project, to a file, to a function. These three tools make every jump faster than a click.
When you know what you're looking for, regex is faster than a sidebar. When you don't, fuzzy file find is faster than a sidebar.
TUI for git is a different product than a Git GUI. lazygit for the staging and conflict flows, gh for everything GitHub does.
A good prompt tells you what branch, what env, what cluster, without you asking. A multiplexer means your work survives every disconnect.
A dashboard tab is a context switch. These tools answer the same question in one keystroke, from the prompt you're already in.
Every IDE is a window manager for the same 12 things a terminal already does. The IDE adds a sidebar, a settings dialog, and a 4-second startup tax. The terminal adds pipes, scripts, and remote-friendly everything.
From "I need to add a config flag" to "PR is up, tests passed, deploy started." Every tool in the stack plays one role. The whole sequence is muscle memory by month two.
# 1. Jump to the project (zoxide remembers frequency) z project-name # → jump to the project in 1 keystroke # 2. Find the file to edit (fzf, no sidebar needed) fzf # type a fragment of the name # 3. Read the surrounding code (bat, syntax-highlighted) bat src/config.ts # → opens in pager, line numbers on # 4. Search the codebase (ripgrep, 10x faster than grep) rg 'themePref' . # → every match, every file, in 80ms # 5. Edit (helix or nvim, LSP-driven autocomplete) hx src/config.ts # → no chrome, no 4s startup, LSP works # 6. Stage + commit + push (lazygit, keyboard-only) lazygit # → space=stage, c=commit, p=push # 7. Open the PR (gh, one line, full GitHub) gh pr create --fill # → opens browser to the PR # 8. Watch CI (gh, polled from the terminal) gh pr checks --watch # → live status, no tab switching
The worked example is the most useful part. Same stack, different task. The shape is always: jump, find, read, edit, commit, push, verify.
Add a new "dark" theme preset to a personal project. The design team sent 3 hex values overnight. Tests, deploy, Slack notification — all autonomous.
zoxide → fzf → bat → ripgrep → hx → lazygit → gh → btop (verify memory after deploy). Eight tools, no clicks, 22 minutes including CI.
# Real session, timestamped 7:14 z project-name # in the project in 1 keystroke 7:15 fzf → src/themes.ts # 4 chars typed, file selected 7:16 bat src/themes.ts | less # scan the existing presets 7:18 rg 'ThemePreset' . --type ts # find every usage in 80ms 7:19 hx src/themes.ts # add the "dark" preset, LSP completes 7:24 pnpm test # 18s, all green 7:26 lazygit # stage, commit "feat: dark theme preset" 7:28 gh pr create --fill # PR #142, 3 reviewers auto-assigned 7:31 gh pr checks --watch # CI green, deploy preview URL ready 7:36 btop # memory stable, no leak, ship it 22 minutes. Zero clicks. Zero IDE tabs. The terminal ran the whole flow.
The 5 categories don't change. The 12 tools do. Pick the best 2026 has for each job in your stack.
Nine stacks. One philosophy. Zero babysitting.