Productive Tools for Git Users, Programmers and Developers


Here is the collection of tools will make an impact on your productivity, save you time, or both. Some of them don’t necessarily save time, even over a long period of use, but instead make you more productive by making your programming experience smoother and more flow-like.

magit, a git porcelain for emacs. It’s reason enough to be using Emacs, if for nothing else, imho (of course you benefit if you also use emacs for other stuff). Magit offers a extremely consistent and powerful UI. You can easily manage multiple remotes, rebase, cherry pick, stash, reset, etc.

entr(1) watches files and runs commands when they change.

expect allows you to script CLI tools that don’t have scripting interfaces.

rofi is like dmenu on steroids.

vipe edits data in shell pipelines.

strace and ltrace help debugging.

autojump jumps to frequently-visited directories by partial name match.

rsync semi-intelligently synchronizes files between places (usually over a network).

mosh is more robust than SSH over unreliable connections.

xcape allows you to bind modifier keys to act as other keys when pressed on their own.

emacs, because of how flexible the editing core is (partially due to elisp), and how many extensions and enhancements people have made to it.

spacemacs is an amazing starter kit that gives you, among other things…

helm, which incrementally completes and narrows selections from a list, and can be hooked in to many emacs text prompts

recentf (builtin), which remembers which files you’ve recently opened. helm can complete recentf files, meaning that you only have to find the location of a file the first time you open it, and then after than you only need to type part of its name into helm’d recentf and it’ll bring it up for you.

avy which allows you to visually select things using a tree of keystrokes (e.g. you have 4 panes open in emacs, use asdf to select, or you have 120 vertical lines, use [a-z] twice to select one).

evil gives you vim-like editing.

which-key visually displays keybindings so you don’t have to memorize them.

slime is an amazing development environment for Common Lisp which has some rare and useful features. I personally am a huge fan of the debugger and inspector (which, from what I have seen, is a relatively rare tool) both.

tramp transparently edits files on a remote machine using your local emacs.

undo-tree gives you tree-style undo/redo and a visualizer to match.

paredit which is mostly-structured editing of s-expressions – the most usable thing approximating a code structure editor that anyone has at the moment…

hydra allows you to group together sequences of key-chords and make them somewhat more ergonomic.

Orgmode ( Organise your life – or at the very least your work – all inside Emacs. org-present lets you use Orgmode files as slides, and org-present-remote (which I wrote) presents a mobile friendly Web interface to control Orgmode slides from your phone.

Mu4e ( Manage all your email in Emacs. Includes a handy HTML to text rendering feature.

SLIME ( Having programmed commercially for two decades in C, Perl, C#, Ruby, Java, JavaScript (and CoffeeScript), Clojure, and VBA in a wide range of editors and IDEs, I’m happy saying SLIME is my favourite. Now I’m “post-technical” (contracting as an engineering manager and technical product manager, entirely off the tools) I only program recreationally, and SLIME and Common Lisp on Emacs are my go-to tools.

Multi-term ( Almost (I’m looking at you, dpkg) all CLI tools run happily inside terminals inside Emacs, all managed with multi-term. This also allows easy scripting of terminal sessions in, of course, Emacs Lisp.

Elfeed ( A fully featured RSS/Atom feed reader inside Emacs.

ERC ( An IRC client for Emacs. Now built in.

Move yourSlack (yech, ptooey) workflows into Emacs with slack.el (

jq – “lightweight and flexible command-line JSON processor”, super useful when working with json APIs

dependabot – get dependency update PRs automatically

trello – I use a separate boards for all kinds of things, from software side projects to keeping track of things I have to do when moving for example.

A couple more general tools that save me lots of time:

  • Session Buddy. This thing is a godsend. When I’m working on a project, I’ll often end up with 20+ Chrome tabs open for various searches I’ve made and documentation I’m reading. Session Buddy lets you save and label browsing sessions and reopen entire groups of tabs with one click. Now when I’m wrapping up for the day but don’t want to waste time tracking down all my online resources, I can save the session and reopen it later. It also autosaves your sessions, so if your machine crashes you can resume browsing after recovery.
  • Notion. This tool has been making a pretty big splash in the productivity software area for good reason. The abstractions that Notion provides for information are extremely powerful, letting you compose and transform how your information is laid out effortlessly. I use it for managing lots of aspects of my life, from my school assignments to blog posts to monthly budget. Also very useful is Notion’s Chrome extension, which I use to save links to a My Links page for later reading.
  • Sublime Text – I’m still astonished at how fast it renders/scrolls.
  • Sublime Merge – my day job has a heavy rebase/commit split workflow, and Sublime Merge is a godsend when doing tricky interactive rebases.
  • autojump – as mentioned earlier. It’s one of the first things I install on a new workstation. I believe there are alternates such as z and fasd which you may want to check out.
  • Pull Reminders – I absolutely hate email notifications, and things like review requests or responses to comments usually get buried in my inbox. I also find the GitHub notification workflow suboptimal – I still have to click to archive notifications, which means they pile up, which means things get lost. By hooking up Pull Reminders to Slack I get notifications that I don’t have to click to archive. This has dramatically reduced my response time to PRs.
  • Pull Assigner – Automatic PR assignment has made reviews in a team go much smoother. Without this, I often find teams fall into bimodal patterns where a few people review everything and the other people don’t respond due to bystander effect.
  • mtr – A fantastic way to diagnose latency and packet loss issues in your network. I feel like it’s not as well known as it should be.
  • A “percentile latency” graph – I’m not sure if there is an official term for it, but a graph where the X axis is a percentile and the Y axis is latency. I first saw these in Gil Tene’s How Not to Measure Latency (summarized here) and was blown away – not only are they very effective at describing how a system operates in normal cases and at the limits, but you can directly lay your SLAs on top of them and see how much wiggle room you have before you’re in violation.
  • black and isort – mentioned otherwise in this submission, but a great way to focus more on the code instead of the style.
  • multimarkdown best markdown processor I’ve used. Quite conservative yet has a lot more features than standard markdown. Takes data from stdin and returns to stdout. Blazing fast. Automatically deals with tables of contents, combining multiple markdown files into one, referencing titles, footnotes, image attributes, etc etc.
  • redo best dependency build tool I’ve used. Very intuitive and simple once you “unlearn” Make. Very modular, with distinct rules for different file types living in different scripts. Language agnostic.

Also Read: More about Online Tools for Productivity