Recently switched to WezTerm and I'm very happy. Was using kitty before that – loved the set up and simplicity coming from iTerm2. WezTerm is leaps and bounds better in terms of what comes out-of-the-box. My terminal config is short enough to sit all in one screen on my editor. After that, the terminal just... gets out of the way and I don't need to think about it.
But the straw that broke my back with using kitty was, I'd end up encountering issues or trying to recreate some of iTerm2's features, only to end up time and again on kitty's maintainer's terse and dismissive comments.
e.g. IIRC his answer to "How do I set up tmux with kitty?" was something like "Don't, tmux is dumb" and closing it. Eventually I gave up.
> e.g. IIRC his answer to "How do I set up tmux with kitty?" was something like "Don't, tmux is dumb" and closing it. Eventually I gave up.
Heh, I switched from Kitty to Wezterm due to the exact same types of comments from the maintainer. It's his project of course, and he's a great programmer, but some humility wouldn't hurt.
> the exact same types of comments from the maintainer.
Kovid really bugs me and is a reason I turned away from kitty too. I saw his character when looking up tmux issues. He's brash like Linus, but at least while Linus is calling you an idiot he'll tell you a better way to solve your problem. Kovid seems to think tmux is really about splitting panes and peoples' main draw to it isn't about persistence...
On a side note: I really don't trust devs who reply to issues and close them. I get wanting to remove the issue from the task list, but just set up an action for stale issues (which has an added advantage of pinging the user who may have just lost the message). Otherwise let the user close because they might have follow-up questions. It's just disrespectful and always a red flag. I know lots of users are dumb (I literally just got an issue on a research project with someone asking how they fine tune our model...), but noobs are wizards in training. You don't have to be nice, but don't be mean either. Plus, you'll just piss off people who could end up helping you. And if you don't want help, I expect your project to decay when you get bored. Definitely not what I want from a terminal
"Are you sure you want to close this window",
meant to only trigger in interactive scenarios like ssh or htop, triggered on the regular shell sometimes. Not even consistently
> The gcc people have a BAD attitude. When the meaning of "inline" changed (from a "inline this" to "hey, it's a hint"), the gcc people never EVER said "sorry". They effectively said "screw you".
> Comparing it to the kernel is ludicrous. We care about user-space interfaces to an insane degree. We go to extreme lengths to maintain even badly designed or unintentional interfaces. Breaking user programs simply isn't acceptable. We're _not_ like the gcc developers. We know that people use old binaries for years and years, and that making a new release doesn't mean that you can just throw that out. You can trust us.
Which I think is an important lesson here. About how when you build tools, people build around you and what they have to work with. But I'm surprised this attitude is not more common, because I don't know a single person who is unfazed when changes happen that break their programs/workflow. It's reasonable for someone to be upset. And not a single person is ever like "no worries, I'll go read the commits first, no need for documentation." (Don't get me started on "my code is so clear it doesn't need documentation" people...).
I think one big issue with all this is that costs are outsourced either to time or someone who isn't you, and this naively makes people believe that there is no cost (and sometimes fight to reject claims of cost. There is always a cost. There's a cost to everything). I wonder how much time and money would be saved if we recognized this. I just don't know how to motivate solving this, as it's non-obvious.
I've migrated to Wez already. I actually had issues with them too but wasn't as bad as Kovid. More like what you said "Not our problem, it's X's problem." (Brew devs love to do this too) Leaves a bad taste in my mouth but dismissal is better than dismissal + gaslighting + insulting.
Plus, Alacritty just hasn't been a great editor. (I wish foot would build a cross platform version[0]. But I'm not entitled enough to expect someone write code for me, though I might ask)
While I mostly agree, it looks like the fair amount of the article is about his attitude.
Something that was a bit surprising was the combative tone that Calibre's lead developer Kovid Goyal took in the comments on the bug. Rather than working with Donenfeld to see what the problems were, he dismissed most of the bugs as invalid. Even after Donenfeld tried to further point out the problems, Goyal was rather sarcastic in response:
You mean that a program designed to let an unprivileged user mount/unmount/eject anything he wants has a security flaw because it allows him to mount/unmount/eject anything he wants? I'm shocked.
This does not appear to have changed if you look at his responses to issues. I linked the tmux stuff in a different comment (same root).
Both skills and personality can chance a lot over a decade and I'm glad you're not quick to jump the gun. We need more people like that. But given brash comments over the past few years, it does not seem like this part has changed. He's been working on kitty for 8 years and has only accepted minor PRs and is dismissive of user issues.
Does WezTerm support an equivalent of iTerm's "hotkey window"?
For those unfamiliar, that's a window tied to a show/hide keybinding which when shown floats above all other windows, making a terminal instantly available everywhere - a feature I could live without, but don't care to. I'd love to switch for all of WezTerm's other features, but without that it's simply a nonstarter for me.
I don't have a keybinding to hide, but you could easily achieve that by inspecting the active window with `hs.window.focusedWindow()`/`hs.window.frontmostWindow()` and making the behavior conditional based on the application: https://www.hammerspoon.org/docs/hs.window.html#focusedWindo...
Note that this does only the “show/hide’ the window part;
The iTerm2 hotkey window, is a floating window, which for example also works in a space with another Fullscreen window/app opened (without moving to another space.)
I do it using https://gist.github.com/meowtochondria/8b99b8fbf364eec41ef66... on my Debian based machine running X11. I've bound this script to a key as a global shortcut using OS provided facilities. See the comment on gist if you have a different setup and want to adapt it to your needs.
Algo:
1. Find path to wezterm binary by looking at desktop file
2. Use pgrep to get pid of running binary from previous step.
3. If no window is running, launch desktop file using gio
4. If window is running, bring it to front using wmctrl
That's related to it, but the feature per se is more like a specially handled variety of iTerm's profiles. See https://iterm2.com/documentation-hotkey.html, section "Dedicated Hotkey Windows".
As I get older, overly opinionated and dismissive maintainers are perhaps the biggest red flag for avoiding a project now. They often have what looks like the best product out there, but once you get embedded in the product you get stuck in their choices and have nowhere to turn.
While I see nothing particularly egregious about Kitty's maintainer, other than being a bit of a dick, it's not really the job of a maintainer to be your pal.
Except, when I started using WezTerm at the start of this year... omg, this guy is absolutely fantastic.
I have read scores of his posts and he's struck the perfect tone in every single one. Love this guy, really, he's awesome.
Yeah: the kitty developer is definitely the sort who believes that he not only knows better than everyone else how to use a terminal, but that everyone else's opinions are fundamentally invalid. That his terminal fails to correctly render such stalwarts as the Linux "make menuconfig" UI and there are no settings to fix it as he doesn't believe in settings is, to me, telling. I then find reading his posts on issue trackers not just insulting, but even "activating" in a way that is really unhealthy, as it results in me feeling a need to "defend" some random bit of terminal usage with just as much vigor, lest he get away with making everyone else sound like THEY are crazy... it really isn't healthy. I can't know for sure--as we don't live in this reality--but I'd like to think that, even if he and I agreed on literally everything there is to do with terminals, that I'd still have the same mindset that I'd rather write my own terminal than ever use his.
Remember that this is the guy who said he would personally maintain python 2 because he didn't want to rewrite calibre for python 3 [0].
I try not to knock the guy, given that kitty and calibre in particular are amazing programs, but I still think you've gotta keep that in mind when engaging.
FWIW, his conduct on the MobileRead forums where he answers questions from newbies and enhancement requests are far more polite and charitable. His ire seems to be reserved for fellow programmers.
> he answers questions from newbies and enhancement requests are far more polite and charitable. His ire seems to be reserved for fellow programmers.
Some programmers (like myself) have little patience for people they consider should know better and are wasting their time. These same programmers are far more charitable to newbies because they know newbies are still learning.
> Remember that this is the guy who said he would personally maintain python 2 because he didn't want to rewrite calibre for python 3 [0].
I read his "I am perfectly capable of maintaining python 2 myself." as "I am perfectly capable of maintaining [calibre running on] python2 myself", which is completely different.
I'm sure some people might also find his answer quite terse and dismissive ("No, it doesn't."), but I read it as a simple statement of facts, using the same tone as the original bug report, which itself is quite terse and imperative "Python 2 is retiring in thirty months. Calibre needs to convert to Python 3."
> Some programmers (like myself) have little patience for people they consider should know better and are wasting their time. These same programmers are far more charitable to newbies because they know newbies are still learning.
Some programmers are life-long learners and know a very different subset of things. It’s important to remember that just because something is obvious to you doesn’t make it right and doesn’t make it obvious to others.
Totally agree. Though, usually these programmers know how to properly ask a question, make a bug report and/or feature request.
They wouldn't, for example, just barge in an oss project with arguably low value statements like "Python 2 is retiring in thirty months. Calibre needs to convert to Python 3."
I am guessing you haven't interacted with the developer of kitty. It is astounding how needlessly rude he is. No matter our expertise, we all have areas of ignorance and it is precisely due to that ignorance that we may not have the language to "properly" frame our question. If we had that knowledge, we wouldn't be asking the question in the first place.
I have never seen a maintainer go so far above and beyond to condescend and insult people asking questions -- not making demands like your example. In my case, I asked a question about something that wasn't working as I expected in the github discussions and he repeatedly insulted my intellect (while simultaneously blaming another program when it was in fact a kitty misconfiguration that was causing my issue). He did eventually leave enough breadcrumbs that I was able to solve my problem but rarely have I had such a negative experience with asking an (IMO) not stupid question.
> I read his "I am perfectly capable of maintaining python 2 myself." as "I am perfectly capable of maintaining [calibre running on] python2 myself", which is completely different.
That doesn't make sense to me in context. Presumably he was already maintaining calibre on python2 at the time, so what additional information is he adding?
It seems more like he was saying "I am perfectly capable of maintaining my own fork of python2 for however-much-python-I-need to continue developing calibre." Which, granted, is not as grandiose as "I will become the maintainer for the abandoned python2 language for the internet at large to use", but it is still a rather tall order.
It depends upon what you mean by opinionated. There is software that expects users to behave in certain ways and there is software where the developer is quite firm about what they will and will not implement. I would say that calibre and kitty fit into the latter category. These applications offer a lot of features and are very configurable, yet they also don't try to be everything to everyone.
While I don't know why Goyal takes the approach he does, I would imagine that a lot of demands are placed on him simply because his software is so powerful (and, in the case of calibre, pretty much the only program in its domain that goes beyond serving basic needs).
How is the dev a jerk when they don't want to invest time into patching their app for the quirks of another app? Especially when kitty seems to have tmux-abilities out-of-the-box. I mean, you can like their solution or not, but calling them a jerk for not supporting your way?
You shouldn't believe things you read in hacker news comments. saurik is lying, probably because he once requested some feature that the kitty maintainer didnt like and refused with good reasons, which made saurik want to curl up into a ball and cry. To say kitty has no configuration options is the exact opposite of the truth. Proof: https://sw.kovidgoyal.net/kitty/conf/
I mean I might be "lying"... or I might be confusing him with the Gnome Terminal developers, with respect to that one specific tiny quote about "not liking settings".
(FWIW, the setting in question with respect to make menuconfig is "use bold as bright", where the kitty developer is on a vendetta to refuse the historical precedent. He is very adamant that he knows better than most everyone else on this point.)
Either way, I have never claimed to have talked to the kitty developer: I -- as well as multiple others on this thread -- are saying we've read how he handles arguing about terminals, and we don't like it.
Regardless, I do happen to be curled into a ball, and I do happen to look like I am crying... but it is merely because I am sick: I use xterm and I am very happy with the software and like the author.
OK so you are not lying, you are just wrong. Now that you have reduced the scope of your personal attack from he doesn't like settings to he doesn't agree with me about one thing, perhaps you should exercise your new found honesty a bit more and link to the issue where he refused to implement bold as bright and gave his reasons, which are perfectly sensible, namely that having that option means that the developers of terminal programs cannot rely on having a bold font face. Terminals are already limited to using only a single font size, you want to take away the ability to use bold faces as well. And you are trying to sell this as the kitty developer being unreasonable. Shame on you.
Look: my issue is that the kitty developer clearly thinks of himself as "God's gift to terminals". I pointed at one specific issue that I think is "telling" of an attitude of "I know better than everyone else", but I am not at all relying on that issue.
I just went through and started looking at recently closed issues on GitHub. I got through four before I found an example of what I think is the problem, and while this is a fairly benign one it is also clearly awkward enough that it shouldn't happen this often and is more than sufficient to clarify the complaint.
In this one, someone carefully points out an issue with a common script for emacs designed to implement the kitty-specific protocol (the one that kovid insisted everyone get on board with, as opposed to the prior art that already had traction, so now we have two competing ones; but that's my complaint, not the poster's).
Kovid then decides to pick a fight by being abrupt and a bit snarky in his response. Again: the issue was just technical and is good enough that I can probably debug the issue... I dream of getting bug reports like this, so this isn't the kind of response I would expect.
> I'm afraid I have zero interest in debugging emacs and kkp.el.
This is just downright mean-spirited. You can say something similar in a way that isn't grating in the same way, but Kovid prefers being grating, and clearly the person in the issue also took it this way and they get snarky back:
> If you aren't interested that's okay, of course.
> OTOH, I have zero interest in debugging Kitty. I'll just use Alacritty or iTerm :-)
Given Kovid's comment, I think this is in some sense a leveled response: Kovid is demonstrating he has little interest in being collaborative or helpful, even in an ecosystem that he created. I certainly don't act like that, even when people would use tools I actively disagreed with, I still would always help them debug it.
Kovid, of course, escalates this one further and leaves the thread in a pretty demoralizing place.
> Excellent! Don't let the door hit you on the way out.
Damn :/. That is what I am talking about. He isn't just grating in the way Linus was grating -- though Linus, to be clear, was also an asshole who, at some point, started to realize just how much of a problem he was being and is a lot better today -- and I also don't think he is just grating in the way that people who moralize (I am guilty of this one) do... he's just kind of mean, even when it makes no sense, and the result is that many issue threads with him get this "edge" about them where everyone is slowly escalating the burn until they just drop out of the thread entirely for their mental health.
(Part of me actually wants to now debug this specific issue, but I'd be doing it out of spite, and I do not want to be dragged into that. I only commented on this at all as I didn't want the person further upthread of me to feel alone in commenting on the problem with Kovid, and so I think it is reasonable that I get some of the flak here as I'm willing to bring the receipts.)
So, no: I simply don't think it is fair to say I am being dishonest, and the specific thing you quoted from me about him not liking settings is obviously not the point and wasn't something I delved into, as it didn't matter why: the issue was how... FWIW, in a thread where a bunch of people are all agreeing that Kovid turned them away from using kitty, maybe at least some of us have a point?
Let's discuss the parts you left out in your carefully constructed attempts at character assassination.
1) kitty has a template for issue reporting that the person that reported that issue didn't use, which means it isn't a carefully constructed report.
2) The issue is probably with kkp.el. I don't know about you, but I don't expect maintainers of open source projects to debug all issues in their own projects let alone unrelated ones. Kovid went out of his way to tell the OP exactly how to provide useful debug information. And he did so within a few minutes of the issue being opened.
3) The part you complain about is him saying he has zero interest in debugging kkp.el and emacs. Which is perfectly reasonable, again, why should he have an interest in it. He provided the OP with the means to give him information that he would be interested in debugging instead.
4) He then gets told that the OP would rather use some other terminal rather than provide the debug information he was asked for. Do you have any conception of how rude it is to go to some projects issue tracker and then state you are going to use a competitors product.
5) You tried again to insert an unjustified swipe at Kovid, with "the keyboard protocol he insists everyone get on board with". In reality that keyboard protocol is completely optional, an no one has to use it. The fact that everyone does actually use it, is testament to its being light years ahead of any of the alternatives and represents weeks of hard work on the part of Kovid to finally bring sanity to this corner of the terminal ecosystem. An effort he made for the good of the community. And an effort that has succeeded, since pretty much all modern/maintained terminal software support the protocol as it is clearly superior to the alternatives.
6) You were at best mistaken in making your claim that he doesnt like settings, but given you clearly have an agenda against someone who has done nothing to you other than provide the world free software, I think the default assumption is malice not incompetence on your part.
And yes by all means dont use kitty, I have a strong feeling that Kovid, who has been providing software used by millions of people for decades has reached a point in his life where he recognizes that some users cost way more than others. He is likely very happy that you and people like you give his work a miss.
A position I greatly sympathise with. People that report issues to open source projects need to remember they are asking for help, it behoves them to put in the maximum effort they can to reduce the burden of the free help they are NOT entitled too.
> where the kitty developer is on a vendetta to refuse the historical precedent
I mean, he's not wrong. Everyone else should update their shit to be proper so that he doesn't have to deal with all this legacy nonsense. It's just annoying as hell for people using it right now.
I recently moved from Kitty+Tmux to Tmux only setup. I think the maintainer has implemented most of the features in tmux like split panes, switching, changing layouts etc and is probably why says what he says.
I've been a long tmux user, but I've migrated to Kitty only setup. To make my muscle memory feel at home, I configured Kitty with nearly the same keybindings as tmux. Here is my setup https://blog.funcer.xyz/blog/kitty-terminal/
I appreciate his efforts, but tmux from my cold, dead hands. kitty is nice and fast, but tmux is in my blood (and on remote servers where kitty isn't).
I mostly like kitty but I’ve noticed that it takes a couple seconds to start up when I put my cpu down to 400Mhz. (Which might seem like an odd thing to do, but xterm handles it fine and, hey, why do we need billions of clock cycles to start up a terminal? That’s ridiculous).
400 is a bit extreme, it is as low as my clock will go. But I often go down to 1200 or 800.
I have an OLED screen and mostly use black background terminals, so I can get some pretty decent battery life out of it, especially at night when I dim the screen.
Dim/red shift/slow CPU is a nice low-distraction night time mode IMO.
Plus it is keeps my palms comfortable even if I accidentally run a computationally intensive code.
How is WezTerm compared to iTerm2, since you’ve used both?
I’ve tried Kitty a few times, since it has a few features I miss in iTerm2 (e.g. the “i3-gaps” aesthetics if you set the right flags, a plaintext config that is easier to sync, and its graphics and keyboard protocols have a wider ecosystem than iTerm2’s comparable features, and the “layout” feature).
But… I generally find that iTerm2 “just works” and requires little fiddling to get all the everyday stuff to work as I want, but I’ve been down many rabbit holes with my Kitty config. For now I’ve therefore stuck with iTerm2, but imagine that a well-configured Kitty might be nicer.
Basically it is how it presents itself as xterm-kitty and then how to make others recognize that. Installing terminfo on the remote is an option, lying and claim it to be xterm-256color is another (with caveats.)
As in other issues with kitty, the author is probably right. But for many people that they have many different kinds of remotes to log into where they don’t have control over, getting around with these issues is tedious.
Making kitty works is possible, and I learnt how to deal with these issues one by one, but hearing comments here on HN points me to wezterm and once I migrated I never looked back. For the simple stuffs wezterm gets out of the way. And there’s some interesting advanced stuffs to pick up, such as multiplexing with ssh: https://wezfurlong.org/wezterm/multiplexing.html?h=ssh#ssh-d...
In my experience Wez has been shockingly responsive to GitHub issues and usually fixes things (if they’re actually wrong) within a day or two. I’ve only found one or two minor quibbles involving modifier keys over SSH and overall the functionality is basically perfect for my needs. Plus it’s nice and fast.
(Former avid Alacritty user but needed better modifier support for remote emacs.)
Yes!! I opened an issue ( https://github.com/wez/wezterm/issues/4917 ), and not only did he answer it and my side question, he merged the two PRs I made to fix it super quickly!
A bit of a tangent, 3 days ago I opened a small issue with RiMusic, not only did the maintainer reply within a few hours, they implemented the feature I requested and it is already in the F-Droid build running on my device
I didn't have as positive experience.
Granted I commented on a closed issue. In any case it was closed as "won't do" and my comment was ignored. I didn't feel like opening a new issue for the same that was already dismissed.
https://github.com/wez/wezterm/issues/4706
The way you phrase that makes it sound like you had a negative experience, was that your intention? For all we know he didn't even see it, there's thousands of issues and PRs and it's not like this is his full time job, so missing a message sounds like a pretty expected and neutral interaction to me. There's a reason they used the word "shockingly" to describe his response time, it's because it's amazing that Wez can respond to even a fraction of all the messages as quickly as he does.
Also in case you wanted to bump up the priority of that bug, he does have github sponsors enabled.
The showstopping bug (or misfeature?) reported by others was brushed off, and my comment was ignored. It didn't seem like the path forward would be a pleasant one, so I've uninstalled Wez and gone back to a terminal that works for me. So yes, you could say it was a negative experience. I gave Wez a try as my daily driver, but it just didn’t pan out despite my efforts.
Regarding remote Emacs: WezTerm allows to completely capture and redefine key combinations. There's no good way to send things like C-S-", the terminal protocol just does not support them. So I made WezTerm send "<f12> c s '" instead, and added extra bindings in Emacs. This F12 trick allowed me to send quite complex combos that terminal protocols can't support.
Nifty! Appreciate your sharing that. I’ve managed to work around the few annoyances with remote for the most part but I’ve also accepted mostly that it’s just not going to be quite the same. I guess this is one or two steps closer.
I originally installed WezTerm because I switched from Kubuntu to Ubuntu and wanted some of the features of Konsole (infinite scrollback, searching the scrollback) without actually installing Konsole (I know you can install it under Gnome too, but it just felt... wrong). And yes, it instantly grew on me, although (as I can see from this article) I have barely scratched the surface of its configurability. My only complaint is that its many features are not really discoverable. Sure, the documentation is really good, and the author is very engaged and helpful, but... one example: I looked up how to select large blocks of text using just the keyboard, I did it once, said to myself "I have to remember this!", then promptly forgot it and now I'm back to selecting text with the mouse like an absolute noob because all in all for the few times I do this it's faster than googling that documentation page again...
It's useful out of the box but the superpower is that you can customise the regexes it matches. I've added one that finds all the filenames output by 'eza --icons' (\p{Co} matches the icon) so I can instantly type (by using shift+the quickselect letters) any filename after doing an ls (aliased to eza).
I am to understand that there is a way to do infinite scrollback and live searching the scrollback in WezTerm? I have not really found out how to do this like Konsole, and is the reason of often end up having a Konsole session running also. It is two incredible features when tailing live logs
Upvote! I tried Mac Terminal, iTerm2, Kitty, Warp, etc etc, and settled with WezTerm. Easy to configure, fast, looks nice. I created a theme for it too:
I've been using wezterm for around a year, and sponsoring Wez on github, and it's been a fantastic terminal and he's a great developer. One of the things I love most about it, which the article mentions it is not going into, is the quick copy and other copy modes. I use them All. The. Time. C-S-Space and type the letters that appear next to the item you want to copy.
One big use case I have is: mosh+tmux-like functionality from my macos laptop to my work Linux machine. I always have a session running so I can do things on my work machine from my Mac. It gives a re-connectable session plus panes and tabs so I can do work when I'm away from my desk. It's top notch.
One really cool feature of the quick copy mode is that if you do the uppercase version of the letters it will automatically paste the value back into the terminal prompt.
My favorite and often overlooked feature is that wezterm is fully cross os, so if you work like me in Linux, macOS and Windows, then you can just learn wezterm and be done. I even share large parts of my terminal config across os:es.
The one thing I don't like about WezTerm, at least the reason why I stopped using it, is related to how it handles copying wrapped lines into the clipboard. It might just be me, and how I use tmux, but I found that when copying a line that gets wrapped, it includes a newline in the copied text. Very annoying, and I think it has to do with the interaction between WezTerm and tmux.
I don't have enough evidence to create a good bug report, and I WezTerm has its own terminal multiplexing server ("ssh domains"), so it's probably not important enough to fix anyway. I don't want to install the WezTerm multiplexing server everywhere, and tmux is pretty much on all of the places that I ssh into already.
My main pain point switching between work macbook and personal linux machines is the shortcuts. The macos configuration options are limited and require various hacks, and while I could configure things on linux to match I really don't like the macos shortcuts. So I end up with a weird mix and each time I switch keep pressing the wrong keys all the time...
It is not performing well for me, tends to just freeze for a few seconds when switching tabs after some time. No idea why (large scrollback is my only guess, but I'm not sacrificing that) and how to diagnose this.
I switched to Kitty, and while it has its share of issues, at least it works.
that's where the language choices really matter I think. Lua as a programmable configuration language shines because it makes it quite easy to make environment specific changes. Also I think underrated side effect of Rust. A lot of the modern rust tooling has great cross platform support probably because there's a good abstraction layer between language and OS.
Isn’t that more just any language not C or C++? Go, Rust, Java, Python, etc all abstract away significant OS specifics. There are always going to be some thorny differences, but any modern language makes cross compatibility possible in a way that is more challenging for C.
Also it's well tested on all three. One look at wez' repo vs the rest in terms of GitHub actions, issues, and documentation was all the convincing I needed back in like 2019. Haven't turned back since. Heck it even supports tabbing out of the box!
It's the first terminal to truly replace urxvt for me in terms of support and speed. Before I was running termite and kept urxvt as a backup for some odd situations where termite got buggy.
I used wezterm a long while after switching from urxvt. There was a GPU memory leak or something, becuase after opening a bunch of terminals, I found that Graphics in firefox started lagging and dragging. I switched to kitty (And Microsoft Terminal on windows), but I use tmux inside (apparently much to the authors annoyance).
(self-reply) This is basically the Microsoft Word bloat problem. NOBODY needs all the features, but everyone has 10 niche features they want, and nobody wants the same 10. So to get 10 niche features, you accept bloat.
Going to echo some of the thoughts of sibling posters. I'd been an iTerm2 user since I first started using macOS nearly ten years ago.
I had really started to feel it slow down lately. It hit the breaking point when I was cmd-tab-ing and found myself waiting for more than a second just for the terminal to appear.
Looked around, evaluated a couple alternatives and none of them quite fit my taste. One terminal required an account/login to operate, which is a big no IMO, another was written in {Java,Type}Script so simple commands like `yes` would break it due to the async nature of streams in node.js.
I really like WezTerm so far. It's quite fast, very much configurable and comes with the theme I was configuring with iTerm2 out of the box (OneDark (base16)).
My only trouble with it was in the beginning when I had to add the configs for cmd-left and cmd-right in lua config, I really hoped they'd be in there with the defaults.
> One terminal required an account/login to operate, which is a big no IMO, another was written in {Java,Type}Script so simple commands like `yes` would break it due to the async nature of streams in node.js.
Let me guess, that's wrap and Tabby or extraterm respectively?
Nice write up, may try out WezTerm though I only just recently switched to Kitty and I don't like hopping around too often. Correction related to Kitty, though. It does not use either YAML or TOML, it has its own simple config DSL and is otherwise fully scriptable via Python.
What are you excited about concerning Ghostty? I revisit the project every once in a while, because I think Zig has a wonderful and bright future, but I don't think I could ever use a terminal emulator that isn't completely open-source. WezTerm has an _enormous_ leg up over Ghostty in this regard IMO.
I love Ghostty. On my old MacBook, it was by far the fastest terminal emulator (yes, I tried all of them, also WezTerm and Alacritty). Now on my new Mac it is still the most beautiful terminal emulator.
probably the most popular instances of this approach are firefox, chromium, and safari. the unix shell, godot, unity, unreal engine, truetype, and postscript are probably also worth a mention
A problem I have when I see stuff like this with tabbed interfaces, splitting etc. is it's all at the wrong level of abstraction and compensating for a hopelessly deficient window manager. If you use a window manager like sway then you can layout tabs, splits etc. to your heart's content for any type of window you like. You don't need a terminal emulator to do this for you.
Given that I do already use a window manager like sway, is there much else worthwhile compared to any other terminal emulator?
Wezterm has built in ssh support where if you open a wezterm ssh window to a remote host and then open new tabs/splits within that window, the new tabs/splits are added as part of the existing ssh session automatically. It also allows you to host the session on the remote machine (kind of like tmux) and when you connect you get back all your previous tab/split organizations. From that perspective it can make sense to have the terminal own the layout organization.
At a previous employer (Google) I really enjoyed using iTerm2, especially its tmux integration (`tmux -CC attach`) and shell integration (the terminal being aware of shell prompts and shell commands and outputs so it can do something intelligent).
After switching employers I no longer have a Mac to run iTerm2 in. So I decided to simply reduce the number of apps I require by running my terminal inside Emacs. The emacs-libvterm project is excellent. These days I no longer need a terminal emulator app.
Been a long time user of Alacritty but recently switched to WezTerm. Set up was super quick and having graduated control over opacity and blur was brilliant. Also love that it supports Font Ligatures.
Btw one gotcha on macOS during setup is that the left Option/Alt key does not emit the usual special character mappings, but the right Option key does. You can configure that too!
Apart from the granular blur control. It was mainly the ligatures support, Alacritty’s developer doesn’t seem too keen on it. And it seems to be the only terminal that renders the ANSI blinking escape code properly (although I don’t think it distinguishes rapid and slow blink). I think it’s a cool feature!
Unlike OP, I hardly use WezTerms features. I have hidden the tabs away and just use the old vim+tmux combo. So my config is just 25 lines. There was no weird colour interaction issue that alacrity+vim+tmux had (and there is a famous gist for). All which is to say I didn’t have to dive deep to migrate.
Yeah. I wish subtle design cues didn't turn folks off from useful software. That said, when I was test driving terminals a few months ago, I saw WezTerm and just skipped it because the main image shows the opacity-enabled terminal with a Cyberpunk image in the background, and that just seemed…amateurish? Dunno.
This article is convincing me to give it a second look.
Nice to see wezterm on the frontpage! For anyone giving it try beware that link detection doesn't work super well for links containing a `)` character which is something you run into frequently on markdown documents. More info in https://github.com/wez/wezterm/pull/4212 which has a workaround.
Thank you for this write-up! Going to copy a couple of things to my config. TIL, Wezterm has a command palette.
Wezterm with Zellij becomes amazing with how it just simply gets out of the way, even lets you remove window decorations entirely. I've heard Wezterm has a multiplexer too, but just haven't tried it.
Did go through it, bookmarked for use, that's how I learned about the command palette, just hard to break the habit of using zellij, that too with tmux mode :D
Amen. My motivation for switching was that iTerm2 would hang forever after I hit one of my Rectangle/Spectacle shortcuts. Many whole seconds waiting for it to go through one of the transitions in the 1/3 -> 1/2 -> 2/3 screen-size cycle.
No, and unlike the siblings I can actually feel it.
That being said, wezterm is about the only terminal I can use now (besides putty). I'm on a cursed setup, Windows with a Linux VM and whatever terminal I use it has to be able to directly ssh into the VM (NOT via ssh.exe), otherwise there's much worse latency/quirks due to stupid Windows conpty issues.
Currently it does not annoy me too much, but when I finally have time I think I'd try to fix it.
..you have noticable latency when you type? I'm genuinely sorry, that would infuriate me.
Personally I don't notice any typing latency in wezterm. I have p10k as a zsh theme and not really any 'plugins' beyond git for the terminal and use neovim+ also pretty much just got and CoC for an editor. I don't notice any latency when typing and, while not instant, still sub 200ms startup latency.
I remember being so frustrated with a Mac because of the animations. It would take like a full half second to maximize etc. I tried disabling them but then it would just do a cross fade or something and still be unresponsive when I tried to type/click on the focused window.
That plus cmd+space doing nbsp and Ruby (required by our IaC framework at the time) treating such differently than other whitespace was the end of my experiment, back to Linux lol
(I have no problems with Mac users and get the love for them, but I definitely prefer Ubuntu)
Like a few people in this thread, I was a decade long user of iTerm2. Can't really remember what was the reason to research other terminals, but I did and among those I tried, WezTerm was the clear winner.
I vaguely remember my main requirement was being able to configure CMD+D and CMD+SHIFT+D as split panes vertically and horizontally as I wasn't willing to retrain my fingers to learn new keystrokes for that. Within a version of two after I switched (back then, those were weeks or less apart), all my complaints were resolved and I never looked back.
My config is fairly minimal, but perfect for my needs. What else can one want?
Ah, OK. Basically many terminal emulators allow you to create text that is clickable, with the click going to an arbitrary URL. That could be a URL on the internet, but there are more interesting possibilities: e.g. you click on a line number in your terminal and it opens in your editor / IDE at that line number.
The standard link that started it is https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3c..., but if you do internet searches for terms like `terminal hyperlinks ripgrep` or `terminal hyperlinks ls` or `terminal hyperlinks delta` you'll find more.
I was until I started needing things like true colour support and was forced into trying other options. But if you haven’t noticed anything missing or not working with software that you use then Terminal.app is a fine choice
I try alts when they come up since I might like to use the same thing on macOS and Linux, but I've yet to try one that both has the right features and doesn't feel sluggish.
I really _want_ to like WezTerm but the font rendering just looks bad compared to Alacritty. I understand that this is a very personal feeling and plenty of people like the WezTerm way better... but not me.
The author is not interested in trying to fix this issue, which is totally fine, as they point out font rendering is very subjective, but I'm also not willing to use a terminal that looks worse, even though I like many other things about it better.
I'd probably try a few fonts first just to see if it's an issue with rendering, or if the font itself is problematic since sometimes it's the font's fault itself when it's being used in a different environment. (font internals are a crazy rabbit hole to dive down)
Besides, if you're trying another terminal it's also a great excuse to try other things too!
I'm a fan of tools like these where you compare a series of option pairs (in this case font pairs) in succession until it spits out your most preferred option: https://www.codingfont.com/
Oh man, fonts are fun. Ironically I moved off of alacrity and on to wezterm for font rendering reasons (p10k+patched nerd fonts), but that was pre pandemic
I gave WezTerm a spin and it had some showstopper bugs rendering my preferred font (including a vertical offset on "b" to the extent it looks like "h"). Something's definitely not right here.
Oh wow I was expecting it to be slightly worse, like the subpixel rendering wasn’t quite right. But that is _bad_, to the extent it looks like a totally different font. Dealbreaker.
I recently changed from Alacritty to WezTerm due to bugs in the former and I don't have any complaints so far. It is part of my daily professional workflow, works well with Tmux, under WSL. Great piece of software.
I went in the other direction and use Zellij for multiplexing. It works well for me, and I’ll be keeping an eye out for the Ghostty public beta to see how that compares. Great to have all these good options.
I also recently switched to WezTerm because it is the only terminal that seems to work cross-platform that is also well supported in Nix/nixpkgs. Before I was using Kitty in NixOS and iTerm2 in macOS, but having one configuration for both OS is good.
P.S.: I am temporary back to Kitty in NixOS because I recently switched from Sway to Hyprland and the current release of WezTerm seems to be having some issues in Hyprland. But will switch back once this issue is solved, I know it is fixed in the main branch for example, but I would prefer to use nixpkgs cache instead of building it from source.
Yes, but when I did the migration Kitty wasn't supported in macOS in nixpkgs (i.e.: nobody did the package integration). Now looking at the package it looks like it should work, but I now think WezTerm being superior in at least a few things (e.g.: the Lua configuration file is definitely nice).
As a neovim user, wezterm's lua config was a welcome surprise. Imo, its best feature is its command palette (Shift+Ctrl+P). Tremendously helps when you're just getting started. It has also a superb font-related configurations. I do hope I could map specific Unicode codepoints to a particular font, as is the case with kitty.
In terms of use-case, I just disable all its keybindings and use it as a tmux terminal. I admit I didn't look for solutions, but I just can't go away from tmux's session restoration capabilities.
I wrote https://github.com/zdykstra/tmuxc as an alternative implementation of iTerm2's tmux integration. It's terminal agnostic; it just runs a command for each terminal. Depending on the terminal you use, you could probably make it spawn each tmux pane into a dedicated tab.
It's very much designed and built for my specific needs on my specific desktop environments, so there's no promises that it'll work for you well ... or at all.
I only use tmux on remote machines (because Terminal has all of the features I want and don’t need session management locally). Does anything integrate with remote tmux? It would be great to get native tabs for remote tmux windows.
Yes, i literally sometimes need to manage dozens of machines at once, all with various tmux sessions monitoring tasks etc. being able to use the same keybinds for split pane, move between pane, smooth scrolling WITHOUT entering tmux curses based scrolling mode, and local buffering... number one reason i main macos after using linux for decades.
EDIT: the command is `tmux -uCC a` to connect to a tmux session, works locally and works over ssh. spawn the tmux session normally, disconnect, then connect via command mode for best results. you can still spawn a new one with just `tmux -uCC` but i have found i can get some issues when i spawn it in command mode vs attach in command mode.
I'm a long time tmux fan, but I've been dealing with odd issues related to mouse actions. This is somewhere in alacritty, *vim or tmux. So I futzed with all of them, tried different terminals, all while telling myself it couldn't be tmux. So I just ignored it for over a year. I finally went back and gave wezterm a serious try just a few weeks ago and I am very happy to have switched. The mouse issues I was seeing go away. Splitting panes and resizing lots of panes is fast and responsive. It's built in so copying from a vertical split pane doesn't include the other pane like in tmux.
That doesn't make it perfect. Mouse themes are applied inconsistently as I use Gnome on Wayland. It also seems to be a problem when using neovim, but I can't prove it clearly enough to want to file a bug with anyone. Besides, everything I need to do still works and I rarely use the mouse unless I am copying random gobs of text.
I am sticking with wezterm for the moment. I have no reason to leave it at this point and it helped me reduce the complexity of my stack a teeny bit.
I use tmux daily. tried to like wezterm but issues with clipboard and resizing made look for another option.
Very happy with Tilix now. https://gnunn1.github.io/tilix-web/
maybe less fancy/modern but absolutely rock solid every time.
environment: fedora/wayland/gnome
just throwing this out if anyone wants to test an alternative it out.
Ah, rats. It looks nice but to save others a bit of searching, if broadcasting to multiple panes is a requirement for you (something I use often in iterm2), it's not yet supported and not planned for support: https://github.com/wez/wezterm/issues/2658
Wez left the issue open and said "I personally have no plans to implement this any time soon.", so I have to imagine he's open to PRs. He just has other things to spend his own time on.
I’ve have been using wezterm for a couple of years now i guess. I am super satisfied with it, and show my appreciation by being a github sponsor. One thing that I really appreciate is, that when I at $work have to use MacOS, I can bring my configuration with me and have the same experience as on my linux box. Other projects do provide that also of course. I did try Alacritty, but that was way to unstable. Kitty have a lot of good stuff going on as well, but it was indeed the lua configuration options that made me pick wezterm. I think the only things I’m missing from Konsole is the infinite scroll buffer and the regex search overlay (continuous search without entering a special copy/search mode)…
I used WezTerm for a while and loved it, but then I discovered it had some strange interactions with other programs that use the GPU or OpenGL. In my case, when running WezTerm, the robotics simulation tool Gazebo Classic [0] would only launch properly 1/3 to 1/2 of the time. The rest of the time the simulation appeared to start, but no display ever came up and the program eventually segfalted. I thought this was a Gazebo problem, since it is a bit touchy, but switching to another GPU-accelerated terminal like Kitty or Alacritty solved the problem. I guess the lesson being, if your GL program is misbehaving when launching from WezTerm, try another terminal to see if that doesn't solve the problem.
Haven’t had the chance to play with WezTerm just yet but wanted to share that the author is an incredibly smart, friendly, and humble.
Had the opportunity to work on a project together at work some years back and I can only aspire to be 1/10th as good of an engineer as him. A true hacker.
One thing I was looking for just yesterday was a way to dump my terminal's (alacrity) scrollback - escape sequences and all - to stdout. I wanted to pipe it to my text editor to search. Alacrity doesn't seem to have this unfortunately, but wezterm does with get-text.
Have you tried xterm? It takes a bit longer to configure, as its defaults are universally horrible, but I've found the result to be worth the effort. FWIW, it has this feature you are talking about as part of it's "print" functionality. I bound ctrl-shift-P to print-everything() and then set printerCommand to `xterm -class modal -e sh -c 'vim +"setlocal buftype=nofile" +"g/^$/d" +"normal G$" - <&3' 3<&` (which might be crazy; I didn't think through it for very long). You can use printAttributes to tell it to include the format escape sequences, though (personally) I have that turned off for this purpose (as I find it makes it more difficult to search in my editor; but, again: I didn't spend much time on the editor side of this arrangement).
Hmm I'll have to look into this. After some basic playing around with this feature it might be workable. In my head I had my editor taking over the current program in the terminal, and after exiting it would return to the previous program, but that involves some backgrounding and job manipulation that I haven't given too much thought. Thanks for the tip.
Just tried it. I liked how easy it was to set up colours/fonts etc, using the config file.
But I hit a snag. On macOS, it's standard that in any text window, to select everything for copying, you hit Command-a.
But Command-a in wezterm just printed an "a" character. What?
I spent a while looking in the docs and issues, but couldn't figure out how to Select All.
I don't think I should have to justify it, but in case someone's wondering - it's useful if you want to search or parse an entire Terminal session using some other process (eg, grep), or edit it, or just persist it for example.
Regardless of why, "Select All" is such a standard function it felt quite strange it wasn't suported out of the box.
Select all seems a bit risky in a terminal because it could contain way more information than you'd expect.
e.g. I want to `cat` a file to make sure i've got the right one, but I accidentally cat a full 1gb sql backup rather than the tiny 50 line script I was expecting. Sometime later, I try to select all, copy, switch application, paste for some reason but now I'm stuck waiting for 1gb to copy over
Personally I'm a bit more cautious about copying from a terminal.
Either way if that's what you really want to do, you can check the repo to see how other people scripted it into wezterm:
What are you all doing that requires such fine grain selection of a terminal?
I spend a lot of time in a terminal and just use whatever’s there. Terminal.app or gnome-terminal. Before that it was xterm. Perhaps the only customization is modifier key on Mac as meta.
I'm looking forward to the eventual release of the new terminal that Mitchell Hashimoto has been working on for fun for a few year, Ghostty. From what he has shared online so far, it looks really awesome and well designed.
> My favourite WezTerm feature is its use of Lua for defining config.
That's indeed one of its best features (despite the warts of the language) as you're not as limited in what you can do vs. the data serialization alternative
I really seem to like software that's configured with Lua.
It looks nice just as a basic setup (key = value type stuff), but you can do really complex dynamic configurations with it (like the dark-mode config in the linked article).
Hammerspoon is another, you can do so many things with it - I replicated most of Rectangle/Manget with Hammerspoon+Lua myself and now I can do the minor tweaks I couldn't do with the pre-packaged apps.
I tried WezTerm on Windows because I was looking for a terminal with ligature support and lower input latency than Windows Terminal. Unfortunately, it still had higher input latency than cmd.exe. The only terminal with ligature support that comes close in terms of input latency is contour (https://contour-terminal.org/).
I can't provide you with numbers but back when I used Windows on my work machine, I recorded my screen + microphone input using OBS to compare they recorded keystroke sound and appearance of the character on my screen. I was able to confirm my suspicion in that WezTerm yielded higher input latency. This was especially noticeable when using helix inside of WSL - movement in normal mode would always sort of lag behind the keystrokes.
EDIT: Just installed in on my Mac and here, I can't notice any difference between kitty (my current input latency baseline) and WezTerm. Good stuff! Not sure how Windows fares nowadays, though.
As a fellow iTerm2 to Wezterm convert this hit home. There’s loads of useful stuff in here, too! Thanks for the write up. I particularly like the projects setup. I built Weztermocil to achieve something similar that uses itermocil’s configs since that’s what we use at work.
I have tried so many I can't count. I have settled on one that seems to be not as well known but should be. Black Box Terminal. It checks all kinds of great boxes for me, I love it.
The main feature for me is splitting panes. I used to that in tilix and got western working exactly the same (can't stand tmux , sorry).
The Lua configuration is very intuitive as well.
I do get some indirect crashes when Xwayland crashes, which is rare. I had to disable Wayland support in wezterm because the window decorations aren't great yet.
I'm with you! tmux is pretty much a non-starter for me beyond a remote job manager.
My window manager (Sway) already requires enough wild incantations. If any, I really appreciate simple integration in the terminal.
A little more than 'foot' but not a lot. Tabs/panes, like you say. It gives some more granularity to the organization without a lot of new buttons to push.
I've taken most of the Tilix defaults through several! Currently Kitty... though I may try WezTerm.
I wish I could bind applications to slide out from left and right, I use slidepad on Mac which is a slide out web browser, and TotalFinder which has a visor feature for the bottom. Little things like this keep me on Mac to be honest
In Quake, the video game, a console would slide down from the top of the screen when you pressed tilde. Combined with splitting terminals its incredibly convenient to have 4 or 5 terminals toggle on a hotkey
For me, speed, simplicity in configuration, and no AI is more or less a good start. I moved from iTerm to Warp recently, before switching to wezterm, and the only reason i dropped Warp (despite signing in) was that it comes in your way a lot, the click to focus on blocks becomes a hindrance for me (I hardly care for the previous blocks), the constant reminders in Red to update and obviously the AI prompting, albeit to the side, they keep trying to find a way for me to use it, but I'd rather stick with CTRL+R or quick google search than write a coherent sentence explaining things to a LLM.
I left iTerm because I couldn't configure it to my liking, although there are certainly ways to do it, i just couldn't. iTerm2 is certainly a good enough terminal, wezterm just somehow suits my needs better.
Would like to switch from Tabby on Windows to WezTerm, but would wish the Win installer would setup WSL2 so it just works. For now I don't want to get into learning a Lua config.
I'll need to look at it again. Mostly been using Tabby lately, which I like aspects of, but it can be sluggish. I really like the new Microsoft Terminal for Windows, but it's Windows only, unfortunately and I mostly use Linux and Mac.
I looked at WezTerm a long while ago, didn't even realize I'd already had it starred. Will try it out again soon. It's just another one of those things, that I prefer to use the same applications (if I can) on all the platforms I use.
I like it too, and have switched from iTerm2 to WezTerm recently. I tried some others, but WezTerm has window splitting which I use quite a bit so settled on it. Lua config is nice, although I am a minimal config kind of a person, so only have a few settings in there.
Yeah, iTerm2 has a lot of other fancy features, but I just rarely or never used them, so don't really feel like I miss anything.
If I'm fiddling with the terminal or the font, I know it's because I'm procrastinating. I've trained myself to quickly recognize such side-quests and feel a quick punch of hormonal urgency, which helps me get back to work (with mintty and Consolas). You don't need the bells and whistles.
That's correct if it's always or very often your M.O., but if you rarely mess with it? How about if you spend some time fixing any annoyances that have accrued over time thanks to "involuntary unpaid vacation time"?
For example, I recently reduced my terminal startup time to 1/3 what it was by putting in some optimizations. I'll be able to benefit from that for basically forever.
... Ah, you develop on Windows? This tracks, then... All productivity, no aesthetics >..<
As an aside, I'm surprised how Apple fans think they're the one with the aesthetics advantage when their Lord and Master allowed them to change the color of their menu bar in...2023? :)
yeah man, I remember reading stuff like that before I was sold on it and eventually it got to me (probably after another borked Arch install) and I was like "fuck it, I am diving into this mess come hell or high water" and...
... Yep. It's exactly as s/he said it. Once you grok it, you literally want it on EVERY COMPUTER YOU OWN.
IMHO it still needs to get more user-friendly, or at least have another layer that is more user-friendly, as well as have ramp-up materials that are consolidated and good, before it will be more widely adopted
But the straw that broke my back with using kitty was, I'd end up encountering issues or trying to recreate some of iTerm2's features, only to end up time and again on kitty's maintainer's terse and dismissive comments.
e.g. IIRC his answer to "How do I set up tmux with kitty?" was something like "Don't, tmux is dumb" and closing it. Eventually I gave up.