Performance

This is a short comparison of different terminals and their performance.

Terminal apps selected for these benchmarks

We chose to benchmark Warp against 4 other terminal emulator applications, based on their popularity as well as language and principles. Here is the list of the applications we chose for this comparison together with the explanation as to why we decided to include it in our comparison:
  • Terminal.app - the default terminal app available on the macOS;
  • ITerm2 - one of the most popular terminal emulator used by macOS users;
  • Alacritty & WezTerm - both of those terminals are written in Rust and are well-known for their speed and overall performance, things that Warp is aiming for.

Versions & settings used during the comparison

Terminal
Version
Terminal size (cols / rows, window is identical pixel-wise)
Warp
v0.2022.04.01.01.37.stable_03
208 cols / 54 rows
Terminal.app
Version 2.11 (440)
188 cols / 72 rows
iTerm2
Build 3.4.15
211 cols / 78 rows
Alacritty
alacritty 0.10.1 (2844606)
286 cols / 102 rows
Wezterm
20220319-142410-0fcdea07
243 cols / 80 rows

About benchmarks

We link the source code of each benchmark used, so you can easily reproduce the tests with other terminal apps. Please, note that those benchmarks are not exhaustive. Comparing terminal emulators with each other is not an easy task - right now we're checking how each of the apps behaves when dealing with lots of input and/or output.
Ideally, the benchmarks would also cover the latency (time between pressing a key and the character showing on screen, but also a delay between user's input and communication with the shell). We may include tests that account for that in the future.

VTE benchmark

Benchmark code can be found here with the specific commit we used in our comparison: 93bcc32b6e0f7560e9b1a5a8b0998c04fbf9b50d.

Average time for each of the benchmark tests

Text
Warp avg
Terminal.app avg
iTerm avg
Alacritty avg
WezTerm avg
dense_cells
43.88
24.91
144.84
7.25
28.15
scrolling
30.06
283.34
1257.57
31.75
687.77
scrolling_bottom_region
117.34
257.23
1294.25
29.1
672.67
scrolling_bottom_small_region
114.52
227.75
1251
25.98
669.93
scrolling_fullscreen
37.4
307.03
1565.17
37.36
1205
scrolling_top_region
120.63
209.29
2212.2
84.42
682.6
scrolling_top_small_region
114.64
205.59
1216.33
21.91
663.44
unicode
66.47
34.45
93.01
16.78
1279.25
VTEbench average results (logarithmic scale )

P90 of the results

Text
Warp p90
Terminal.app p90
iTerm p90
Alacritty p90
WezTerm p90
dense_cells
52
28
189
8
32
scrolling
32
266.76
1336
32
707
scrolling_bottom_region
170
243
1398
30
686
scrolling_bottom_small_region
167
224
1331
30
679
scrolling_fullscreen
38
327
1593
41
1208
scrolling_top_region
178
222
2243
85
686
scrolling_top_small_region
167
222
1314
30
666
unicode
77
39
90
20
3883
VTEbench p90 results (logarithmic scale )

Termbench

Benchmark code can be found here with the specific commit we used in our comparison: 82afbc69256b4e22de913f0f02f82e0480f3dac5.
Below you'll find results for small and default test sizes. Note that Terminal.app only participated in the small test.

Small test sizes

Text
Warp small
Terminal.app small
iTerm small
Alacritty small
WezTerm small
ManyLine
6.7854
2.6789
8.7057
1.2532
8.9436
LongLine
9.0033
1.6473
9.0849
0.8179
11.4587
FGPerChar
1.3716
453.9888
2.6625
0.2788
0.6487
FGBGPerChar
2.8403
908.894
4.5881
0.5931
0.7283
overall result
20.0006
1367.209
25.0413
2.943
21.7793
Termbench small results (logarithmic scale )

Regular test size

Text
Warp regular
iTerm regular
Alacritty regular
WezTerm regular
ManyLine
113.76
132.4975
19.8802
150.8175
LongLine
155.0937
126.7561
12.7859
207.3647
FGPerChar
21.8928
39.3352
4.2925
9.4265
FGBGPerChar
46.312
50.5369
8.418
13.5142
overall result
337.0585
349.1258
45.3767
381.1229
Termbench results (logarithmic scale )