My Favorite Software in 2023

As an engineer, you’re always refining which tools are in your toolbox. Here’s a big list of software I enjoy using in 2023. It’s different than in 2022, and I expect it will be different again in 2024. Everything in this list I probably touch within a month. Many tools are part of my daily workflows. Here they are in lexicographical order.

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.

Ardour cpp GPL-2.0+

I took on a project to record some oral histories for my parents. I had good quality microphones and an audio interface, but wasn’t sure what the best tool for the actual recording would be. Of course, I could’ve just used something like Audacity, but in my search I discovered Ardour and found that it came with the right set of features (e.g., convenient plugins to use while recording) and worked well on Linux.

asciinema python GPL-3.0 & agg rust Apache-2.0

When it comes to recording a terminal session, it’s hard to beat asciinema, and when I need a GIF of that recording, agg works perfectly. These little clips are great for bug reports or other quick demos. If I need something a little more formal (where I don’t want my typos to come through), then it’s hard to beat vhs.

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. No more need to remember to $command | less.

borgmatic python GPL-3.0

This is my personal backup software of choice. It uses borg backup under the hood. This means it has all the key features I care about: deduplicating, with compression, and client-side encryption. Conveniently, this comes with special pricing on rsync.net, my offsite storage of choice. My only qualm at the moment is that the backup process is rather slow (e.g., a few hours) for my current setup. If there was an archiver with a similar feature set and better performance, I’d be interested.

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.

caddy golang Apache-2.0

When I need a reverse proxy, I usually just reach for caddy. It’s simple to configure, performant enough, and the fact that it handles HTTPS certificates for me is excellent. When I do need real performance, I’ve had my eye on rust-rpxy for quite some time, which boasts about 3x the performance.

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.

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.

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. 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 used 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. I also have my eye on difftastic.

draw.io javascript Apache-2.0

If I need to really draw a custom figure, draw.io is my go-to tool. It’s simple and effective, and its open source.

dspdfviewer cpp GPL-2.0+

This one might seem obscure. This may be valuable to you if you use LaTeX beamer to present slides, as I often do. Beamer has a mode where you generate your notes for the slide on an two-wide PDF. This is useful if you have two monitors (or use a dummy plug); you can have your slides on one screen and your notes on another. But, is there nice software to navigate those presentations? Jump to slide numbers, see the next slide, see a timer, blank the screen etc.? dfpdfviewer is the best. I’ve tried pympress as well, but it just seemed too slow and laggy on my machine to be effective.

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.

earlyoom c MIT License

The Linux oom-killer can be a pain. There have been numerous times where we went down a long troubleshooting path trying to figure out why we were getting intermitted connectivity drops to a server when the real culprit was just the Linux oom-killer, which causes the system to be so unreponsive that SSH hangs. So, don’t let your system get to that point. Use earlyoom.

It’s a user-space (rather than in-kernel) oom-killer that monitors your processes and can kill things before the situation gets dire.

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 niceities (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.

Flameshot cpp GPL-3.0

When it comes to taking screenshots, Flameshot is my favorite. Easy to adjust, annotate (i.e., arrows, boxes, text, etc.), and save to clipboard, file, or imgur.

fzf golang MIT License

fzf is a command-line fuzzy finder that is incredible software. For friends who are new to spending time in the terminal, this is one of the first things I try to persuade them to install. It is worth it for Ctrl+R alone.

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.

Otherwise, new software like pijul looks interesting, but I haven’t tried it personally. And, there are plenty of insightful opinions on what comes after git.

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 embarassed 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.

hexyl rust MIT or Apache-2.0

hexyl is a command-line hex viewer. Sure, I don’t view binary files that often, but when I do, I find hexyl a much more pleasant experience than xxd.

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.

i3wm c BSD-3-Clause

i3 is the best tiling window manager I’ve ever used. On Linux, I’ve also used the Pop!_OS tiling feature, which is pretty good, but has annoying bugs which remain unsolved after a few years. On macOS, I’m using Amethyst, but it just isn’t the same.

Iosevka javascript OFL-1.1

This is my favorite coding font (though, I usually use the Nerd Fonts Version). I used to use Hack, and while that is also a very nice font, I actually find myself enjoying the slenderness of Iosevka. It makes a meaningful difference in how much horizontal space it feels like I have on a screen.

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.

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.

KaTeX javascript MIT

If you’re embedding math on a website, you want KaTeX, not MathJax. Simple as that.

Libby proprietary

Libby is the best way I know of to listen to audiobooks from your libraries. It’s so convenient that I kind of hate that it is closed source. I would love for someone to develop an open-source alternative for this app and its catalog.

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.

mat2 python GPL-3.0

If you need to clear any files of potentially identifying metadata (e.g., say, posting some images for a classified ad), then look no further than mat2. It works fantastic, covers a wide range of common file formats, and has earned its place in being a built-in tool of Tails OS, a privacy-focused portable operating system lauded by the likes of Ed Snowden. But really, your phone includes a ton of metadata on the photos you take. If you’re sharing them publicly, really consider running them through mat2 first!

Material for MkDocs typescript MIT

I often used mdBook for documentation sites, but the lack of the inline table of contents, and the need for awkward plugins for things like admonish and mermaid was annoying. I’ve since switch mostly to Material for MkDocs and have been blown away by the quality of the framework. It’s got just about everything you’d want built in.

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!

Mosh cpp GPL-3.0

The mobile shell that allows roaming, supports intermitent 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.

Mumble cpp mumble

Mumble is an open-source, low-latency, high-quality voice chatroom software. If you’ve used things like Ventrilo or Teamspeak in the past, you’ll have a good sense of Mumble. I’ve written about Mumble before, but it is my favorite implementation of this type of software. It is extremely lightweight, easy to self-host, and noticably low-latency.

Newsboat cpp MIT

Newsboat is a TUI RSS/Atom feed reader. I’ve used things like Inoreader and Miniflux in the past, but ultimately settled on newsboat. It’s simple configuration, local, and integrates nicely with my terminal-based usage patterns.

OBS c GPL-2.0

OBS is the open-source foundation for the whole video streaming industry. It is incredibly good. With the right gear, it is easy to set up a stream that looks and sounds professional.

oha rust MIT & goose rust Apache-2.0

These are my two http benchmarking tools of choice. oha is great for simple benchmarks. goose for more complex load testing (e.g., testing APIs where you need to log-in and do multiple steps).

onefetch rust MIT

onefetch is a command-line git information tool. Sometimes you come across an interesting git repository that is not hosted on a platform like GitHub which gives you a bunch of high-level stats about the code (e.g., languages, last commit, etc.) onefetch fills that gap by computing all that information locally.

oxipng rust MIT

oxipng is a command-line, multi-threaded, lossles PNG compression optimizer. In short, if I’m saving a PNG somewhere (e.g., in git repo), I almost always run it through oxipng, which typically is able to reduce the file size considerably.

pass shell GPL-2.0+

pass is a very simple password store that follows Unix philosophy. I use a Yubikey for GPG, so pass means I don’t need a master password, I just need my security keys (see drduh’s guide). 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.

Pdfarranger python GPL-3.0

PDFArranger is a simple GUI program that lets you merge, split, rearrange, rotate, and crop PDf documents. There have been so many times this has come in handy for a quick rearrangement that I’m glad it exists and keep it in the toolbox.

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.

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.

Sniffnet rust MIT or Apache-2.0

Sniffnet is a fun application to monitor internet traffic. In no way does this replace something like WireShark for really figuring out what’s going on in your network. But, when it comes to just getting a nice overview with real-time charts about what is happening on a particular interface, this is solid.

spacer rust MIT

This is a great little tool to throw at the end of your pipe if you have long-running tasks and are like me and what to know when the last thing was printed.

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.

tectonic rust MIT

These days if I’m working with LaTeX, I’ve abandoned latexmk in favor of tectonic. Much like latexmk made the process a little easier, tectonic makes it even easier still. My typical LaTeX project Makefile looks like:

SRC=$(wildcard *.tex)
PDF=$(SRC:.tex=.pdf)

all: build/$(PDF)
build/%.pdf: %.tex $(wildcard cv/*.tex) $(wildcard *.cls)
    tectonic -o build/ $<

clean:
    rm -f build/*.pdf

.PHONY: clean

Besides the spectacular typesetting LaTeX gives you, I love it because of the templates. I highly recommend metropolis for slides, classicthesis for books/theses, betterposter for posters, awesome-cv for resumes/CVs.

That said, I’m particularly excited about the up-and-coming typst. This is a new markup-based typesetting system that addresses many of LaTeX’s pain points. The only hesitation right now is that it lacks the community-driven templates I would want to use.

tmux c varied

I spend the vast majority of my time every day inside a tmux 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. tmux and mosh are a a perfect combo.

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.

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.

water.css css MIT

If I’m making a dead-simple webpage (e.g., not complex enough to pull out a static site generator), my go to way to make it look nice is water.css. This one stylesheet, one line in the <head> is all you need to a nice-looking, responsive theme.

dbohdan has collected a large list of classless css themes/frameworks, if you want to check out others.

wezterm rust MIT

This is my favorite terminal emulator. There are a few key features I enjoy: speed (it’s GPU-accelerated), ligatures (this is why I switched from Alacritty), easy configuration via file, clever hyperlinks, and quick select mode. Hyperlinks are easy to customize for your issue tracker (so you can open your AB-1234 tickets directly), and quick select mode makes grabbing hashes from git log in a separate pane a breeze. Highly recommended.

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.

xsv rust MIT or Unlicense

xsv is a command-line tool for indexing, slicing, analyzing, sampling, splitting, and joining CSV files. If you have a big CSV file and want to poke at it, do it with xsv!

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

Software tools make a big positive impact on my day-to-day life. Thank you to all of the open-source developers who have shared these great tools with the world! If you have feedback, suggestions on other tools, or other thoughts, I’d love to hear about it.

Posts from blogs I follow

Cold reading an ADHD affliction

I'm sure there are truly pathological cases of ADHD out there, and maybe taking amphetamines really is a magic pill for some folks. But there clearly is also an entire cottage industry cropping up around convincing perfectly normal people that they suffer …

via David Heinemeier Hansson November 20, 2024

You can use almost anything as a key file for your encrypted storage device

Imagine that you have an unencrypted drive containing your private data and one day it starts throwing a bunch of errors. You have backups of the data so you’ve got that part covered, but would you feel comfortable sending the drive in to be warrantied? Yo…

via ./techtipsy November 20, 2024

Testing with Go and PostgreSQL: ephemeral DBs

Let’s say you created a Go program that stores data in PostgreSQL — you installed PostgreSQL, wrote the Go code, and everything works; great! But after writing a test for your code, you wonder: how do you best provide PostgreSQL to your automated tests? Do…

via Michael Stapelbergs Website November 19, 2024

Generated by openring-rs from my blogroll.