DEV Community

Nikita Sobolev
Nikita Sobolev

Posted on • Updated on

Using better CLIs

For people who spend half of their lives in a terminal user experience and functionality is highly important. Making you a happier person.

Here are some very good alternatives to some default command line applications.


My full setup includes all the stuff discussed in this article and even more. Check it out:



When working with open-source (and Github) projects frequently sometimes git is not enough. So, Github created a tool called hub.

It allows to fetch from remote forks, browse issues, and create pull requests with ease!

# Open the current project's issues page
$ git browse -- issues
  โ†’ open

# Fetch from multiple forks, even if they don't yet exist as remotes:
$ git fetch user1,fork2

# Browse issues:
$ git browse -- issues
  โ†’ open

# Create a pull request:
$ git pull-request -F
Enter fullscreen mode Exit fullscreen mode


Let's face it. git log sucks. It allows browsing commits history, but when you want to look inside a specific commit for its changesets or tree structure, well ... You will have to memorize all these commands or use a lot of external plugins.

tig solves it all. Firstly, it allows to browse commits history. Then you can dive inside! Browse changesets, file trees, blames, and even blobs!



postgres (and mysql too!)

When working with postgres we have to use psql. And it is quite good. It has history, some basic autocomplete and commands that are easy to remember. But, there is a better tool called pgcli.



  • smart autocomplete
  • syntax highlighting
  • pretty prints of tabular data

It also has a version for mysql called mycli.

By the way, yesterday a new 10th version of postgres was released. ๐ŸŽ‰


System monitoring is a common task for every developer. Standard tools like top and htop are fine and trusted software. But look at this beauty, glances:


glances has a lot of plugins to monitor almost everything:

It also has a web interface and a pre-build docker-container to integrate it easily. My top list of plugins:

  • docker
  • gpu (very useful for miners and coins-folks!)
  • bottle (web-interface)
  • netifaces (IPs)

Create your own if you want to!


curl and wget are well-known and widely used. But are they user-friendly? I don't think so. httpie is user-friendly and can do everything these tools can:


And even more. I don't regret a single minute using it instead of curl.


jq is like sed for json. It is useful in automation, configuration reading, and making requests.

You can try it online.


Sometimes you have to do something live: a screencast, a gif, a talk. But everything can go wrong. You can make a typo, or misspell a word. That's where doitlive comes to the rescue.

Just create a file called with command that needs to be executed and then run:

doitlive play
Enter fullscreen mode Exit fullscreen mode

Now you are a command line magician.


I do a lot of python development. So, here are my tools to make it better.


pipsi = pip Script Installer. It creates a virtualenv for every script and symlinks it into your /usr/local/bin. So it won't pollute your global environment.


pipenv is a tool that aims to bring the best of all packaging worlds (bundler, composer, npm, cargo, yarn, etc.) to the Python world.


The problems that Pipenv seeks to solve are multi-faceted:

  • You no longer need to use pip and virtualenv separately. They work together.
  • Managing a requirements.txt file can be problematic, so Pipenv uses the upcoming Pipfile and Pipfile.lock instead, which is superior for basic use cases.
  • Hashes are used everywhere, always. Security. Automatically expose security vulnerabilities.
  • Give you insight into your dependency graph (e.g. $ pipenv graph).
  • Streamline development workflow by loading .env files.


ipython = Interactive python.

ipython brings autocomplete, nice history, and multiline editing to the python shell. It integrates into django and flask nicely without any configuration.
It is a must for all of my projects. If you like it, also check out jupyter.

Previous series

Top comments (21)

rhymes profile image

Thanks for the tips, so many tools I didn't know about!

My turnoff with pipenv is that it requires the user to enter a "sub" shell or use "pyenv run" to load the environment instead of just loading it in the current shell (like virtualenv activate does). The idea of the lock file was truly needed in Python realm though

sobolevn profile image
Nikita Sobolev • Edited

pipenv is still evolving. Right now it has some issues with dependencies resolution on a big projects. And sub-shell bothers me too.

But it already is so much better than pip!

rhymes profile image

ahha definitely! I wonder if "pipenv run" has any impacts in production. I've never deployed a project using pipenv. I'll have to study it a bit more.


Thread Thread
sobolevn profile image
Nikita Sobolev

Then take a look at our django template:

It uses pipenv for production (also docker, gitlab ci, and caddy). Works perfectly fine!

Thread Thread
rhymes profile image

Thanks Nikita, there's a lot of good stuff in there! :-)

lukebearl profile image
Luke Bearl

Just a note: for the pgcli stuff: that is part of the dbcli project, so there are other CLIs for things like MySQL, SQL Server, etc.

Awesome article, I'd never seen doitlive before, but I'll def be checking that out.

bram85 profile image
Bram Schoenmakers

For todo lists, try topydo, a powerful application based on the todo.txt format. It has three interfaces: a command line interface, a prompt and a text based graphical user interface.

(Disclaimer: I'm the author. A similar application is TaskWarrior)

derbingle profile image

Thanks for mentioning glances, I missed that one somewhere along the way.

I've started using exa instead of the default ls. Really nice!

sobolevn profile image
Nikita Sobolev

Thanks! I have already seen it, but I actually don't see any difference between ipython and ptpython.

Could you please provide an example?

lirantal profile image
Liran Tal

if you're already on the topic of better CLIs then... Dockly for a docker containers dashboard / management straight from the terminal

dserodio profile image
Daniel Serodio

jo is a nice complement for jq :)

djangotricks profile image
Aidas Bendoraitis • Edited

bpython is also a nice tool. It gives you features like autocomplete, history of previous commands, syntax highlighting, and more.

goku132 profile image

Thanks for the article so many new things to review and explore.

marlon_schultz profile image
Marlon Schultz

If you are using AWS on the CLI a lot, aws-shell comes in quite handy with autocompletion. However it is more a standalone cli tool, than just a CLI tool.

spences10 profile image
Scott Spence

These are awesome thank you, and thanks for the examples ๐Ÿ‘Œ

fasil profile image

thanks for sharing,

dhairav profile image
Dhairav Mehta

The Fish shell is an intelligent CLI tool. A worthy replacement for Bash.

michaelc0n profile image
michael saenz

Great tips and tools! Thx!

jacoby profile image
Dave Jacoby

Had been using httpie and jq on occasion. (I don't write new interactions with REST APIs daily.)

I hadn't known about mycli. I expect I shall overuse and love it a lot.