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 →

Switching from ConEmu to Hyper as a Windows Terminal

blog/cards/switching-from-conemu-to-hyper-as-a-windows-terminal.jpg

About a month ago I was getting upset with a few ConEmu bugs and with no resolution in sight, I switched to Hyper.

Quick Jump: What Was Wrong with ConEmu? | What Makes the Perfect Terminal? | Is Hyper Worth Using? | Hyper Is Good but It's Not Perfect

I no longer use this set up

Hyper ended up being horrendous and now I use the Ubuntu WSL terminal with tmux.

Here's Why

I usually don’t go out looking for new tools randomly. I tend to stick with what I have until I have a very real reason to switch and lately I found myself wanting to switch away from ConEmu for a few reasons.

What Was Wrong with ConEmu?

I still think ConEmu is one of the best overall terminals for Windows.

It opens pretty quick, supports WSL (Bash on Windows), PowerShell, has a bunch of decent looking themes and typing feels fast.

But it suffers from 3 main issues that are deal breakers for me.

1. It consumes a massive amount of CPU usage when idling:

I’m running Windows 10 Pro 18.09 (stable) and the latest ConEmu but for some reason it consumes a lot of CPU usage.

For example I could have a single ConEmu terminal open, split into 3 panes and then have 2 more terminals off to the side and ConEmu will take my i5 3.2ghz quadcore CPU from 2% usage to 30-35%.

That is purely idling with no work being done in the terminal at all. Nothing more than a default basic prompt and a blinking cursor.

Also as you open more terminal sessions, the CPU load continues to climb. Having 9 sessions running idle took my CPU to a steady 50% usage.

It’s high enough that I can feel the lag doing normal things, and if I’m recording 1080p screencast videos at the same time it’s a cause for concern because high quality audio requires low latency audio processing. If your CPU is under high stress, it could add little pops and clicks to your audio.

I reported it on GitHub but the author isn’t sure what’s wrong and abandoned the issue.

2. Scrolling through the buffer and selecting text is ultra slow:

There’s been an open GitHub issue on this for almost a year and it has a few animated gifs showing the problem. The author basically says not to just the mouse, but use hotkeys.

Fair enough, when using a combination of the mouse with hotkeys, you can quickly select multiple lines of text but it’s non-intuitive to use. It always throws me off, even though I’ve done it like 5,000 times.

This one isn’t the end of the world because there is a workaround, but it feels like death by a thousand papercuts since it’s something I do 100 times a day.

3. There is a bug that causes your cursor to jump to the end of the line:

Imagine typing something on the terminal, but you want to move the cursor a few characters back so you can edit some flag and then re-run a command.

Well, this bug will cause your cursor to jump to the end of the line every time you press a key. It makes it impossible to edit a command. I found myself literally copying a command, pasting it into my code editor, editing it there and then pasting it back. Not cool.

I haven’t been able to figure out the cause of this one, but it happens many times per day with moderate terminal usage. It’s really destructive because it requires completely shutting down the current ConEmu session to fix it.

While recording my next course, it happened while recording and it ruined the video because I can’t just be like “sorry guys, my terminal is on drugs, let me waste 30 seconds closing it, opening it, and getting back to where we were”.

Seriously, fuck that. This is one of those bugs where you just think life is too short to deal with this, I’m out of here.

I have nothing against ConEmu or the author. In fact, I’m very impressed with what he was able to do because creating a good terminal isn’t easy, but it’s just not working out for me.

Rather than suffer, I looked for an alternative and found something reasonable.

What Makes the Perfect Terminal?

This is going to be different for everyone but my dream terminal would have this:

  • 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 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 don’t care what language it’s written in. If it checks all of those boxes, you can count on me using it until the end of time.

Unfortunately I don’t think such a terminal exists for Windows. Hyper doesn’t hit all of those points, but it comes close.

Is Hyper Worth Using?

For about a month now I’ve been using https://hyper.is/ as my full time terminal in which I spent 99% of my time inside of WSL.

It’s also worth pointing out Hyper works on Windows, MacOS and Linux.

I Beat the Crap Out of It for a Month

This has been an abnormal month when it comes to terminal usage. I’m currently creating a course on deploying web applications and spent the last month working full time in a terminal.

For every day of the month I’ve had ~6 terminal tabs open, each with multiple split panes, SSH’d into various machines and running commands that have produced thousands of lines of output per day.

I even kept my terminal windows open overnight for 18 days straight. I would have kept things up longer but Windows rained on my parade by deciding it’s a good idea to apply a patch and rebooted my box while I slept.

Hyper is solid in the sense that it never crashed or had a show stopping bug. I was running a Canary build too, which is the latest semi-stable pre-release.

CPU / Memory Usage

I opened 20 WSL terminal windows and when idling, it barely used any CPU at all.

It was 0.2% CPU according to the Windows task manager. Of course it spiked the CPU while I was opening them all quickly, but no one just spam opens 20 in a row like a maniac and even then the spike only lasted for a few seconds.

As for memory, every single Hyper related process for 20 terminals added together used 650mb of RAM. That’s kind of a lot because it’s an Electron app, but truthfully, I don’t mind that much because it doesn’t have a negative effect on my day to day usage.

My 5 year old desktop workstation has 16GB of RAM and unless I’m running a bunch of virtual machines at once, I rarely go over 8GB with tons of things open.

I think for most development boxes you’ll do just fine with Hyper on resource usage.

Themes / Looks

There’s about 20 or so themes you can find on their website.

I do a majority of my coding during the day so I tend to prefer light themes and I was very happy to see that the hyper-one-light theme was available.

My new favorite light theme (hyper-one-light):

blog/hyper-one-light-theme.jpg

I can honestly say, this is the nicest light terminal theme I ever used. Every single color is distinguishable and it looks great. I’ll be recording my course with this theme.

Here is the same terminal output using the hyper-dracula theme:

blog/hyper-dracula-theme.jpg

For night time coding sessions I usually switch to Dracula for both my terminal and VSCode.

This might sound silly but, this is a pretty big deal. Not having to create a theme from scratch or use one that I didn’t really like is a huge win.

The Hyper window itself is super minimal too which I like. There is an option to add the standard Windows buttons (min, resize, close) if you want them, but I just use the hotkeys.

Opening Speed / Typing

If you prefer using tabs and split panes you’re in luck because then it’s fast.

Opening a new tab and getting to the point where you have a prompt to enter text only takes about 1 second which is pretty good. Opening a split pane is the same speed too.

However it takes about 5 seconds to open a completely new terminal window. This doesn’t bother me too much because 99% of the time I’m using 1 terminal window that has multiple tabs and each tab has 1 or more split panes.

I’m not going to lie, there is a noticeable type delay even compared to VSCode which is also an Electron app. It’s hard to put an exact number on it but it feels like there’s maybe a 50ms delay from pressing a key and seeing the character appear.

It’s enough to where if you’re sensitive to this sort of thing you will notice it, but it’s really not the end of the world. For comparison I cannot notice any type delay in VSCode when compared to typing in a notepad.exe window.

That leads me to believe there’s a lot of room for improvement with Hyper to reduce perceived keypress latency, and to also reduce the initial opening speed because even VSCode opens way faster than Hyper and VSCode is much more heavy of an app.

Scrolling and Searching

Scrolling just works. The mouse scrolling is the fastest I’ve ever seen in any app and it’s like the complete polar opposite of ConEmu. Well done Hyper team!

Hyper has no built in way to search through your buffer yet but you can grab the hyper-search plugin to do it. It’s a bit rough around the edges but it gets the job done. Hopefully the Hyper team adds searching to the core terminal at some point.

Hotkeys

Well, there’s not much to say here other than you won’t be disappointed. You can configure just about everything with a hotkey and the defaults are good for most things.

Here’s a full list of the available key bindings.

Settings and Plugins

The settings are just a Javascript object, so it’s really easy to configure things like which font or cursor shape to use, etc..

As for plugins, you can find an incomplete list at https://hyper.is/plugins?newest. The only plugin I installed is hyper-search. I’d rather have a fast and minimal terminal instead of making it all fancy with power strips and animations, but if you want all of that, it’s there.

Hyper Is Good but It’s Not Perfect

At the time of writing this article, the latest canary build has a bug where the the prompt isn’t visible when opening up new horizontal split panes because its Y axis is offset incorrectly. You need to push it down by creating output.

I reported the bug on GitHub and it kind of worries me that no one has replied in 3 weeks but I imagine it will be fixed at some point.

Other than that and the minor type delay, I’m quite happy with Hyper. It’s not my dream terminal, but it does check off most things in my list which makes me happy.

I’ll be using it full time until something better comes along.

Are you using Hyper? What do you think about it? 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