# Title Min Max *Avg* SD
1 iTerm 3.3.0beta16 11.2 33.6 15.9 3.4
2 iTerm 3.2.9 10.8 29.5 21.3 4.5
3 hyper 3.0.2 22.3 46.9 27.6 3.6
4 Terminal 2.9.1 2.4 8.3 5.8 0.5
5 Alacritty 0.3.3 5.2 16.8 6.3 1.4
6 Kitty 0.14.3 7.7 11.6 9.6 0.8
Edit: Added iTerm 3.2.9 (2) added alacritty (3) added Kitty
I live in fullscreen iTerm, Tmux and Vim. I have 256 colours enabled. Vim has lazy redraw enabled. I'm on a 2018 MacBook pro. Scrolling is smooth only when connected to power (probably related to CPU throttling - but it's 2019 and it shouldn't matter). iTerm is significantly faster than Terminal when resizing Tmux panes and Vim windows. I've had similar issues on Linux.
The only terminal emulator that has decent performance scrolling and resizing Vim buffers Alacritty.
What's going on? Why is there a bottleneck here? Is it rendering the text? Is that still hard to do in 2019? I don't understand the technical challenge of parsing a protocol that would literally work on a real VT100 sans some escape sequences and colours.
This likely isn't CPU throttling at all. iTerm by default uses the faster Metal renderer when your MBP is plugged in, and a different renderer when not. You can adjust this so that it always uses Metal by following the instructions on this page: https://gitlab.com/gnachman/iterm2/wikis/Metal-Renderer
If you live full time inside iTerm, I would highly recommend reading over the documentation and becoming fully familiar with the different aspects of it and what you can tweak. Despite it being something that merely "displays a matrix of a few thousand characters", it is still a very complex piece of software and knowing at least a basic level of its configuration will likely be worth it.
There is also throughout. Some programs have real problems rendering large amounts of output, i. e. when tail'ling logs. This was a significant problem with Hyper, for example, but they have changed the backend library and it's fine now. I believe the reason here is usually a lack of bouncing, i. e. rendering for every new character even if they arrive faster than the refresh cycle.
It's not entirely unreasonable that rendering takes some time. Terminals have evolved and, as but one example, character widths now vary even when using monospaced fonts (non-ascii characters, emojis, whatever). Then, there are fancy additions like ligatures, transparency effects, etc.
Please try to explain your performance issues, the author is active on HN and perhaps he could comment on it.
Host * !github.com
LocalCommand printf '\e]7;file://%n/\a'
Seriously, I don't understand what the benefits are, if it's only "just as fast as Terminal.app".
But among those features is tmux integration and now python extension support.
IIRC iterm2 has a setting to disable gpu rendering while on battery which is almost certainly your issue.
It can be super slow. I've compared scrolling in Vim
and Emacs on the same (large) json file and Vim is painful and Emacs is almost immediate.
> I don't understand the technical challenge of parsing a protocol that would literally work on a real VT100 sans some escape sequences and colours.
We definitely ask a lot more of a terminal today then we did of a VT100.
First, it's not really a grid anymore: double-width CJK characters and emoji break that assumption a bit (though it still holds if you just consider them as 2-column glyphs). Our fonts are nicer: we have vectors not bitmaps, anti-aliasing, ligatures, combining accents. Color, but also effects like bold/italics. iTerm2 is also capable of images (even before this release, which added sixel graphics; it can output some other format (PNG?) with a special escape.) iTerm2 will dynamically wrap lines (it remembers where actual ␤ chars are, and if you resize, it can re-wrap the lines appropriately). It can pick out URLs, and make them easily clickable/copyable. It tracks the timestamp of each line of output (press ⌘⇧E by default, or View → Show Timestamps). And it's doing this on top of an OS that is also mux'ing your display out to multiple applications (windows), shared with the same CPU that is driving the programs emitting the output into the terminal (it's not dedicated hardware).
And the terminal protocol is not really simple… some aspects of it rely on how fast input comes from (this only happens on the input side, I think, and there's a varieties of "if this, then this sequences means X, otherwise it means Y".
I too would ask for better perf from iTerm2 (I get much better perf from Terminator on Linux — but it doesn't have quite the featureset that iTerm2 has, I think) but I do think that there's a lot more going on than one might give the emulator credit for.
> The only terminal emulator that has decent performance scrolling and resizing Vim buffers Alacritty.
I've not used Alacritty, but my understanding is that it (intentionally) has a much narrower feature set to support. (I personally prefer something feature-ful like iTerm2.)
> I'm on a 2018 MacBook pro.
I've actually wondered if this is part of it. I get low perf from not just iTerm2, but my system in general. I've looked for, and not really found, a way to see what the core temps are (I've mostly found this, but the numbers are rough) and whether it is being thermally limited (I have no idea). The MBP's limited intake/exhaust areas just feel to me that they would significantly limit the thing's ability to dissipate heat. (E.g., my Lenovo has much more surface dedicated to airflow, and I seem to get better perf from it. The Lenovo also gets hotter too, so… IDK. But it also runs Linux and Terminator, so it's hardly an apples-to-apples comparison.)
I personally find the following either cool or really productive;
Regular Expression Search,
Save Mark/Jump to Mark
1. Built in password manager (command-alt-f) for the Times you’re stuck with ssh passwords
2. Output triggers: iterm can run actions in response to certain text on stdout: I use this to insert a mark at each terminal prompt line and when the phrase “NOTICE ME:” is detected. This way, I can use iterm’s mark navigation features to quickly jump to interesting lines
3. Finally, the biggest advantage of iterm is its ability to auto detect soft boundaries like vim vertical splits and restrict selection to one side or the other of the split.
# Title Min Max Avg SD
1 st 12.6 38.1 20.7 6.8
It would also just be nice to know the magnitudes. If the hardware adds a constant 100ms (for example, not a real number) then a 10ms advantage on the software side looks less interesting.
I use it on Windows, like it very much, and don't notice any lag. I'm wondering how it compares to the rest of these on a Mac.
# Title Min Max Avg SD
1 Zorc 2.9 33.2 12.5 5.6
But I don't know why anyone would choose to use that on a Mac. The UI requires initiating connections to remote systems (or "localhost") through the GUI -- which feels really backward when you can just open a new window/tab on any other terminal app (for local tty sessions) or run ssh from the command line (for remote sessions).
I guess it's because I don't use a Mac very often and when I do I don't usually have a reason to use the local terminal. I find that's true on Windows as well, I don't often need to use the command line.
OTOH, I'm SSHed into remote Linux servers 40+ hours a week.
If you in a position to support free software, I kindly suggest donating to George's Patreon: https://www.patreon.com/gnachman/
It's one of the few pieces of software that I really miss when I'm on my linux boxes -- even if its purely aesthetic.
edit: if you want your status bar at the bottom, Prefs > Appearance > General > Status Bar Location
If you hit rainbow and hate it, just remove the items and re-add them and they'll go back to normal. :)
I've been running the 3.3 betas for a while and some of the new functionality is really great. Exporting a recording of a terminal session from the "Instant Replay" panel is very handy!
This was a big one for me. Cut/Paste between applications and whatever is running in the terminal with tmux can be a real pain. Not so much with iTerm. And the consistency goes a long ways when you're trying to get stuff done.
Developer is responsive and it adds enough to the experience to make it worthwhile as a wrapper.
Now I wonder if I could make Sublime Text / VS Code style command palette within iTerm... Probably requires Python shell script as front. I didn’t yet find mention of custom dialogs or the like in the API docs.
Do you have specific use cases in mind?
I'm looking to get:
- switch layout and run server/compile start commands and the like for given project
- call my own shell scripts and assorted helpers from terminal's context
- get Jupyter notebook running and console connected to it
- connect to tmux session on host or start one with given layout if it isn't there
- Kubernetes and Docker context in their own tabs
- Quick Open can probably take care of finding tabs and ssh sessions so need to learn to remember it's there
That's the first things I find myself constantly doing manually. Nothing that can't be done, say, with regular shell and TMUX stuff, but those have so low level control mechanisms. I'm hoping Python access to gives same power with less work.
It's briefly mentioned under "View > Open Quickly" on https://www.iterm2.com/3.3/documentation-menu-items.html:
> If you have lots of sessions you can quickly find the one you're looking for with Open Quickly. Select the View > Open Quickly menu item (cmd-shift-O) and then enter a search query. You can search by tab title, command name, host name, user name, profile name, directory name, badge label, and more. Queries are scored according to relevance and sorted by score. Open Quickly also lets you create new tabs, change the current session's profile, open arrangements, and change the color preset. If you start your query with a / then that gives you a shortcut to various commands. /a followed by an arrangement name restores the arrangement. /f restricts the query to existing sessions, excluding options to open new tabs, etc. /p restrics the query to profile names to switch the current session to. /t restricts the results to "open new tab" for matching profile names. /c restricts the results to color presets.
I think with /s and creating custom scripts you could wire up some of these use cases.
For example, re-create a layout of multiple tabs with specific split panes for each project.
Previous attempts before this API were a struggle:
- You could almost do this with Saved Window Arrangements but not quite and there was no association to a project.
- You could also hack something with profiles if you're willing to make a profile for each project, but it still doesn't get you there.
- Bury Session is the closest which pretty much does what I want but it keeps all of the tabs running in the background. This can be a lot when you have 5-10+ tabs open each across multiple projects. No way to "sleep" a buried session that I could find.
- I also tried implementing it via the previous AppleScript API and it turned out to be a lot harder than expected to open "2 tabs with 3x2 split panes each and run commands x, y, z, ... in them". Then I called the AppleScripts via Python so I could template them more easily. I got about halfway there.
I also have some helpful triggers, which I currently have a wiki page explaining how others at my company can set up. It looks like I could replace those instructions with a single command using one of these scripts.
Those are the two things I've been wanting to automate for a while. After doing them, I imagine there will be plenty of things I never thought of before but will now that they're possible.
I have a tangentially related Docker use case: I'd like Docker Desktop (and Kubernetes) to spin down automatically in the background anytime I haven't run a container for some period of time and am on battery. It drains so much power even when idle.
I think there are quite a few low-hanging fruits for the terminal, such as better integration with documentation or using an actually good language such as ruby directly on the command line. If I ever get around to try some of those ideas, I'd use Hyper as the platform.
The reason I stick with VSCode even though it's slower than other editors is because of the features.
Hyper has non of those.
Switching to iTerm2 has been amazing. And with the new design in 3.3, I'm loving it even more.
Unless I find more creative ways to use it, I'm sticking with terminal.app because it's basically the lowest input delay terminal out there.
Apple’s Terminal.app is more performant rendering text and more responsive to input while admittedly having somewhat less unnecessary features.
In fact, iTerm is one of the slowest terminals out there!
iTerm used to have a lot of really compelling stuff that was missing from the official terminal like tabs, etc... that made straying away from the canonical terminal app worth it but most of them eventually made their way to Terminal.app so nowadays it’s mostly just fluff.
Also, iTerm2 is worth it just for the "Copy to pasteboard on selection" option, as well as the corresponding ability to disable "Copied text includes trailing newline", which has saved me plenty of "crap, I didn't mean to run that!" moments.
As for pasting, what shell are you using that doesn't support paste bracketing?
The only reason I downloaded iterm2 many eons ago but stayed for the rest
The reason for this is the same reason that edge/safari have better scroll+graphics perf in their native OSes over Firefox and Chrome. 1st party browsers use internal apis that MS and Apple use and don’t expose.
Those things hardly matter at level of difference between the two apps... This is not like Atom and Vim speed difference, this is more like Vim vs Emacs...
I have tried Terminal.app multiple times, but have come back to iTerm2 every time because I've not been able to figure out how to do that.
Why _not_ use tmux? It is pretty fantastic software, and IMO provides a much better interaction model. iTerm itself is even integrated w/ tmux through control mode.
Also, not really a Tmux problem, but every so often I'll encounter some wacky behaviors with scrollback & when doing cursor selections via PuTTy from my windows boxes.
When I'm on linux I end up using Konsole or Terminator (depending on the env) which support this functionality. So other than the saving remote sessions - which looks really cool - I've not had a strong impetus to learn tmux.
1) Rebind the prefix key from ctrl-b to ctrl-space.
2) Map alt-h,alt-j,alt-k,alt-l to move between window panes.
3) Remap the split keys to something more accessible.
4) Start numbering windows at 1 instead of 0 (makes switching more intuitive imo).
5) Steal a simple configuration for the status bar from the internet.
Beyond that, the defaults are pretty straightforward, and you don't really need to know much to get started. I can share my config if someone is interested.
If at some point you move to Linux or Windows, you can learn tmux proper there. No reason to resort to lower common denominator behavior just to get a "cross platform asset".
Cmd + Shift + D
Or better yet, just use tmux!
Ideally, I'd like to be able to have native iterm windows and panes, but with tmux keybindings..
The new minimal and compact themes look great. Is it possible to drag the window when they are active? It looks like the drag region is reduced to a small area around the stoplight buttons.
iTerm is one app that is always on and in use. Especially thanks to its fast full screen switching and transparent tmux integration. I’ve been contributing through Patreon and consider that money well spent.
Hopefully this python API fixes the problem.
Two pain points I'm running into with this release:
1. The tab titles just say the profile name (in my case, "Quake-style") rather than the foreground process name (bash, curl, etc.). It's subtle, but annoying given that I've become accustomed to relying on that information to quickly differentiate between tabs.
2. When I close every open tab and then re-open iTerm with my hotkey (F12), it starts off minimized and I have to drag the cursor over to the dock to manually open the window.
Thank you for this! Can't believe how many times per day I accidentally trigger touch bar Esc.
Second, I'm not sure if this is a bug or a profile configuration I have, but when I have my tabs to the left in the new minimal mode I think my terminal is clipping the window bar:
Edit: possible GitLab issue https://gitlab.com/gnachman/iterm2/issues/7988
I don't really remember what my cursor looked like before the upgrade; maybe it was a red block? But now you can't see it.
My cursor outside of vim is fine.
Never use tmux, just tabs in iterm.
The new iTerm features sound really awesome, but the one thing I'm already missing badly is inline image-rendering via escape codes. I had a great workflow set up on for viewing astrophysical data products on a remote analysis server using the itermplot matplotlib backend to render plots directly in my terminal from ipython. I'm still planning on firing up iTerm2 for that use case.
All that said, iTerm2 is the best terminal emulator I've ever used, especially when you're first learning things. I probably wouldn't have been able to switch to tmux as easily if I hadn't already used it a bunch through iTerm2's beautiful tmux integration (I'd already configured some tmux functionality for that use case). The aforementioned image-rendering should be a universal feature for terminals. And though the input and redraw lag are higher than Alacritty or Terminal.app, it's always been fast enough. I still recommend it to people with Macs who are just starting to program.
That said, if you're a speed addict and want something with limited but easily-configurable features, give Alacritty a try!
 I should also mention that, if you're willing to put in more effort, you can implement a ton of iTerm2's visual bonuses (like the status bar and pretty icons) with a combination of a Nerd font  (particularly a pretty modern one like Iosevka ) and an advanced tmux configuration .
> Major version
Why do people hate semantic versioning so much? Just call it 4.0.0 if it's a major version, or if it's not, don't call it major.