Recently, we welcomed a bright new member of Atomic’s Accelerator to our team. Coming straight from school, they’ve had limited exposure to development in the wild. As a result, there are tools I take for granted every day that they have never heard of. This includes tools that may seem obvious to experienced developers—Git, mise-en-place, and an editor such as Vim, VS Code, or Cursor—but that are either new to them or only lightly used.
Others are the nice-to-haves. These are the tools that came into my life through any number of avenues. I’ve discovered interesting tools while browsing Lobsters and Hacker News, through recommendations from coworkers, and through pair programming. These tools are not prerequisites for becoming a developer. They are worth adopting when you begin to recognize the problems they solve.
Here are four tools worth trying when they address a problem in your workflow:
Ghostty (or some terminal emulator)
An editor’s embedded terminal is convenient when you’re getting started, but it ties your command-line work to a particular editor window. Once you’re running a server, test watcher, and coding agent alongside your editor, a dedicated terminal gives that work its own home. It also helps you build command-line habits that transfer across editors and projects.
I currently use Ghostty because it feels like a native desktop application and includes features I expect from a modern terminal, including tabs, splits, and themes. Ghostty is currently available for macOS and Linux. Whatever terminal tools you choose, get comfortable with the command line. Figure out how to use Vim (and how to exit it).
tmux (or some other terminal multiplexer)
As you do more work from the command line, the number of windows and tabs grows. A single project may need separate terminals for a server, test runner, coding agent, and general command-line work. Juggling multiple projects—sometimes more than four for me—compounds the problem.
When that starts to feel unwieldy, a multiplexer can help. Ghostty manages terminal windows; tmux manages long-lived terminal sessions inside them.
Personally, I reach for tmux. tmux has been around for almost 20 years, and I’ve become quite comfortable with it. It is also commonly available on servers I need to access remotely, which helps me keep my tooling consistent across environments. That said, I intend to give Zellij a try soon based on Patrick’s experience.
The first two tools change how I organize terminal work. The next two make specific Git and Docker chores easier to understand at a glance.
Lazygit
Git’s command-line interface is powerful, but it can become difficult to see a repository’s overall state as a project grows. With more branches, contributors, and concurrent changes, understanding the working tree at a glance becomes increasingly valuable.
This is where lazygit comes in. Lazygit provides a terminal user interface, or TUI, that lets you view and manipulate your project’s Git state. Lazygit becomes especially useful when git status, git log, and individual branch commands no longer give you a clear picture of the repository. It does not replace learning Git fundamentals, but it can make Git’s underlying state easier to understand.
Want to see which files have changed? Stage individual changes? Compare branches? Make sense of the commit graph? You can do all of these at a glance in Lazygit.
Lazydocker
Docker commonly supports local applications, databases, and multi-service environments. Its CLI is powerful, but managing several projects can mean remembering commands and flags just to see what is running, follow logs, or stop a container.
lazydocker provides a terminal interface for inspecting and managing containers, images, volumes, and services in one place. It works with an existing Docker engine; it does not replace one. If you regularly lose track of running containers, struggle to find the relevant logs, or encounter port conflicts, lazydocker may be worth trying.
I often discover that Docker Compose cannot start because another project has already mapped the Postgres port. With lazydocker, I can identify the conflicting container, confirm which project owns it, and stop it in seconds.
4 Terminal Tools
I think about all of the amazing tools I have come across in my career and how much they have improved my quality of life. Once you’ve found the right one, it often just clicks into place and you forget how painful it was before. This is certainly not an exhaustive list, but these are tools I reach for every day to improve my efficiency and make project work easier to manage.
You do not need to install all four terminal tools at once. Start with the one that addresses a frustration you already encounter. If you’ve made it this far, I hope at least one of these tools is useful or new to you.