This article convinced me I really like the design of WezTerm; it made me wish I had a reason to use it.
But none of the features listed are … things I would actually do. (All my multiplexing is done over SSH, so moving it into the terminal wouldn’t actually work. All my color themes are in Emacs. None of the titlebar stuff even works on a tiling WM with no title bars.)
But I do wish that all programs were this thoughtfully designed with extensibility in mind.
Wezterm supports ssh multiplexing I believe and the titlebar has a “text mode” and can be styled “powerline-ish” I believe. I use both of these features to varying degrees. Give it a shot if you’re wez-curious!
Maybe I’m misunderstanding but wouldn’t this require wezterm to be installed on every server machine as well as every client involved? With tmux it only has to be installed on the server, and it’s guaranteed to be available thru apt. I frequently set up tmux sessions at work that colleagues SSH into and it’s important that this work without them installing anything new on their side.
Correct! It doesn’t quite serve the same target audience or even use cases. For your more-enterprise usage, tmux and screen have no substitute (though Zellij is working on that).
But where you have Wezterm, it’s lovely. Tmux has its own issues (most of which can be worked around) and inherent drawbacks (which are quite minor and well worth what you get) which is why I quite like Wezterm - I simply do not have to think about that extra layer at all. All my colors, keys, tabs, panes, switching, etc. just work with no additional tinkering.
Oh, it has nothing to do with being locked down; I just want to be able to host sessions for other people that they can connect to without any hassle, especially not something that would often need to be recompiled from source with nontrivial dependencies.
This is highly reminiscent of Neovim. I rewrote my nvim config entirely in Lua, and it was a great experience. This does actually make me want to try WezTerm.
Vimscript is weird and extremely slow, so they have a lot of motivation to provide a robust alternative! Eliminating Vimscript plugins in favor of Lua substantially improved my editor performance.
Lua is also quite weird, but it works really well as a configuration language. (It began as an evolution of DEL and Sol, two data-entry languages)
This is good to know. I use nvim for about 90% my coding, and the other 10% in vscode. I used to use solely vim, but really dialed back configurations because I didn’t want to bother with vimscript anymore. Also I didn’t want to invest in writing plugins in vimscript. I may give it a shot once again with lua and eliminate vscode. Vscode is good but don’t trust corporate direction.
I am also trying out to switch to WezTerm! The reasoning for me is different. I am doing all my dev locally, but I am thinking about transitioning to a remote dev setup, where my thin laptop talks to a beefy server in the basement.
My previous terminal emulator was Kitty. Kitty, famously, doesn’t support tmux. I wholeheartedly agree with this! I am not a fan of terminal abstraction layer in general, and terminal multiplexing is a particularly egregious example of a mountain of complexity to work-around deficiencies in the underlying model. It is absolutely correct technical leadership to try to move the world to the next local optimum, instead of gradient-descending further into the wrong abstraction madness.
But I do need to have persistent sessions with other machines (or, at least the future me will need this). And WezTerm I think has the right architecture here. It has a server mode, where two WezTerm processes are running on the thin client and on the server, and the server one runs on behalf of the client.
(a smaller thing is that, at this point, I believe today’s Rust stuff will be more alive in 10 years that today’s non-Rust stuff)
Kitty’s author famously dislikes tmux (and there are some nasty online encounters between the two projects), but there’s no reason tmux won’t work in kitty, and the two projects do (perhaps grudgingly) attempt to coexist (e.g. Kitty’s own terminal extensions make allowances for terminal multiplexers like tmux)
I use kitty+tmux+nvim every day. True color works, undercurl/strike through/italic works, mouse works, paste works. The only kitty specific thing that doesn’t work with tmux is kitty keyboard protocol.
Kovid Goyal is one of those passionate, extremely productive, but unfortunately obstinate developers that creates good projects but doesn’t like it when folks in the existing ecosystems put up any sort of resistance to his ideas. The tmux/ncurses community can sometimes be entrenched and conservative when it comes to new uses of escape sequences or terminfo so there is a bit of a standoff there in regard to which version of “extended keys” should be supported in general (there are already at least 4, one of which is kitty’s)
One of the things that got me using wezterm rather than kitty is that wezterm has an option for “bold means bright colors”, which a lot of apps more-or-less depend on to look correct, while Kovid just says “no, that’s wrong” and yells at anyone who asks for it.
I’ve used kitty for a few months now, and like it a lot, but the NIH attitude of the project does create other rough edges.
The one that keeps biting me is that it binds “extend selection” to right-click instead of shift-click. I think, of every app I use across both MacOS and Linux, it’s the only one that decided not to use the default shift-click behavior. Another rough edge that leaps to mind is the insistence on creating a new terminal type, and telling users that if that causes problems with ssh, they should use the custom kitty ssh client.
For all kitty’s benefits, these paper cuts are real, and I understand the desire to search for something better.
By coincidence I switched from Alacritty to Kitty in the last 4-6 weeks, and I can happily report that tmux 3.4 works splendidly in Kitty. I tried out WezTerm recently and though it seemed pretty nice, I’m so used to doing all my session/window/pane management in tmux that the lost screen real-estate through having the tab bar at the top seemed just a waste of space. All I need is a fast, simple, reliable terminal, and Kitty does that well - subjectively faster and smoother than Alacritty, too. To my eyes the font rendering is a lot cleaner as well.
I tried switching, and I really wanted to like it. I did like it… But a few issues put me off, primarily that whenever I opened three tiled windows in Sway, all would crash:
I’ve been using it for a few months, as it turns out.
The mux is pretty cool. I’ve never been a tmux nerd, but I have my wezterm set up to use the local mux by default just so that, ont he rare occasion I need it, I can pull out my laptop and grab some tab I left open on my workstation.
The lua config and instant reloading are also pretty nice.
What actually got me to check it out, though, besides the truecolor, underline and undercurl, and image support, was a fierce determination that box-drawing characters will align and be seamless even if it has to take matters into its own hands and out of the font’s.
I’m trying out WezTerm from this article and I’m curious if there’s something to explain it being quite slow to reload the configuration. I’m on an M3 Mac and it stalls each time I do a cmd-R for ~4 seconds. That seems pathological for a near completely blank configuration.
This issue was driving me crazy. I eventually found out it was caused by using the “super TTC” variant of the Iosevka font (installed with brew install --cask font-iosevka). Switching to the TTF variant solved the issue for me and config reloads are instant now.
This is really helpful. I wasn’t using Iosevka, but this does give me more ideas for how to explore what’s going on. I’d love to replicate that log file from the issue, but I’m not yet sure how to emit those messages.
I was looking into it using Instruments.app and I think it’s mostly an issue with the filesystem watcher. Disabling config.automatically_reload_config has alleviated the issue for me as far as I’ve been able to test.
Does it support osc52 for copy/paste, which is very useful to propagate clipboard across ssh/tmux/nvm or is that superseded by having wezterm available remotely and multiplexing (no tmux)?
I switched to wezterm from iterm2 and from time to time I really miss iterm2. It took me a while to get proper tab titles in wezterm, and it’s still not working as nicely as in iterm2. Yes, it seems faster and I have a more portable config that I can share across the machines, but sometimes I just need things to work so I can focus on tasks at hand.
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)… both features are very valuable when tailing live logs
Think this article convinced me to try WezTerm
This article convinced me I really like the design of WezTerm; it made me wish I had a reason to use it.
But none of the features listed are … things I would actually do. (All my multiplexing is done over SSH, so moving it into the terminal wouldn’t actually work. All my color themes are in Emacs. None of the titlebar stuff even works on a tiling WM with no title bars.)
But I do wish that all programs were this thoughtfully designed with extensibility in mind.
Wezterm supports ssh multiplexing I believe and the titlebar has a “text mode” and can be styled “powerline-ish” I believe. I use both of these features to varying degrees. Give it a shot if you’re wez-curious!
The big TIL of this post is that you can shove that text “status” into the non- text-mode titlebar!
Maybe I’m misunderstanding but wouldn’t this require wezterm to be installed on every server machine as well as every client involved? With tmux it only has to be installed on the server, and it’s guaranteed to be available thru apt. I frequently set up tmux sessions at work that colleagues SSH into and it’s important that this work without them installing anything new on their side.
For my purposes tmux is already flawless.
Correct! It doesn’t quite serve the same target audience or even use cases. For your more-enterprise usage, tmux and screen have no substitute (though Zellij is working on that).
But where you have Wezterm, it’s lovely. Tmux has its own issues (most of which can be worked around) and inherent drawbacks (which are quite minor and well worth what you get) which is why I quite like Wezterm - I simply do not have to think about that extra layer at all. All my colors, keys, tabs, panes, switching, etc. just work with no additional tinkering.
Yes, it requires wezterm binary on every server one accesses, making it of little use in corporate, locked environments.
Oh, it has nothing to do with being locked down; I just want to be able to host sessions for other people that they can connect to without any hassle, especially not something that would often need to be recompiled from source with nontrivial dependencies.
This is highly reminiscent of Neovim. I rewrote my nvim config entirely in Lua, and it was a great experience. This does actually make me want to try WezTerm.
I wasn’t aware neovim achieved that. That’s remarkable.
Vimscript is weird and extremely slow, so they have a lot of motivation to provide a robust alternative! Eliminating Vimscript plugins in favor of Lua substantially improved my editor performance.
Lua is also quite weird, but it works really well as a configuration language. (It began as an evolution of DEL and Sol, two data-entry languages)
This is good to know. I use nvim for about 90% my coding, and the other 10% in vscode. I used to use solely vim, but really dialed back configurations because I didn’t want to bother with vimscript anymore. Also I didn’t want to invest in writing plugins in vimscript. I may give it a shot once again with lua and eliminate vscode. Vscode is good but don’t trust corporate direction.
I am also trying out to switch to WezTerm! The reasoning for me is different. I am doing all my dev locally, but I am thinking about transitioning to a remote dev setup, where my thin laptop talks to a beefy server in the basement.
My previous terminal emulator was Kitty. Kitty, famously, doesn’t support tmux. I wholeheartedly agree with this! I am not a fan of terminal abstraction layer in general, and terminal multiplexing is a particularly egregious example of a mountain of complexity to work-around deficiencies in the underlying model. It is absolutely correct technical leadership to try to move the world to the next local optimum, instead of gradient-descending further into the wrong abstraction madness.
But I do need to have persistent sessions with other machines (or, at least the future me will need this). And WezTerm I think has the right architecture here. It has a server mode, where two WezTerm processes are running on the thin client and on the server, and the server one runs on behalf of the client.
(a smaller thing is that, at this point, I believe today’s Rust stuff will be more alive in 10 years that today’s non-Rust stuff)
Huh? I use tmux within Kitty all the time. This is the first I’ve heard that it is famously unsupported.
It works, but it isn’t supported, and the official recommendation is to not use tmux: https://sw.kovidgoyal.net/kitty/faq/#i-am-using-tmux-and-have-a-problem
Kitty’s author famously dislikes tmux (and there are some nasty online encounters between the two projects), but there’s no reason tmux won’t work in kitty, and the two projects do (perhaps grudgingly) attempt to coexist (e.g. Kitty’s own terminal extensions make allowances for terminal multiplexers like tmux)
Kitty works fine.
I use kitty+tmux+nvim every day. True color works, undercurl/strike through/italic works, mouse works, paste works. The only kitty specific thing that doesn’t work with tmux is kitty keyboard protocol.
Kovid Goyal is one of those passionate, extremely productive, but unfortunately obstinate developers that creates good projects but doesn’t like it when folks in the existing ecosystems put up any sort of resistance to his ideas. The tmux/ncurses community can sometimes be entrenched and conservative when it comes to new uses of escape sequences or terminfo so there is a bit of a standoff there in regard to which version of “extended keys” should be supported in general (there are already at least 4, one of which is kitty’s)
One of the things that got me using wezterm rather than kitty is that wezterm has an option for “bold means bright colors”, which a lot of apps more-or-less depend on to look correct, while Kovid just says “no, that’s wrong” and yells at anyone who asks for it.
I’ve used kitty for a few months now, and like it a lot, but the NIH attitude of the project does create other rough edges.
The one that keeps biting me is that it binds “extend selection” to right-click instead of shift-click. I think, of every app I use across both MacOS and Linux, it’s the only one that decided not to use the default shift-click behavior. Another rough edge that leaps to mind is the insistence on creating a new terminal type, and telling users that if that causes problems with ssh, they should use the custom kitty ssh client.
For all kitty’s benefits, these paper cuts are real, and I understand the desire to search for something better.
I like the idea of Wezterm multiplexing, but I ran into repainting issues trying to use it with NeoVim.
https://github.com/wez/wezterm/issues/4102
Does setting
vim.opt.termsync = false
clear it up?Oh, that’s way better. I’ve only tested for thirty seconds, but it seems like it’s cleared things up. Thanks!
Cool. I believe it’s a wezterm mux bug, setting that just makes neovim behave in a way that doesn’t trigger the problem :)
this and this seem to be the actual fixes, just merged now but already in the “nightly” build.
By coincidence I switched from Alacritty to Kitty in the last 4-6 weeks, and I can happily report that tmux 3.4 works splendidly in Kitty. I tried out WezTerm recently and though it seemed pretty nice, I’m so used to doing all my session/window/pane management in tmux that the lost screen real-estate through having the tab bar at the top seemed just a waste of space. All I need is a fast, simple, reliable terminal, and Kitty does that well - subjectively faster and smoother than Alacritty, too. To my eyes the font rendering is a lot cleaner as well.
Just don’t try using a kitten in tmux! (be ready to
pkill kitten
in another terminal.)Ha, OK, thanks for the heads-up!
I tried switching, and I really wanted to like it. I did like it… But a few issues put me off, primarily that whenever I opened three tiled windows in Sway, all would crash:
https://github.com/wez/wezterm/issues/2445
It doesn’t look like that has been fixed. Ultimately I went back to Alacritty as it’s simple, stable, and never gets in the way.
I’ve been using it for a few months, as it turns out.
The mux is pretty cool. I’ve never been a tmux nerd, but I have my wezterm set up to use the local mux by default just so that, ont he rare occasion I need it, I can pull out my laptop and grab some tab I left open on my workstation.
The lua config and instant reloading are also pretty nice.
What actually got me to check it out, though, besides the truecolor, underline and undercurl, and image support, was a fierce determination that box-drawing characters will align and be seamless even if it has to take matters into its own hands and out of the font’s.
Been using WezTerm as my daily driver for a while now, very happy with it.
I’m trying out WezTerm from this article and I’m curious if there’s something to explain it being quite slow to reload the configuration. I’m on an M3 Mac and it stalls each time I do a cmd-R for ~4 seconds. That seems pathological for a near completely blank configuration.
This issue was driving me crazy. I eventually found out it was caused by using the “super TTC” variant of the Iosevka font (installed with
brew install --cask font-iosevka
). Switching to the TTF variant solved the issue for me and config reloads are instant now.See https://github.com/wez/wezterm/issues/3890 for more details.
This is really helpful. I wasn’t using Iosevka, but this does give me more ideas for how to explore what’s going on. I’d love to replicate that log file from the issue, but I’m not yet sure how to emit those messages.
Have you tried profiling it with the ‘sample’ tool while it’s hung? That’s my usual first step in diagnosing that kind of problem.
I was looking into it using Instruments.app and I think it’s mostly an issue with the filesystem watcher. Disabling
config.automatically_reload_config
has alleviated the issue for me as far as I’ve been able to test.Does it support osc52 for copy/paste, which is very useful to propagate clipboard across ssh/tmux/nvm or is that superseded by having wezterm available remotely and multiplexing (no tmux)?
Yup, it supports OSC 52.
This tutorial is great! I’ve tried WezTerm a few times, but I didn’t realize the potential. Thanks for sharing.
I switched to wezterm from iterm2 and from time to time I really miss iterm2. It took me a while to get proper tab titles in wezterm, and it’s still not working as nicely as in iterm2. Yes, it seems faster and I have a more portable config that I can share across the machines, but sometimes I just need things to work so I can focus on tasks at hand.
Looks great! It even has copy mode, which is what has kept me on iTerm 2. Looking forward to try it!
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)… both features are very valuable when tailing live logs
I’ve been through many terminal emulators over the years, but WezTerm’s customizability with Lua is nothing but insane.