Learn Docker With My Newest Course

Dive into Docker takes you from "What is Docker?" to confidently applying Docker to your own projects. It's packed with best practices and examples. Start Learning Docker →

ConEmu vs Hyper vs Terminus vs MobaXTerm Terminator vs Ubuntu WSL

blog/cards/conemu-vs-hyper-vs-terminus-vs-mobaxterm-terminator-vs-ubuntu-wsl.jpg

About 2 months ago I started using Hyper but after really getting a chance to use it, I found it to be unusable, at least on Windows.

Quick Jump: Terminals I Eventually Stopped Using | Changing My Mindset on What to Expect | Going Back to My Roots with tmux | Exploring Light Weight WSL Terminals

Update in 2020: Now that I’ve switched to WSL 2, I’m using the Microsoft Terminal. You can see a video of how I use that new terminal and more in this video.


It’s a been a long journey but I think I finally found a really really good terminal set up for Windows 10 / WSL based development. Technically it would work for MacOS and Linux too, but with a small adjustment.

A while back I wrote about why I switched from ConEmu to Hyper, and in that post I described what a perfect terminal meant to me, and that was:

  • Opens almost instantly
  • Consumes low resources so opening a bunch of them isn’t a problem
  • Typing should feel nearly instant
  • Supports tabs and split windows / panes
  • Customizable hotkeys
  • Easy to change the color theme (and should have a few high quality presets)
  • Easy to search and scroll through the buffer

I finally found a terminal that hits all of those points and it’s going to be really surprising to some people (I know it surprised me), because it was in the least likely place to look.

Spoiler alert: it’s the default Ubuntu WSL (update: wsltty) terminal with tmux.

Terminals I Eventually Stopped Using

If you’re looking for a super in-depth comparison on each of these, then I’m sorry to say, that’s not going to be included in this post.

Instead, I just want to list the issues that each of the terminals had which made me eventually stop using them.

A rock solid terminal without having to compromise on anything is especially important to me because I record technical video courses. If my terminal bugs out on video while I’m recording, that means I need to go back and re-record things which isn’t fun.

It also makes for a really crummy live streaming / coding experience.

But let’s be real now. Even without recording videos, you still want a lightning fast terminal without weird UI bugs because you’re using it every day.

ConEmu

  • Consumes a ton of CPU when idling (~35% CPU usage with 5 terminal tabs)
  • Scrolling through the buffer is painfully slow (100x slower than other terminals)
  • Had a cursor bug that made it frequently jump to the end of the line
  • Takes 2-3 seconds to open a new tab / split window
  • Has a small amount of type delay

I wrote about some of these issues in more detail in the ConEmu vs Hyper article. The cursor bug and CPU resource consumption makes it unusable for day to day usage. I had it get as high as 70% CPU usage just from having terminals open.

Hyper

  • When opening a new split window, your prompt gets hidden behind the other window
  • Takes 5-6 seconds to initially open a new terminal
  • Opening a new split window feels sluggish
  • Has a very high amount of type delay

The first one alone makes it unusable for day to day usage. The other issues are just dying to a million papercuts every day and makes it not enjoyable to use.

It adds up, and it’s a constant reminder how little some developers care about performance nowadays, which is weird because developers are the ones using terminals.

Maybe Hyper opens in 1 second on MacOS and has no type delay? I’m not sure since I only tried it using Windows. Please let me know in the comments. For the record VSCode is also an Electron app, but it’s very responsive in Windows.

Terminus

  • Doesn’t support splitting Windows
  • Takes 4-5 seconds to initially open a new window
  • UI bugs when switching between tabs (screen would blink, prompt gets hidden, etc.)
  • Prompt would often get hidden and come back when minimizing and restoring
  • Mouse events don’t get passed through to tmux
  • Has a very high amount of type delay

It didn’t take long to completely write off Terminus. In my opinion it was the most unusable terminal out of the 3 so far for day to day usage.

FluentTerminal

  • Doesn’t support splitting Windows
  • Mouse events don’t get passed through to tmux
  • Runs as a native Windows app, so elevating to admin isn’t easily possible
  • Subtle UI bugs with the prompt flickering
  • Has a very high amount of type delay

This one definitely looked the coolest, but looks alone isn’t enough.

Terminator (through MobaXTerm)

  • Looks horrendous because it’s being displayed through X-Server / MobaXTerm
  • Takes up a lot of screen real estate due to extra Windows controls being present
  • Issues with copy / pasting (due to MobaXTerm)
  • Has a very small amount of type delay

These are mostly issues with it being run inside of WSL and piped through MobaXTerm’s X-Server display. Perhaps it’s ok on native Linux.

Changing My Mindset on What to Expect

At this point, I was running out of ideas. The above terminals are pretty much all of the major terminal options for Windows / WSL.

I had to find something soon because I’m getting pretty close to recording my next course (there’s 120+ lessons with over 200,000+ words of notes so far).

So instead of looking for fully featured terminals, I completely changed my expectations.

What if I stopped focusing on having the terminal do everything, and instead, focus on having a fast and stable terminal, but then let tmux deal with the heavy lifting.

Going Back to My Roots with tmux

When it comes to dealing with tabs, split windows, and buffer searching, it’s going to be hard to find a tool better than tmux. It does all of these things very well.

I used to use tmux before I switched to WSL back when I ran a vmware based Linux VM as my primary development environment. I even wrote a whole guide on tmux years ago.

I initially wrote off tmux on WSL because up until Windows 18.03, you would lose your tmux sessions every time you closed the terminal, but now that’s fixed and tmux sessions persist.

I guess I wrote it off initially because I didn’t think about it from a tabs, split panes and buffer search POV. My mindset was to replace tmux, not use it because I saw it as something that didn’t fully work with WSL, but that’s no longer true.

Also, one great thing about this tmux strategy is it works on Windows, MacOS and Linux because tmux is running inside of your existing terminal. That means all you have to do is find a good light weight terminal for your OS and all of your tmux keybindings and terminal usage patterns will work the same everywhere.

I definitely didn’t optimize for that result, but it’s a pleasant side effect.

Exploring Light Weight WSL Terminals

So now I have a new quest. Find a light weight terminal for WSL.

WSLtty and WSL-Terminal (Nope)

The first thing I did was Google for light weight WSL terminals and came across both wsltty and WSL-Terminal.

I tried both of them, but both of them ended up being pretty buggy.

Subtle UI bugs, prompt flickering, medium amounts of type delay and other issues eventually lead me to write both of them off.

Update: All of the wsltty problems are gone, and it’s what I currently use. I’ve done a video overview of it here.

Default Ubuntu WSL Terminal (Yep!)

So then I thought, ah what the heck. What if I just try using ubuntu.exe which is the terminal that comes by default when you install Ubuntu WSL.

And what do you know… it passed my initial tests.

There’s no type delay at all and it’s amazing!

Typing inside of this terminal feels faster than typing into notepad.exe or any other program I’ve run on Windows 10. I would go as far as saying it’s faster and smoother than any device I’ve ever used. One of the core developers explained why too when I asked.

It immediately made me think back to my late 1990s and early 2000s gaming days when I used to play competitive Quake.

Back then I was using a 56k modem and had a 170-200ms ping. With such a high ping time you had to predict how people would move because all of your weapons would be delayed by 200ms.

Then eventually I was able to get cable, and my ping time dropped to 30ms and everything about the game changed. Everything felt instant and buttery smooth.

It’s similar to how you might feel when upgrading from a 30hz LCD monitor to 120hz.

There’s an amount of smoothness to it that’s hard to describe with words. It’s like everything goes from choppy and sluggish to feeling like you’re floating on air. Sort of like playing air hockey with and without the air being turned on.

And that’s exactly how it felt here. Typing feels so good in it that it gave me goosebumps, and the first thing I thought about when I woke up the next morning was how excited I am to use this terminal.

It really opened my eyes to how horrible most Electron based apps are for overall responsiveness when typing. Although with that said, VSCode does a great job with type delay, despite it being an Electron app. It’s A LOT faster than Hyper and Terminus was.

I guess the real thing to note here is that Microsoft is crushing it lately.

What else is good about the Ubuntu WSL terminal?

I’m glad you asked:

  • It opens in less than 1 second
  • It uses 15MB of RAM (compared to 300MB+ with Electron based terminals)
  • It uses less than 1% CPU (even when typing)
  • You’re using tmux, so you get:
    • Tabs and split windows that open nearly instantly
    • A billion key bindings to do whatever you could possibly think of
    • Searching your buffer is fast and intuitive
    • With working mouse support, you can use tmux without having a grey neckbeard
    • Persisted sessions across reboots with tmux-resurrect
    • If you’re curious how I have tmux configured, here’s a link to my tmux.conf.

By the way, if you want to see a demo video of my entire development environment (including tmux) you can check it out in this article.

It hits all of the perfect editor marks except color themes, but the terminal itself is compatible with iTerm2 themes so there’s hundreds to themes to choose from.

The problem is you need to use an external tool to load and change color themes which is a little funky, but I’m willing to let that one slide since I’m sure it will get better in time.

Plus, even if it takes 10 minutes to set up your theme, that’s it. You’re done, because it’s not something you change daily. It’s a small price to pay considering how good everything else is.

Is there anything bad about the Ubuntu WSL terminal?

Besides picking color themes, it’s quite good overall.

Occasionally if you minimize the terminal, your cursor will end up being invisible when you restore, but unlike all of the other terminals, you can get things back to normal by pressing Enter once.

The only thing it really lacks is a way to customize certain key bindings. For example, you have to use CTRL + Shift + C / V to copy / paste text.

I’m ok with that since I’ve been using those shortcuts anyways, but if you’re coming from a CTRL + C / V world it will take a while to adjust.

Also, there’s no keyboard shortcuts for quickly zooming in and out which means if you need to change the font size, you have to use the properties menu. This is kind of a bummer because sometimes when recording videos I bump up or down my text depending on what’s being output to the terminal.

I can work around this with a little bit of editing work, but I would like to see keyboard shortcuts for changing font sizes added at some point.

Overall I’m really happy now. Microsoft has built something with a very good base, and it’s only going to be a matter of time before they polish the properties menu, but for now, using the terminal is top notch and for me, that’s all that matters.

What terminal are you using, and are you using tmux? Let me know below.

Never Miss a Tip, Trick or Tutorial

Like you, I'm super protective of my inbox, so don't worry about getting spammed. You can expect a few emails per month (at most), and you can 1-click unsubscribe at any time. See what else you'll get too.



Comments