My favorite software in 2025

As an engineer, I’m always refining which tools are in my toolbox. Here’s a big list of software I enjoy using in 2025. Like 2024, I’m omitting things I don’t touch at least once in a month. So, please refer to 2023 for some honorable, but less regular, mentions.

The List

aerc golang MIT License

This is my email client of choice. I tried mutt, but the configuration was too complex for me. aerc, on the other hand, is very simple to configure, and works great in the terminal. I’m an advocate for using plaintext email, and aerc works great for using email for git patches. It lets me use my $EDITOR of choice, search and filtering works well, and it’s quick. Let me also call out a new discovery here: carddav-query. This works far better than the largely unmaintained goobook I was using previously.

atuin rust MIT License

You don’t realize how useful synced shell history is until you try it. You should absolutely try it. Installed it on a whim, and have been delighted since.

bat rust MIT or Apache-2.0

I’ve aliased cat to bat and never looked back. The syntax highlighting, the line numbers, the git integration, the paging, it all just makes it nice to use.

Berkeley Mono (TX-02) proprietary

This is my favorite coding font, and this year they released new versions! Not only was it worth the initial $75, I paid more for a new web license. Importantly, the new version includes more slender versions and variable fonts, so I really don’t miss Iosevka anymore.

bottom rust MIT License

btm is a better top (and htop). I originally thought I wouldn’t need more than htop, until I tried to run it on a massive server with over 150 cores. htop you need to configure differently to see anything at all (dropping all the CPU bars), and it is slow. btm handles it just fine out of the box. The filtering on the processes widget is very convenient. The ability to see all the other stuff like temps, GPU memory usage, network utilization, disk utilization, those are all cherries on top. I’ll also call out that btop is also very fun, but I find bottom more useful.

chezmoi golang MIT License

I’ve tried a few different ways to manage my personal dotfiles. Before chezmoi, I stored them as a bare git repo, as found on HN. But, the killer feature for me was templating. Even though I don’t use much of chezmoi’s fancier features, just being able to use templates so that I could populate dotfiles based on the machine I was on was great.

Ever since switching to Omarchy, I’ve revamped usage of my dotfile repo.

choose rust GPL-3.0

choose is a human-friendly alternative to cut and (sometimes) awk. I used to use awk for most of this type of task, but choose just makes it easier. It makes it easy to chop out columns I want while piping things around.

codebook rust MIT License

codebook is another spell-checker for code, like typos. It’s high quality and I enjoy it as a default LSP for text.

D2 golang MPL-2.0

This is a new addition. In general, I’m a big fan of “declarative diagraming”, and D2 is the new one on the block (vs PlantUML, MermaidJS, GraphViz, etc.) So far, I love the syntax and functionality. If I’m drawing up something quick that doesn’t warrant something like draw.io, I’ve been reaching for D2 first and excalidraw second. Their TALA layout engine is proprietary, but looking quite nice.

delta rust MIT

delta is the best syntax-highlighting pager for git, diff, and grep output I’ve seen. I used to use diff-so-fancy, but since switching to delta, I haven’t looked back. This makes the experience of using git in the terminal much improved.

difftastic rust MIT

difftastic is the another key tool I use side-by-side with delta. It is a structural diff tool that understand syntax. This means that many times, it is a much more succinct diff for files. I have this aliased in git as well, and often use both delta and difftastic when looking at diffs.

dust rust Apache-2.0

This is like du, but better. It’s faster, and its visually nicer. This is my go-to way for figuring out where my disk space is being used.

eza rust MIT License

This is a replacement for ls that is just better. Similar to bat, after aliasing ls to eza, I haven’t looked back.

fd rust MIT or Apache-2.0

fd is a replacement for find. Similar to exa and bat, this is another rust-based tool that feels more intuitive and does the job better.

fish rust GPL-2.0

Fish has been a great shell. I just used plain bash before this. I switched a couple of years ago, and while I don’t think there has been any particularly large “killer feature” for me, I have had no reason to switch to anything else since. The UI niceties (e.g., autosuggestions, tab completions, syntax highlighting, 24-bit color) all make the terminal experience pleasant. It’s also being slowly rewritten in rust.

I’m interested in trying nushell at some point soon, but I haven’t jumped in yet.

Ghostty zig MIT License

I’ve switched from Wezterm to Ghostty. While there is still 1 killer feature I’m missing, I’ve thoroughly enjoyed Ghostty’s performance and simplicity. I appreciate the dedication to correctness and performance.

git c GPL-2.0

git is my favorite version control software. Yes, that might be because it’s pretty much ubiquitous, and I’ve spent the time to get over the learning curve. It’s a fantastic tool.

If you haven’t leveraged aliases (here are mine), then I hope reading this is a plug to go enjoy those.

Since it’s git-related, I’ll also mention I’m a strong proponent of conventional commits, and using useful git trailers like they do for git itself and Linux.

While we’re all used to the PR/MR type of workflow, if you haven’t experienced working with git the truly distributed way (via git-send-email) its also worth trying.

git-absorb rust BSD-3-Clause

This fits exactly into my normal git workflow, and it’s algorithm is simple and effective. If you are used to making fixup commits yourself, definitely try this out!

git-cliff rust MIT or Apache-2.0

If you’re following conventional commits, then git-cliff is a fantastic tool for automatically generating useful changelogs. I use this in the vast majority of my repositories.

git-grab rust MIT or Apache-2.0

This is a small tool that clones a git repository to a standard location, organized by domain name and path. I used to just have a repos/ directory full of random repos. At one point, I tried to organize these better (e.g., “personal”, “forks”, etc.), but it didn’t work well. Now, I just use git-grab and stick with that structure.

gping rust MIT License

“Ping, but with a graph.” That’s an accurate description, but don’t underestimate the niceness of a graph. It also has features like graphing multiple hosts at the same time, or graphing execution times of commands. Similar to bat, exa, fd, btm, if you have gping, you really don’t need to go to ping anymore.

helix rust MPL-2.0

I’m embarrassed to say, but I didn’t really learn how to use vim until 2017. But, that was such a positive experience that I’ve been on modal editors since. I went from vim, to neovim, and then, most recently, to hx.

Going from electron-based editors to vim was a big jump. Going from vim to these others was just incremental. I had developed a very custom nvim experience with plugins and all sorts of customizations.

That, surprisingly, is part of the reason I’ve enjoyed hx so much: I use it pretty much stock. It’s got all the right basics built-in (LSP, file pickers, tree-sitter, etc.) such that I don’t need to customize it much.

If you’re interested in experimenting with a new editor, I highly recommend helix.

hurl rust Apache-2.0

hurl is an easy way to test HTTP requests with plain text. Since it can chain requests, capture values, etc., I actually often use it to “script” some request chains for testing purposes. I haven’t used this extensively, but so far, it seems very useful.

hyperfine rust MIT or Apache-2.0

hyperfine is the best command-line benchmarking tool around. It should be the standard, in my opinion. If you ever want to benchmark how long a particular command-line command takes in a robust way, look no further.

jaq rust MIT

jaq is a clone of the ubiquitous jq JSON processing tool. But, it is more correct and faster. As long as you aren’t doing crazy stuff with jq, jaq might be an easy alias to make for some small wins.

jless rust MIT

jless is a command-line JSON viewer. If you’re viewing JSON files with some combination of jq (or jaq), less, cat, etc., then jless might be just what you’re looking for. It makes it easy to quickly peruse a JSON file and espand/collapse objects and arrays.

Jujutsu rust Apache-2.0

jj is a git-compatible version-control system that is both simple and powerful. This is the surprise of the year for me. While it doesn’t really solve any concrete problems for me from git, it does do some fun things, like let me rebase all of my branches at once.

I’ve enjoyed the experiment using this over the past couple months, and suspect I will continue to do so.

just rust CC0-1.0

just is a versatile command runner that takes inspiration from make, but without the baggage. This is a new entry on this list, and not one I have used as extensively, but so far, it seems nice. There are many situations where I have a Makefile with a bunch of .PHONY targets because I’m just trying to use make as a command runner. Well, now I have a nice command runner.

There are several repositories I’ve worked with with a scripts/ folder that could just be absorbed into a justfile.

lychee rust MIT or Apache-2.0

The web is great, but it is unfortunate when you come across broken links. lychee is a great way to help prevent that (they even have a GitHub Action). It’s incredibly fast. I use it to check most of my repositories for dead links, as well as my blogs.

Mosh cpp GPL-3.0

The mobile shell that allows roaming, supports intermittent connectivity, and provides intelligent local echo. A recent release also brought true color support, which was the only thing that bothered me before. 99% of the time I say I’m “ssh”-ing, I’m actually just using mosh. The ability to start a session, get a tmux session all set up, close my laptop, go somewhere else, open it and just pick up where I was is too good to ignore.

This is an example of software that is pretty much “complete”. Lack of activity on the repository shouldn’t scare you one bit, its because it has a rock solid history and does what it sets out to do.

mpv c many

mpv is the best media player I know of. I prefer this to VLC or others. It “just works” and is extremely minimal and performant. It’s integration with yt-dl (or better yet, yt-dlp) means I often just play web videos (even YouTube) via mpv.

Omarchy shell MIT License

Omarchy is a beautiful, modern, and opinionated Linux distribution build on hyprland and Arch. This is my favorite find of the year. I’m a big fan of tiling window managers and Linux on the desktop. Earlier in the year, I built my own spin of Wayblue sway, but since Omarchy came out, it has checked every box for me.

There are many things that are just integrated incredibly well within this distro. I won’t bother calling them out explicitly as items on this list, but I’ll highlight that Omarchy uses tools like impala, gpu-screen-recorder, or things like waybar, hyprland, walker, limine, etc., all beautifully. I wouldn’t know about many of these were it not for Omarchy, and now I just use them.

passage shell GPL-2.0+

passage is a fork of pass, very simple password store that follows Unix philosophy. Unlike pass, passage uses age encryption as the backend.

I don’t miss having a password manager app on my mobile phone, so on desktop, this has served me well. I’m a big fan of its simplicity, and the fact that my passwords are just flat files I can version in a git repo.

In addition, I love being able to use a yubikey, and age-plugin-yubikey makes this very easy.

ripgrep rust MIT or Unlicense

This is grep on steroids. Stop using grep and start using ripgrep and you’ll never go back. It is significantly faster, and has a bunch of great features (e.g., searching file types, regex, automatic filtering, etc.). It is often thought of as the gold standard for excellent Rust code.

Satty rust MPL-2.0

When it comes to taking screenshots, Satty is my favorite on Linux. (I still use Flameshot on macOS.) Easy to adjust, annotate (i.e., arrows, boxes, text, blur, etc.), and save to clipboard or file. Integrates well in Omarchy.

sd rust MIT

sd is an intuitive rust rewrite of sed. Much like the other tools in this list (e.g., bat, exa, etc.) it is just a better option in most cases. I frequently use it in combination with fd to find and replace across a project directory.

sshx rust & typescript MIT

sshx is the best live terminal sharing application I’ve ever used. I used to reach for things like tmate for this, but it’s more constraining (e.g., I want to still use zellij). It also does not look as nice. sshx has a level of polish no other tool I’ve tried in this space has had. This is by go-to tool for pair programming. They also just released the killer feature of read-only sharing, which makes this extremely handy in a whole slew of scenarios. This largely solved the screen sharing problem you might have if you use Slack or similar, but have an ultrawide monitor and your coworkers do not. With sshx, the latency is impressively low and the text will be crystal clear. In a screen share, you have a compressed mess.

Starlight typescript MIT

Starlight is my new go-to documentation framework. It does all of the important things I used from Material for MkDocs, but often in more intuitive, ergonomic ways. It is blazingly fast. It looks good. I don’t have to deal with ridiculous Python virtual environments.

While we’re talking about documentation, I’ll mention that I’m a strong proponent of the Diátaxis documentation system. If you’re wondering how you should organize your documentation, please consider it!

starship rust ISC

I started using starship about the same time I started using fish. It’s a fun, fast, extremely customizable prompt with nice defaults. I’ve enjoyed it enough that I just haven’t stopped using it since first adding it to try. If you’re the type that has some line in your .bashrc to know what git branch your on, you might enjoy starship as well.

Tailscale golang

Thanks to wireguard, tailscale makes private mesh networking stupid easy. It’s my go-to tool when it comes to sharing things on a private network (e.g., self-hosted stuff with my family, ssh-ing into my desktop when out and about, etc.). It’s performant, well documented, and pretty much just works and gets out of your way.

tokei rust MIT or Apache-2.0

tokei is the best way to get statistics around counting code in a repository. It shows you the total number of files and total lines within those files broken down by code, comments, blanks, and organized by language.

It seems both faster and more accurate than tools like cloc, sloccount, etc. There are other great blogs posts about code counters.

typos rust MIT or Apache-2.0

typos is a very handy spellchecker that seems to work in a code context better than other things I’ve tried. They have a CLI, as well as an LSP. It’s worth checking out!

I usually have a config like this:

[files]
extend-exclude = ["*.svg"]

[default]
extend-ignore-re = ["\\w{51,}"]

Typst rust Apache-2.0

Almost anytime I would’ve reached for LaTeX, I now reach for typst. The ecosystem has seriously grown over the years. The performance, control, and error messages remain excellent.

And, it looks just as good as LaTeX.

The only thing still on my wishlist is variable font support.

watchexec rust Apache-2.0

watchexec simply runs a command when files in the current directory change (and it’s awesome). Made my the same folks who make cargo watch, this is a general purpose tool that can make your development loop feel faster when immediately starting long processes (linting, tests, etc.) immediately in response to code changes. Oftentimes, the checks/build/tests are finished by the time I’m ready to craft my commit. Definitely worth trying.

xh rust MIT

xh is very similar to HTTPie. While I haven’t used the latter, I’m a big fan of xh over curl. The interface just seems more intuitive and friendly. And, it still has a --curl flag so I can get a curl command in case I need to share it with a teammate.

YNAB proprietary

I used to use Mint, but when they shut down, I migrated to YNAB. I wanted to be more hands on, more intentional, and more aware of my spending, and YNAB seems to be a great tool for that job.

zellij rust MIT

I spend the vast majority of my time every day inside a zellij session. I’m a fairly basic user, but the terminal multiplexing, scrollback buffer/search, ability to have multiple sessions and attach/detach is all I really need. zellij and mosh are a perfect combo. I like the visuals and UX enough to have had this replace tmux.

Zola rust MIT

For non-documentation sites, my favorite static site generator is Zola. The template engine is great, and its fairly simple and easy to grok how themes work and can be modified. I use it for this site, as well as several others I’ve made.

Final thoughts

Omarchy and the cascade of software that that showed me was the big change this year, with a couple of other fun highlights like Ghostty, jj, and age.

Otherwise, the trusty toolbox has largely remained trusty!

Posts from blogs I follow

Running local models is good now

I’ve been working with local models since they came out, and finally, they’re surprisingly good now. I have a 2022 M2 Mac with 64 GB RAM and 1TB storage and I’ve used Mistral 7B Gemma 3 OpenAI OSS-20B Qwen 3 MOE, as well as a number of other Qwen variants…

via ✰Vicki Boykis✰ June 15, 2026

Quoting Julia Evans

[...] Instead, I picture a specific person and I just write for them. Often this person is "me, but 3 years ago" or a good friend. — Julia Evans, write for 1 person Tags: writing, julia-evans

via Simon Willison's Weblog June 15, 2026

A backdoor in a LinkedIn job offer

Last week, I got a LinkedIn message from a recruiter at a small crypto startup. We exchanged a few messages over a couple of days, she described a broken proof-of-concept they needed a lead engineer for, and then sent me a public GitHub repo to review. Spe…

via Roman Imankulov June 15, 2026

Generated by openring-rs from my blogroll.