this post was submitted on 27 Apr 2026
60 points (96.9% liked)

Programming

26803 readers
265 users here now

Welcome to the main community in programming.dev! Feel free to post anything relating to programming here!

Cross posting is strongly encouraged in the instance. If you feel your post or another person's post makes sense in another community cross post into it.

Hope you enjoy the instance!

Rules

Rules

  • Follow the programming.dev instance rules
  • Keep content related to programming in some way
  • If you're posting long videos try to add in some form of tldr for those who don't want to watch videos

Wormhole

Follow the wormhole through a path of communities !webdev@programming.dev



founded 2 years ago
MODERATORS
 

Let's talk CLI/TUI and Developer Workflows!

I’m looking to refresh my local toolkit and I’m curious: what are the absolute "must-have" CLI or TUI programs in your current rotation?

Whether it's a specialized utility for a specific language, a terminal-based interface for a common service, or a workflow-changing alias, I want to hear about it. I’m especially interested in tools that prioritize keyboard-driven navigation and accessibility.

My Current Favorites:

To get the ball rolling, here are a few tools I’ve been leaning on lately:

  • uv — Fast, reliable Python package and project management.
  • fzf & ripgrep — The classic duo for fuzzy finding and searching.
  • tmux — For session management and persistent terminal workspaces.
  • jq / yq — Essential for wrangling JSON and YAML without leaving the prompt.

What about you?

  1. What is one tool you've discovered recently that you can't live without?
  2. Are there any TUI-based clients for web services (like Mastodon, GitHub, or RSS) that you recommend?
  3. Do you have a favorite "hidden gem" script or small utility?

Mentions & Groups

@programming
@linux @terminal_u_i@lemmy.ml @selfhosted

Hashtags

#CLI #TUI #Terminal #OpenSource #FOSS #Programming #DevTools #Linux #SysAdmin #Workflow #Python #Backend #ArchLinux #KeyboardDriven #Accessibility #SoftwareDevelopment #TechTalk

top 33 comments
sorted by: hot top controversial new old
[–] coreray00@discuss.online 13 points 1 week ago* (last edited 1 week ago) (1 children)

I’m on my phone, but here’s what I’m using off the top of my head

Helix editor

Yazi - file browser

Aichat

Juju - Jutusu Scm

Ec - conflict resolver

Mergiraf - ast aware conflict resolver

Jiq - jq tui

Radicle - self hosted code forge

Bat - better cat

Fish shell

Nushell

Sqlit - db browser

Zoxide - directory changer

Scooter - find/replace

Mole - Mac cleaner

Devenv - per project dependencies and scripts

Lix - nix client ( largest package manager, great for testing tools too)

Home-manager

Television - fuzzy finder with a nixpkgs plugin

[–] Novocirab@feddit.org 2 points 1 week ago* (last edited 1 week ago)

yazi looks really sweet (whereas ranger never quite clicked for me personally)

[–] sloppy_diffuser@sh.itjust.works 10 points 1 week ago* (last edited 1 week ago) (2 children)

@RareBird15 @programming @linux @selfhosted

Ones I haven't seen mentioned (unless it came in while I was typing this).

https://github.com/kainctl/isd - Interactive systemd.

https://github.com/zellij-org/zellij - tmux alternative. Built in which-key functionality. I initially switched to it because I like large scrollback buffers and tmux was super slow at resizing window panes. Can open buffers in nvim for better search. Nicer TUI if you don't mind a little bloat / bling.

https://github.com/arxanas/git-branchless - Work on stacked commits. Instead of opening PRs linerally you work on several commits at once with the expectation each commit will be a PR. Promotes smaller PRs that are easier to review to complete a feature. Often when doing that linerally you may discover a bad choice made earlier and have to reverse course and refactor. With a branchless workflow you go back and forth on commits so the final stack of PRs doesn't include those reverse course refactors. git sl has some nice TUI graphs of your stack.

https://github.com/mystor/git-revise - Split, rearrange commits. Works nicely with git-branchless.

https://github.com/tummychow/git-absorb - Reflect changes from a commit backwards. Also works well with a branchless workflow.

If I'm honest I just develop linerally and use an AI agent/skill to restack using the 3 programs above to erase pivot / refactor points and to group logical blocks into an easy to review PR.

https://github.com/ymtdzzz/otel-tui - Open Telemetry viewer.

https://github.com/brocode/fblog - JSON Lines viewer.

https://github.com/aristocratos/btop - Better top.

https://github.com/jandedobbeleer/oh-my-posh - Terminal prompt. My daily driver.

https://starship.rs/ - Another terminal prompt. Played with a little but never got around to giving it my full attention to match my oh-my-posh setup.

https://rclone.org/ - Remote backups using my own encryption key. Supports many cloud providers.

https://github.com/Mic92/nix-fast-build - Not sure its really faster but has a nicer TUI.

https://dircolors.com/ - Directory listing colors in terminal output to better distinguish file types. At a glance I can distinguish read-only, executables, symlinks, directories, etc.

https://github.com/jesseduffield/lazygit - Git TUI. I only use in neovim though, don't think I've ever run it directly.

https://github.com/sindrets/diffview.nvim - Better merge conflict handling in neovim.

https://www.lazyvim.org/ - Base neovim config with lots of TUI sugar.

https://github.com/stevearc/oil.nvim - File tree explorer in neovim with editing capabilities. Hands down the most efficient way I've found to normallize torrent file names. Fixing 5+ seasons of a show takes a few minutes if you know the right vim keybinds.

https://github.com/getsops/sops / https://github.com/mic92/sops-nix - Encrypt secrets in git repos.

https://github.com/zdharma-continuum/fast-syntax-highlighting - Syntax highlighting as you type shell commands.

https://github.com/luccahuguet/yazelix - Opinionated Yazi, Helix, Zellij setup with custom patches to integrate. Looks interesting but could never get to work with nix as it keeps trying to write to store paths. They even have a flake.nix in the repo...

less - Less shitty more (terminal pager) with the options below.

export LESS="-aRix2 --use-color --mouse --wheel-lines=3"
export SYSTEMD_LESS="$LESS"

# a = search from current position
# i = case insensitive
# x2 = tabstop
# R = color control chars show color 

https://pnpm.io/ - Better monorepo support than npm. Faster too. Easy to patch dependencies.

https://bun.sh/ / https://deno.com/ - Alternate node runtimes. Only have used bun, but its a faster cold start and uses less memory.

https://oxc.rs/docs/guide/usage/linter.html - eslint clone in rust. Seconds versus minutes. Uses the golang TypeScript 7 preview version of typescript-eslint for type checking.

https://rolldown.rs/ - Rust clone of the rollup JS/TS bundler.

https://ast-grep.github.io/ - Grep AST patterns. Written in rust.

https://dprint.dev/ - Formatter that unifies other formatters. Lots of fast rust plugins.

https://biomejs.dev/ - Rust based node formatter. dprint support.

https://github.com/astral-sh/ruff - Rust based python linter and formatter. dprint support.

https://github.com/numtide/treefmt - Like dprint, forwards to other formatters, but intended for nix declarative setups (for use with devshell or devenv).

https://direnv.net/ / https://github.com/nix-community/nix-direnv - Activate a virtual environment when you enter a directory. Common with nix devshell/devenv but can run any command. Auto reload based on certain files via watch patterns.

https://github.com/mikesart/inotify-info - Debug why you've maxed out file watchers.

https://github.com/lyonel/lshw / https://github.com/pciutils/pciutils - Detailed hardware info.

https://github.com/wagoodman/dive - TUI to explore docker layers.

https://github.com/containers/skopeo - Bunch of utilities for working with docker images and registries.

[–] coreray00@discuss.online 2 points 1 week ago (1 children)

Great list! I’m trying out oxc instead of biome right now. Based on your git tools I recommend you check out jj

Thanks for sharing! I will have to try this out on a project. Matches many of my own workflow habits, and more importantly, how I train devs on my team. Commit often, don't care if its broken, the pipeline will fix the history. They can truly stump me with how they get into the train wrecks they find themselves in. Committing conflicts sounds like a super power to help them out.

[–] JubilantJaguar@lemmy.world 1 points 1 week ago

So sad that we continue to voluntarily give Microsoft Github this power.

[–] caseyweederman@lemmy.ca 8 points 1 week ago (1 children)
[–] underscores@lemmy.zip 4 points 1 week ago (1 children)

IIRC I used this years ago for some project. very cool to play with, nice work.

[–] caseyweederman@lemmy.ca 4 points 1 week ago

Oh sorry, to clarify I meant that I wrote my own TUIs with the Textual libraries.

[–] Novocirab@feddit.org 7 points 1 week ago* (last edited 1 week ago)
  • tldr (aka tealdeer) for quick command usage examples

  • bat (aka batcat) for most uses of less/more/cat

  • difft (aka difftastic) which I've just learnt about here/here. Use in git diff by running $ git config --global diff.external difft

  • btm (aka bottom) for viewing processes & system status

  • This code in my .bashrc for colored man output:

    Spoiler

# Colors for Manpages
function _colorman() {
  env \
    LESS_TERMCAP_mb=$'\e[1;35m' \
    LESS_TERMCAP_md=$'\e[1;34m' \
    LESS_TERMCAP_me=$'\e[0m' \
    LESS_TERMCAP_se=$'\e[0m' \
    LESS_TERMCAP_so=$'\e[7;40m' \
    LESS_TERMCAP_ue=$'\e[0m' \
    LESS_TERMCAP_us=$'\e[1;33m' \
    LESS_TERMCAP_mr=$(tput rev) \
    LESS_TERMCAP_mh=$(tput dim) \
    LESS_TERMCAP_ZN=$(tput ssubm) \
    LESS_TERMCAP_ZV=$(tput rsubm) \
    LESS_TERMCAP_ZO=$(tput ssupm) \
    LESS_TERMCAP_ZW=$(tput rsupm) \
    GROFF_NO_SGR=1 \
      "$@"
}
alias man="LANG=C _colorman man"
function perldoc() { command perldoc -n less "$@" |man -l -; }

(Not by me, but I forgot from whom I got it.)

[–] miss_rodent@girlcock.club 6 points 1 week ago (1 children)

@RareBird15 @programming @linux @selfhosted
Ones I use pretty much daily are:
irssi, IRC client,
Profanity, XMPP client - I had to use a compile-time flag to enable encryption, so, it does support it, but, worth checking if it's enabled already if you got it as a binary from a package manager or something.,
newsboat rss/newsreader, a fork of Newsbeuter which is now unmaintained,
lynx or links, TUI web browsers
sc, a TUI spreadsheet program.
mutt, email client
cmus, music/audio player

[–] miss_rodent@girlcock.club 4 points 1 week ago* (last edited 1 week ago) (1 children)

@RareBird15 @programming @linux @selfhosted Oh also;
mc, midnight commander clone, a TUI file browser/manager
pdftotext & pandoc, for converting pdfs, ebooks (and various other sorts of documents) into something more readable on a text-only interface. (does not work for every document, unfortunately. Some pdfs in particular, and some documents with DRM on them, just fail to convert.)

[–] Hexarei@beehaw.org 1 points 1 week ago

Ranger is a good mc replacement as well if you like vim key binds

[–] frankenswine@lemmy.world 5 points 1 week ago

Emacs.

Emacs all the way

[–] Kissaki@programming.dev 4 points 1 week ago (1 children)
[–] beeng@discuss.tchncs.de 1 points 1 week ago (1 children)
[–] Kissaki@programming.dev 1 points 5 days ago

It's an encompassing shell with great data handling and native parsing and encoding/decoding.

I much prefer it over other shells or scripts and have used it for various things, in general, and related to data analysis, data transformation, and data generation.

[–] TehPers@beehaw.org 4 points 1 week ago
  • Nushell - because open blah.json | get foo.bar.2 just works. It also just works with yaml and any other formats I want to support (you can define custom commands to support any extension you want).
  • uv/fnm - good tools for Python and JS
  • Starship - nice looking prompt with useful info
  • zoxide/fzf - because z myproject saves enough time and effort to justify using it over cd most of the time
  • Carapace as my default completer for better completions on most common tools
  • Gitui - super nice git tool. I still use git directly a lot, but Gitui's interface is more convenient for staging changes
[–] Binette@lemmy.ml 4 points 1 week ago* (last edited 1 week ago)

Btm - Like a task manager thing

Zellij - Like tmux, but in rust

Nushell

Yazi - File explorer

Helix - Text editor

I spend a lot of time in k9s, the TUI used to interface with kubernetes clusters

[–] AstroLightz@lemmy.world 3 points 1 week ago

Mostly Linux built-in commands like grep, awk, and cat when working with bash scripts

For more serious projects that rely on a CLI interface, tools that allow for ANSI codes to be used. For example, I use prompt_toolkit (for actual menus) and framed_text (for ANSI messages and yes, this is something I made) for my Python projects.

git is my main project branch program. It's just too good to pass up.

I don't really use CLI/TUI text editors other than quick edits over SSH when I'm not at my PC. For that, I use neovim with nvchad, or nano.

[–] khleedril@cyberplace.social 3 points 1 week ago

@RareBird15 @programming @linux @selfhosted Can't believe nobody has mentioned top/btop/htop.

[–] Maiq@piefed.social 2 points 1 week ago (1 children)

I've been enjoying rmpc, a tui front end for mpd.

[–] HumbleBragger@piefed.social 2 points 1 week ago (1 children)

Wow this looks great. I haven't been using ncmpcpp much since I set up navidrome but in used to have it open all the time.

[–] Maiq@piefed.social 2 points 1 week ago

Yeah, it's pretty spanky! Not to hard to setup, great instructions in the arch wiki. Even has cava visualizer support. Pretty easy to theme as well and there are lots of premade themes on github to use or start from.

[–] artwork@lemmy.world 2 points 1 week ago* (last edited 1 week ago)

Wonderful day!

@RareBird15@allovertheplace.ca , I am sorry, but just in case, the Communities/Member should have the following syntax, if required:
- [!community@instance.test](/c/community@instance.test)
- @member@instance.test

Meanwhile, I hope you'll find what your you're looking for, of course!

[–] who@feddit.org 2 points 1 week ago* (last edited 1 week ago)

A few handy commands that aren't in the traditional unix kit...

$ whatis ffmpeg lsblk mmv nc pv wcurl wrestool xxd
ffmpeg (1)           - ffmpeg media converter
lsblk (8)            - list block devices
mmv (1)              - move/copy/link multiple files by wildcard patterns
nc (1)               - arbitrary TCP and UDP connections and listens
pv (1)               - monitor the progress of data through a pipe
wcurl (1)            - a simple wrapper around curl to easily download files.
wrestool (1)         - extract resources from Microsoft Windows(R) binaries
xxd (1)              - make a hex dump or do the reverse.
[–] whotookkarl@lemmy.dbzer0.com 2 points 1 week ago

Aside from vim or emacs text editors I'll usually try to keep it to the gnu core utils and programs that are included with most installs just to keep things universal and simple aside from a couple shell functions and aliases for backing up files and navigating for convenience.

Today I used vim, top, ps, grep, du, sort, ls, find, rm, a backup function that suffixes a date to the filename or adds tildes if it already has one, nohup, sudo, cp, tar, unzip off the top of my dome. It's not the same every day but pretty typical if I'm doing some ops or analysis work.

[–] lionel@pouet.chapril.org 1 points 1 week ago (1 children)

@RareBird15 @programming @linux @selfhosted A few months ago I discovered GNU parallel as I needed a way to upload a lot of files to S3 and it was taking too long. It's a great piece of software to run tasks in parallel.

[–] lionel@pouet.chapril.org 1 points 1 week ago (1 children)
[–] mbp@slrpnk.net 1 points 1 week ago

Wow, xan is new to me. Thanks for the shout out!

[–] PaulB@cosocial.ca 1 points 1 week ago (1 children)

@RareBird15 @programming @linux @selfhosted I have been playing with mise to manage all my cli tooling. It starts (for me) by being a better version of Volta for node, doing automatic node version switching whenever you try and run node in a configured project. Except it can also be configured to read configs for other node version managers like nvm, and to act like corepack to use the right npm or yarn version configured in package.json. It does that for other languages, and other tools too!

[–] PaulB@cosocial.ca 1 points 1 week ago

@RareBird15 @programming @linux @selfhosted So you can for instance have a project of some sort that has a script or command that relies on ripgrep in particular and, when someone with mise working on that project opens that folder in their terminal and runs your command they will be using it with ripgrep, with the right version.