18 ms·
Zellij – A Terminal Workspace and Multiplexer
- WA9ACE 5y agoI'm not sure I could untrain all my muscle memory I've built up over the years with my TMUX configuration, but I truly believe in the next 10 years all of my current command line tools will be slowly replaced with rust equivalents (with the exception of neovim). ripgrep and fzf are already a large part of my workflow, and I love seeing WebAssembly becoming the universal plug and play standard. > Build a web client to allow users to connect to a running Zellij daemon through the browser (on a local or remote server). That's the future feature I'm most interested in over TMUX.
- deleted 5y ago[deleted]
- ibraheemdev 5y ago> I'm not sure I could untrain all my muscle memory I've built up over the years with my TMUX configuration You could quite easily configure Zellij's keybindings [0] to mirror your tmux config. [0]: https://zellij.dev/documentation/keybindings.html https://zellij.dev/documentation/keybindings.html
- WA9ACE 5y agoThat's great! As soon as it supports detaching a running session I'll take a look at migrating.
- ComputerGuru 5y agoYou can use abduco for that part (but I’ll just keep using tmux).
- bostonvaulter2 5y agoHere's the tracking issue for that: https://github.com/zellij-org/zellij/issues/69 https://github.com/zellij-org/zellij/issues/69 Looks like it'll be coming relatively soon (there's already a PR open, although it needs some refinement)
- _jal 5y agoI'm curious, why is in-browser use so appealing to you?
- dhagz 5y agoIf you're already spending a lot of time in the browser looking at stuff (AWS Console, Stack Overflow, etc), I can see the convenience of just switching tabs to your terminal rather than pulling up a window. So far I've solved that problem with keyboard shortcuts or other macros to pull up a terminal when I need it.
- ahepp 5y agoConceptually, I don't think the solution to "switching windows is too hard" ought to be "make the terminal part of the browser". Although it does seem like perhaps the least immediately painful way to solve the problem. Using Lynx in the terminal might be another way to do it.
- dhagz 5y agoYeah, I tend to agree. But I know that there are some people who really, really, really like doing stuff in the browser.
- dividedbyzero 5y agoI think getting the terminal into the browser is exactly the way this should be solved. Currently I'm in a browser for the vast part of my work, as are a huge lot of other people. Most of the web apps I need wouldn't even render in Lynx.
- rektide 5y agoWhy not have your software be universally accessible & online? What is the appeal in having software that is attached to a single system, single OS, & offline?
- deleted 5y ago[deleted]
- Scarbutt 5y agoFZF is written in Go though.
- Pawka 5y agoI believe you could. I can share the story from a bit different field. I was using a split keyboard with staggered layout and just built an Ergodox because wanted to try vertically staggered layout. Another differences are thumb clusters of keys on Ergodox and different firmware. So the layouts of both keyboards are very different and different customisations can be made. The main thing which I was afraid of was the same as you've said - that I won't be able to change my muscle memory. Another thing - I won't be able to switch back the old keyboard (I expected to use it at the office) or even won't be able to use laptop keyboard anymore. Surprisingly even after getting comfortable with Ergodox with totally different layout (different firmware is being used between keebs) I'm still able to jump between those easily. Maybe the first 5 mins are a bit harder but that is it. This surprises me what human brain is capable to do. Of course I still need to switch between keyboards regularly to not forget the layouts. Not the same thing but we often are afraid of unknown.
- breuleux 5y ago> I'm not sure I could untrain all my muscle memory I've built up over the years with my TMUX configuration I assume you can customize your keybindings so that they're mostly the same as your TMUX configuration. But even if you couldn't, based on my own experience changing editors/OS/other tools, if you commit to it, retraining should take a couple weeks at most. It'll be super annoying for that couple weeks but it's really not all that ingrained.
- lytedev 5y agoCheck out tmate
- syrusakbary 5y agoThe idea of using WebAssembly for their plugins is really impressive (they are using Wasmer!). It allows to have fully sandboxed code that interact with their code safely and fast. I think more projects will start following the same direction soon!
- bitbo 5y agoI'm confused. Zellij uses wasmer and wasmer-wasi. Wasmer may use cranelift for compilation (dont know if Zellij does). "Fast & Safe. Wasmer runs WebAssembly at near-native speed in a fully sandboxed environment." (https://github.com/wasmerio/wasmer https://github.com/wasmerio/wasmer) But ... "Cranelift does not yet perform mitigations for Specter or related security issues, though it may do so in the future." (https://github.com/bytecodealliance/wasmtime/tree/main/cranelift https://github.com/bytecodealliance/wasmtime/tree/main/crane...) Will the wasmer runtime handle specter / meltdown / rowhammer attacks?
- chc4 5y agoIt doesn't, nor does it use seccomp to mitigate against language VM security issues.
- syrusakbary 5y agoseccomp should not be needed for a Wasm VM unless the host calls are unsafe, which is not the case by default (since no host functions are provided) or for WASI (since is alreay designed to be sandboxed). Also, seccomp only works in the Linux kernel (not in Windows, or macOS)... so it's a no-go for a universal sandboxed VM :)
- maxmcd 5y agoI feel like in this case those kinds of things are up to Zellij. If you run wasmer within the same process and share memory with the main Zellij process then yes wasmer/cranelift/wasmtime/wasm doesn't protect you from various speculative execution attacks. However, Zellij could run plugins in separate processes and apply things like seccomp to get further protections provided at the operating system level. This is still not a complete security story and would not provide the same kind of protection as a VM, but I think the charitable take here is that this is a good sandboxing tool and a step in the right direction for something like a plugin system. edit: I also disagree with the "fully sandboxed" wasmer line, but wasmer is a venture-backed for-profit org that will start selling something at some point and they might have a motivation to blur the lines a little. I appreciate cranelift's more honest disclaimer.
- qwerty456127 5y agoWhat's the point of fitting multiple terminals in a single text-mode screen when everybody is using GUI terminal emulators and tiling window managers? I remember good old pure text-mode days with warmth but doubt there are many people actually doing it nowadays. So I imagine this (thesubject) is going to be ran inside a GUI terminal emulator window and I don't understand how is that better than just having more windows.
- _pmf_ 5y agoI'm a heavy terminal user, and I cannot understand how people use something like tmux that constantly causes full screen refreshes and hangs due to one part misbehaving.
- Pawka 5y agoAre you saying that tmux feels slow on the terminal? If that is the case maybe using different terminal might help. I'm fan of `st` terminal because of its speed. And haven't noticed any slowness of tmux.
- dljsjr 5y agoRemote sessions. Unless you want to use X forwarding, or create multiple SSH sessions, it's way more ergonomic to do it this way. I currently use tmux for this and when you combine it w/ the tmux command mode (-CC) and iTerm 2 you get the best of both worlds, but even without iTerm 2 integration I still prefer panes to be handled by the multiplexer because then I know I can get my consistent and comfortable environment on any arbitrary remote box.
- nitnelave 5y agoYou can multiplex your SSH session and have several ssh commands running on the same connection (without having to type the password/check the security key again). Check the ControlMaster option for SSH.
- whimsicalism 5y ago
- sanity31415 5y agoYou have a problem and you need a configuration language, so you pick YAML. Now you have two problems. Take a leaf out of Rust's book and use something simple and sane like TOML, YAML is a mess. See: https://github.com/cblp/yaml-sucks https://github.com/cblp/yaml-sucks Otherwise this looks like a great project, please don't ruin it with YAML.
- freedomben 5y agoYou can find absurd behavior during corner cases in nearly any non-trivial language. YAML is a great language when you need to represent objects in something universal and human readable/writable. Not perfect of course, but TOML's limitations can turn stuff into a monstrosity with it's limitations. Ansible inventory files come to mind here.
- eptcyka 5y agoOne can find absurd behavior in corner cases of any non-trivial language, but one can find absurd behavior in YAML without even looking for it.
- whimsicalism 5y agoSuch as? All these cases with no and norwegian or whatever but I haven't run into major problems and use it frequently. e: And, AFAIK, I believe the latest YAML 1.2 spec (from 2009) has addressed these issues.
- metrix 5y agoI use it frequently too, but there's some terrible edge cases: https://stackoverflow.com/questions/53648244/specifying-the-string-value-yes-in-a-yaml-property https://stackoverflow.com/questions/53648244/specifying-the-...
- whimsicalism 5y ago? I don't think these are issues with Yaml 1.2, the spec since 2009.
- bennyp101 5y agoThis looks pretty cool, I use tmux extensively, and having a WebAssembly plugin system could be pretty cool!
- leshow 5y agoI think the vertical resize of the "before" is the wrong one. Shouldn't it be also resizing the window next to it?
- DangitBobby 5y agoI think you're right, I was wondering the same thing.
- tlaundal 5y agoThe first illustration shows how this works in tmux. The illustration first has a split in left and right half (vertical split?) and then a split in top and bottom (horizontal split?) of each of the halves. So if you resize one of the panes vertically, it only affects the other pane in the same half of the window, while if you resize horizontally all the panes will be resized. Basically vertical resizing only resizes the inner split, while horizontal resizing resizes the outer split. It seems Zellij somehow makes the order of the splits irrelevant.
- parhamn 5y agoA few months ago, I swapped my iTerm with Alacritty (another Rust based project) and have been really happy with how snappy it is. I highly recommend it. Looking forward to trying this as a replacement for my tmux setup. I like the idea of being able to hack on wasm modules. Will there be matching key bindings for Tmux?
- ikornaselur 5y agoInterestingly, about an hour ago, I was looking into Alacritty to replace iTerm (because of how slow it feels!). I use tmux as well and seeing this project made me wonder if I should test out Alacritty + Zellij!
- alpaca128 5y agoAlacritty is great, it feels very snappy and it can auto-reload the configuration(with a few exceptions), so you can quickly try out different settings without restarting the program all the time. I switched to st because Alacritty still has no ligature support, but aside from that limitation it's definitely my favorite.
- 0xbeefeed 5y agoI personally can't stand not having multiple tabs. Plus, it is fast, but it is not the "fastest" as it falsely claims. I prefer MacOS's default terminal.app over it.
- ktpsns 5y agoI love that the UI can be explored by the user, since it shows available keyboard shortcuts. This is something where GNU screen or tmux suck, because you really have to lookup how to operate these tools. In some manual or with google.
- mtrower 5y agotmux and screen both have online shortcut “cheat sheet” displays, fyi.
- edoceo 5y agoI had to print this https://tmuxcheatsheet.com/ https://tmuxcheatsheet.com/
- des429 5y agofwiw, if youre in tmux you can hit <prefix>-?, so for me it's ctrl+w+? and itll show all available tmux commands.
- nsm 5y agoYes, I think more than "written in Rust", what is attractive about these tools (and other Unix replacements like Ripgrep, FZF) is more their attitude of "we have a lot more computing power and higher resolution/larger screens now. let's have saner defaults, intuitive UIs or larger search spaces (in case of FZF) to actually take advantage of that."
- HaoZeke 5y agoThis is fantastic! Love the customization. I think for this level of complexity YAML is fine. Are there any plans to incorporate the plug in system which tmux has through tpm?
- firstSpeaker 5y agohow does it differs from iTerm2?
- diehunde 5y agoTotally different tools. You could run this inside of Iterm
- totallymike 5y agoA better comparison would be tmux. iTerm2 is a terminal emulator, where tmux is a multiplexer.
- rektide 5y agoTab-rs is another rust terminal multiplexer[1]. [1] https://github.com/austinjones/tab-rs https://github.com/austinjones/tab-rs
- cassepipe 5y agoI would love to see a small screen ready made option mode that uses tabs as default instead of panes because panes don't make much sense on a small screen.
- 29athrowaway 5y agoThe latest version from cargo does not build for me. edit: After running "rustup update" it does install. I am liking Zellij so far.
- alpaca128 5y agoIt's the typical Rust problem and my biggest gripe with the Rust ecosystem: many libraries are using unstable/nightly features, making development needlessly frustrating for people using the stable Rust release. Rust devs, please don't. Not every Rust developer uses rustup or knows how to solve this issue, not everyone is willing or able to use the nightly build just so dependency 21/63 doesn't throw errors.
- steveklabnik 5y agoIt doesn’t appear that this uses any nightly or unstable features. The parent didn’t say why this doesn’t compile, it’s probably something else. Maybe they have an older rustc.
- 29athrowaway 5y agoNice suggestion. I had not updated my rust installation in a couple of months. After doing rustup update now it installs correctly. Thank you.
- mkhnews 5y agoLooks cool. I wonder how it handles the clipboard ? with Wayland ?
- pkilgore 5y agoIs there a good reason for a multiplexer to be a separate tool from a terminal? Or a window manager? Or is this just GNU/Unix philosophy (do one thing well and compose). The reason I ask is that while I never used a multiplexer like tmux, I use the layout features of kiTTY every day and I can't quite see beyond that common use case (split this terminal into X windows with Y layouts).
- necrotic_comp 5y agopersistence and the ability to run it on a remote machine are the big draws. I can set up a tmux session on a remote box, have multiple connections to it, and close my terminal without losing my work.
- pkilgore 5y agoMakes sense.I am definitely not SSH ing around very much. Seems muxers are essential for more ops / infrastructure facing workloads
- marti-oss 5y agocvb
- yjftsjthsd-h 5y agoWhat?
- marti-oss 5y agocvbvbc
- hnarn 5y agoI've only used it for a few minutes, but here's my first impressions. What I really liked: I didn't have to read any documentation to understand how to do the things I'm used to in tmux, the CTRL+[KEY] menus with hints are really helpful and well designed. What I didn't like so much: The interface doesn't feel as snappy as tmux over a remote connection, and I couldn't find any way in the "CTRL-menu" to detach (like tmux CTRL+B,D) Looking forward to future releases!
- semi-extrinsic 5y agoFrom the webpage, it seems ability to detach is planned for future work.
- greyhair 5y agoI noticed your second point. Massive type ahead, whether at the shell prompt, or within an app. I could not touch type at that delay, like trying to talk over a call with a pronounced delayed echo.
- CodeIsTheEnd 5y agoThe resizing algorithm looks cool: panes are no longer in a grouped hierarchy of vertical and horizontal splits, as in tmux or vim, and pretty much every other customizable layout tool. In a grid of four squares, a corner can either be resized in either direction and only modify one other pane. (It's hard to explain; it's shown in the demo gif.) I wonder if you can make "holes"... Rearranging a layout with more than 3 panes in tmux or vim is always difficult. In tmux it's at least easy to swap panes (C-prefix '{' or '}'), but vim doesn't have any simple way to do something similar. I wonder if Zellij's approach makes it any easier. Maybe it's a UX pattern that is made easier with a mouse.
- j16sdiz 5y agoWhat terminal does it support? Historically, different terminal color, Unicode font wide
- j16sdiz 5y agoWhat TERM does it support? In my experience, true color support, Unicode width and RTL language are very problematic.
- uses 5y agoI've been using tmux for quite a while, though at a fairly casual level. The first thing I noticed is that this interface is discoverable - it shows me what I can do, which is incredible and makes me want to use it. The main reason I've been a casual tmux user and not an advanced one despite using it for years, is because every time I want to try something new I have to google if it's possible. The second thing I noticed is that it uses ctrl-r as a core shortcut. Mega problem: ctrl-r is a built-in bash feature which I use every day to recall previous commands. This makes me think I can't use this tool at all. I would suggest to consider taking a page from tmux's book. Just use a global modifier key. Ctrl-b is what tmux uses, so you know it's safe. Other software being developed knows they should avoid it, because tmux uses it. By also using it, you'd no longer have to dance around the global space of what shortcuts every software in existence is using. Additionally, if you use ctrl-b to enable your commands, you can minimize your interface. Currently you're using two entire lines to display your menu. That's going to become tiring as I use zellij 8 hours a day for years. I'll have to hide it eventually. Instead, what if you reduced it to zero lines? Put "ctrl-b: menu" in the upper right of your title bar. Pressing ctrl-b now enables commands and shows what your next keypress will do. You have now (1) avoided breaking existing shortcuts, (2) aligned with established standards (3) given some familiarity to welcome tmux users (4) expanded visible screen space and (5) simplified your menu system. You can also now remove ctrl-g since the interface is "locked" by default until I want to start interacting with it. Anyway that's my 2 cents. Thanks for this exciting demo.
- imsnif 5y agoYou can lock the interface with ctrl-g and then all keys pass through.
- uses 5y agoSee that's also interesting, thanks for the heads up. I saw "lock" previously and pressed it, and it did something besides what I expected. When I think lock, I think it's literally locking the interface in some way so someone can't interact with the software, including myself unintentionally. That's what it means in Windows, MacOS, and even tmux. I would consider just starting out "locked" but change the paradigm. It's not locked, it's just that the menu isn't active. "Unlocking" now becomes enabling the menu/interface - until you disable the menu.
- ahepp 5y agoI see a lot of projects on here where the tagline is that they're written in Rust. Shouldn't that be completely opaque to the user? I don't have any idea what programming language most of the software I use is written in. If it's faster or more stable than tmux, shouldn't that be what's advertised, rather than implementation details? Reading the page, what catches my eye is the webasm plugin system (although it's not immediately obvious to me what I'd use that for).
- mariusmg 5y ago>Shouldn't that be completely opaque to the user? No necessarely, because app being written in Rust and Go is actually a feature for the user, it means the entire app is a single executable with a decent runtime performance.
- nodelessness 5y agoNot something most developers who may use a tmux equivalent would know about.
- dataangel 5y agolol no, using tmux is a strong sign you would.
- serverholic 5y agoI think advertising the language is important. Rust is fairly strict which improves stability. It also means that I'm not downloading some bloated electron crap.
- KajMagnus 5y ago> Shouldn't that be completely opaque to the user? That would have been nice indeed. However many languages use lots of memory and are a bit slow, or are security-dangerous like C. It's nice to know, then, that this app likely uses barely any memory at all, and is as fast & keyboard-responsive as it can be, and harder to hack — Rust. (Assuming it is implemented in a good way :- ))
- xfalcox 5y agoDo you plan on supporting mouse shortcuts? I currently use byobu, and it's useful to start scrollback mode on mousewheel up
- jmakov 5y agoLooks like a cool Byobu alternative.
- lolive 5y agoTo me, tmux is unbeatable. Except for 2 things: - session-in-session is not built-in (but running a tmux from inside tmux does work) - resurrect (I.e rebuilding a complete multiplexing session out of nowhere, with running pieces of software, history, etc).
- pkghost 5y agoI'll be proving the point that tmux is a batteries-not-included program with my solution to your "resurrect", but it's probably fine for (and unsurprising to) anyone who doesn't mind writing a few lines of bash: I have a bash script by the name of .tmux inside of every workspace folder. Its contents are typically a single multiline tmux command that creates a new tmux session with all the screens and processes relevant to the project (usually: emacs, shell for git, ssh to staging + prod, prompts in various databases, and several entr-driven screens for automatically running migrations, tests, etc). Separately, I have a shell function that runs every time I change directories that checks for the existence of said file, and then either runs the file, attaches to the existing tmux session associated with the folder, or does nothing (in the case that the shell is already in a tmux session). In short, I setup my workspace once per project.
- sixstringtheory 5y agoLots of mentions of tmux but none yet of tmuxinator: https://github.com/tmuxinator/tmuxinator https://github.com/tmuxinator/tmuxinator Lets you predefine layouts and what will run in each pane.
- zmmmmm 5y agoLooks amazing! Unfortunately it doesn't implement the feature that keeps me stuck on Terminator: disabling of line wrapping. After using that I could never use a different terminal. But perhaps this could inspire me to try and learn enough Rust to implement it :-)
- digitalsanctum 5y agoHas anyone used this with Alacritty? Seems like they would be a good match.
- gregwebs 5y agoThe discoverability of shortcuts in zellij is great! Besides this and tmux you can also try * mtm: https://github.com/deadpixi/mtm https://github.com/deadpixi/mtm * dvtm: https://linuxconfig.org/an-introduction-to-terminal-multiplexers https://linuxconfig.org/an-introduction-to-terminal-multiple... * abduco None of these have ever stuck with me because I don't like how they alter the ability to scroll (although I haven't tried the newer tmux mouse/scrolling capabilities). To maintain a session I prefer to use EternalTerminal (screen messes up scrolling much like tmux). I find most of my windowing needs satisfied by tabs in the terminal and by using Xmonad on Linux or yabi on Mac whereas some Mac users seem to be at least partially making up for the lack of window management with tmux. I just switched to using wezterm as my daily terminal. It is written in Rust, very fast, featureful, and works cross platform.
- nicoty 5y agoThere's also tab.rs - https://github.com/austinjones/tab-rs https://github.com/austinjones/tab-rs
- timtimtimtim 5y ago+1
- hinkley 5y agoRelated question: What’s the state of the art for managing the running of, and the output from, multiple CLI commands at once? Say I have a task D that requires a task A, B, and C, but for which A and B and independent. The naive solution (let the output interlace and just watch the exit codes) creates a substantial comprehension problem for my coworkers, so I don’t usually do it. But over and over again I find myself having a 20-90 second inefficiency or two caused by running two tasks that have to complete but the order doesn’t matter.
- lewispollard 5y agoI don't know about state of the art, but you can pretty easily script tmux to launch, split windows/panes, run commands in each pane, and log and exit the session on completion.
- jahsome 5y agoThis looks incredible to someone who's always had an eye for tmux but not the energy to spend two weeks memorizing keybindings. As a side note, does anyone know why it fails to load the separators in the status bar on WSL? I've got a proper font installed and even emojis work. However with Zellij, I am just getting "" characters between the Ctrl + lines.
- shork 5y agoNot sure what terminal you're using but I was able to get the separators working fine on Windows Terminal with a powerline font enabled on my WSL profile.
- jahsome 5y agoI was using the default terminal that appears alongside WSL, but switched to Windows Terminal (with the same font) and had success.
- Diti 5y agoIs there any way to disable the use of Powerline fonts? Vim-airline does it well, why not this new project?
- greyhair 5y agoI have messed with tmux in the past, but could never remember all the gibberish sequences to make it useful. Thought I would take a look at this. Like the presentation of all the actions. TAB control was nice and all that. But what is with the crazy input character delay? Not much fun for touch typing when I can get ahead of the input buffer by four or five keys (without really trying). I have never noticed that on tmux. Is anyone else seeing this?
- dejj 5y agoHow do I tell Zellij to passthru Ctrl+ArrowKeys ?