Zellij is a workspace aimed at developers, ops-oriented people and anyone who loves the terminal

Last update: Jun 19, 2022


logo
Zellij

demo

Discord Chat

What is this?

Zellij is a workspace aimed at developers, ops-oriented people and anyone who loves the terminal. At its core, it is a terminal multiplexer (similar to tmux and screen), but this is merely its infrastructure layer.

Zellij includes a layout system, and a plugin system allowing one to create plugins in any language that compiles to WebAssembly.

For more details about our future plans, read about upcoming features in our roadmap.

Zellij was initially called "Mosaic".

How do I install it?

You can install it through cargo:

cargo install zellij

Or you can download a prebuilt binary from our Releases.

As the default plugins make use of characters that are mostly only found in nerdfonts, you get the best experience either with installing nerdfonts, or telling the plugins that you request a ui, that does not rely on such characters with zellij options --simplified-ui, or putting simplified_ui: true in the config file.

How do I hack on it? (Contributing)

  • Clone the project
  • Install cargo-make with cargo install --force cargo-make
  • In the project folder, for debug builds run: cargo make run

For more build commands, see Contributing.md.

Configuration

For configuring Zellij, please see the Configuration documentation.

What is the current status of the project?

Zellij should be ready for everyday use, but it's still classified as a beta. This means that there might be a rare crash or wrong behaviour here and there, but that once found it should be fixed rather quickly. If this happens to you, we would be very happy if you could open an issue and tell us how to reproduce it as best you can.

How do I get involved?

Zellij is a labour of love built by an enthusiastic team of volunteers. We eagerly welcome anyone who would like to join us, regardless of experience level.

To get started, you can:

  1. Take a look at the "Issues" in this repository - especially those marked "Good first issue". Those with the "Help Wanted" tag probably don't have anyone else working on them.
  2. Drop by our chat and ask what you can work on, or how to get started.
  3. Open an issue with your idea(s) for the project or tell us about them in our chat.

And most importantly, please read our code of conduct.

Roadmap

This section contains an ever-changing list of the major features that are either currently being worked on, or planned for the near future.

  • A web client/server - Connect to Zellij through the browser instead of opening a terminal window. Either on a local or remote machine.
  • Share sessions with others - See the focused window and cursor of other users, work on a problem or a code base together in real time.
  • Support for multiple terminal windows across screens - Transfer panes across different windows and screens by having them all belong to the same session.
  • Smart layouts - expand the current layout system so that it rearranges and hides panes intelligently when new ones are added or the window size is changed.

License

MIT

GitHub

https://github.com/zellij-org/zellij
Comments
  • 1. Open pane scrollback in default editor

    The experience should be:

    1. Press a Zellij shortcut (something like ctrl+s + e)
    2. Have the current pane replaced with your default editor, opened to a temporary file containing all the scrollback of the terminal pane and scrolled to the same line
    3. Search, save, copy/paste, do whatever you want
    4. When you quit the editor (or press ctrl+s + e again), the original pane comes back

    Depends on: https://github.com/zellij-org/zellij/pull/1375

    Reviewed by imsnif at 2022-05-10 12:29
  • 2. PermissionDenied even when built with features=disable_automatic_asset_installation

    zellij --version: zellij 0.25.0 tput lines: 72 tput cols: 271 uname -av: Linux ALESSAND-F1E8 5.16.2-rt-rt19-x86_64 #5 SMP PREEMPT Tue Feb 15 19:20:22 CET 2022 x86_64 AMD Ryzen 5 3600 6-Core Processor AuthenticAMD GNU/Linux

    Further information I've built zellij with features=disable_automatic_asset_installation and installed it in /usr but it will crash with

    zellij options --simplified-ui true
    thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Os { code: 1, kind: PermissionDenied, message: "Operation not permitted" }', src/install.rs:33:38
    note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
    

    relevant part of strace

    statx(AT_FDCWD, "/home/ale/.config/zellij", AT_STATX_SYNC_AS_STAT, STATX_ALL, {stx_mask=STATX_ALL|STATX_MNT_ID, stx_attributes=0, stx_mode=S_IFDIR|0755, stx_size=22, ...}) = 0
    openat(AT_FDCWD, "/home/ale/.config/zellij/layouts/default", O_RDONLY|O_CLOEXEC) = -1 ENOENT (File o directory non esistente)
    openat(AT_FDCWD, "/home/ale/.config/zellij/layouts/default.yaml", O_RDONLY|O_CLOEXEC) = -1 ENOENT (File o directory non esistente)
    ioctl(0, TCGETS, {B38400 opost isig icanon echo ...}) = 0
    getrandom("", 0, 0)                     = 0
    getrandom("\xc8\x7e\xd8\x18\x8b\x2b\x3d\xa1\x11\x80\xe9\x26\xc7\x0e\x95\xc8\x2a\xfe\x98\x6b\xc7\xbc\x04\x1c\xab\xef\x83\xf0\x75\xe0\xfd\xeb"..., 2048, 0) = 2048
    openat(AT_FDCWD, "/run/user/1000/zellij/0.25.0", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = -1 ENOENT (File o directory non esistente)
    statx(AT_FDCWD, "/home/ale/.local/share/zellij", AT_STATX_SYNC_AS_STAT, STATX_ALL, 0x7ffc642d4300) = -1 ENOENT (File o directory non esistente)
    statx(AT_FDCWD, "/usr/share/zellij", AT_STATX_SYNC_AS_STAT, STATX_ALL, {stx_mask=STATX_ALL|STATX_MNT_ID, stx_attributes=0, stx_mode=S_IFDIR|0700, stx_size=42, ...}) = 0
    mmap(NULL, 548864, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x76fee3d19000
    mmap(NULL, 585728, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x76fee3c8a000
    openat(AT_FDCWD, "/usr/share/zellij/VERSION", O_RDONLY|O_CLOEXEC) = -1 EACCES (Permesso negato)
    mkdir("/usr/share/zellij/plugins", 0777) = -1 EACCES (Permesso negato)
    statx(AT_FDCWD, "/usr/share/zellij/plugins", AT_STATX_SYNC_AS_STAT, STATX_ALL, 0x7ffc642d4060) = -1 EACCES (Permesso negato)
    

    I already have plugins in /usr/share/zellij/plugins and layouts in /usr/share/zellij/layouts because I've installed them with a gentoo ebuild Also I have a config file in ~/.config/zellij/config.yaml

    tree /usr/share/zellij/
    /usr/share/zellij/
    ├── layouts
    │   ├── multiple_tabs_layout_htop_command.yaml
    │   ├── multiple_tabs_layout.yaml
    │   ├── run_htop_layout_with_plugins.yaml
    │   └── run_htop_layout.yaml
    ├── plugins
    │   ├── status-bar.wasm
    │   ├── strider.wasm
    │   └── tab-bar.wasm
    └── VERSION
    
    Reviewed by Alessandro-Barbieri at 2022-02-26 17:30
  • 3. Zellij replaces random chars with whitespace on the prompt

    Don't have much time to find a complete reproduction, apologies...

    • I have a prompt with a wide unicode character (🕙); that's when/because I started using starship.rs
    • at the same time, I upgraded to zellij 0.21.0 (from 0.20.1)
    • when I go back and forth to edit my current command, sometimes characters under/right after my cursor are replaced with whitespace
    • this replacement is only visual: the actual content is "correct" (when I hit ctrl+L to clear the screen, it shows what it should show)
    Reviewed by jovandeginste at 2021-12-14 16:55
  • 4. Proposal: Allow use of system clipboard

    Currently the copy to clipboard is done using OSC52 which is not supported by some linux terminals like gnome-terminal or xfce4-term etc.

    The proposal here is to allow users to set a specific copy command.

    zellij options --copy-command "xclip -sel clip" or zellij options --copy-command "wl-copy"

    would be two examples for x11 and wayland.

    This is my first ever rust code so I'm happy to hear any feedback.

    This was tested on Ubuntu using gnome-terminal

    Reviewed by djpate at 2022-01-07 14:48
  • 5. Initial mouse support

    • enable mouse support (termion MouseTerminal)
    • handle scroll up and down events

    This is a very initial WIP for #175 now, with quite a few things that need discussing in more detail, but I figure it's a start:

    • have mouse support be an option?
    • once mouse reporting is turned on it left clicks are captured, but shift+left click allows text selection; right clicks seem to be forwarded normally, not sure how/if mouse input can be passed through
    Reviewed by tlinford at 2021-05-03 19:12
  • 6. Feature request: How to dump the terminal output

    Hello,

    I'm a long time tmux user, I'm in the process of switching to zellij (due to the floating panels) and I'm missing the search in buffer.

    I've seen in a post on reddit that you intend to implement a command to dump the terminal output (with all the scroll) into a file. I think this is an amazing idea which would leave tmux so far behind.

    I would be interested in this.

    Can you please explain what it involves, from a development point of view? I'm a developer, I've developed in my life in many languages, but not in Rust. However, I would be willing to see what I can come up with.

    Reviewed by cosminadrianpopescu at 2022-04-27 15:37
  • 7. Random text input from mouse actions

    Basic information

    zellij --version: 0.21.0 OS: macOs Monterey

    Screen Shot 2021-12-09 at 21 44 46

    This issue starts (apparently) randomly, but once it starts I can not actually stop it , and scrolling/entering commands becomes impossible as more input gets written and terminal scrolls randomly. The issue happens with multiple terminal emulators including WezTerm and default mac terminal.

    Unfortunately I can not yet exactly reproduce the issue (which might have something to do with mouse reporting getting enabled?), but please let me know if there is any further information I can provide.

    Reviewed by zareami10 at 2021-12-09 13:00
  • 8. Compatibility: Neovim

    My neovim doesn't display color properly on zellij. Here is neovim on tmux: 2021-04-21_134904_xps-arch

    Here it is on zellij: 2021-04-21_135033_xps-arch

    The colors are.... not colors. Other colors show fine. 2021-04-21_140543_xps-arch

    The cursor is also messed up. It's supposed to change to to a line in insert mode: 2021-04-21_135157_xps-arch

    In zellij: 2021-04-21_135436_xps-arch

    The cursor also doesn't change in some other TUI's like nmtui.

    The terminal im using is kitty. Switching to konsole restores the colors on neovim but doesn't solve the cursor issue.

    Kitty provides its own termcap, but i'm not sure if that causes any issues.

    OS : Arch Linux

    Reviewed by luqmanishere at 2021-04-21 06:15
  • 9. Zellij Automatically Exits when SSH is disconnected

    I connected to the machine using SSH and started an new instance using 'zellij-s workspace'. Every time I quit, I need to detach manually. If SHH is disconnected or the network is interrupted, I need to re-use' zellij -s workspace', but this will lose the layout you created earlier. Is there a solution?

    Reviewed by buchenglei at 2022-01-27 02:43
  • 10. Consider merging --layout and --layout-path

    When trying to use layouts for the first time and reading through the docs, I missed the distinction between these two arguments. I had tried to use --layout with a specific path which I knew pointed to a valid layout file. Thinking this must be a bug, I looked through Github and Discord. On Discord I found someone else had also run into the same issue.

    Worse, the error message for --layout made me think that it simply couldn't find the file, as if there was a permission problem or a spelling error. Additionally, if you happen to use an absolute path with --layout then it works, only adding to the confusion.

    My understanding is that there used to only be one argument, and that --layout-path was made after #322 brought up a very specific situation which resulted in unexpected behavior when no argument was used. It seems to me the only reason to have two arguments is to make a distinction between a path relative to the current directory, vs a path relative to the layout-dir. But I'm not sure why this distinction is necessary.

    If others feel it best to keep them both, then I'd like to at least see the error message improved to assist users. There are a few possible solutions:

    • Change --layout's IoError to specify the absolute path it attempted to search for the file. (hints to the user that it's expecting a path relative to layout-dir)
    • Add a suggestion to both --layout and layout-path's IoErrors to try using the opposite argument. (e.g. instead of IoError: The layout was not found, File: {}, use IoError: The layout was not found. Did you mean '--layout-path {}'?, and vis-versa).
    • The above, but only if zellij detects that it would have found a file if the user had used the opposite argument.

    If others feel merging them again is best, then we'd need to decide which location gets priority when a relative path is used. Or else throw an error message if the same filename is found in both/multiple locations.

    Reviewed by bigbass1997 at 2022-05-10 22:01
  • 11. zellij 0.12 does not respond to input

    I just upgraded to zellij 0.12 and zellij sessions are completely unresponsive to input. None of the commands work, nor do other keys have observable effects. I've tried all of Powershell, Windows Terminal, and WSL Terminal and run zellij both under WSL and in an ssh session on an Ubuntu machine. Downgrading to 0.11 fixes the issue.

    OS version:

    Linux Nexus 5.4.0-73-generic #82-Ubuntu SMP Wed Apr 14 17:39:42 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
    

    zellij version:

    zellij 0.12.0
    
    Reviewed by cswinter at 2021-05-28 00:41
  • 12. Add 'ResizeExact' action to allow resizing panes in user-defined increments

    This was initially intended to just complete #647, but instead of simply adding resize increments of 1 I decided to implement user-defined fixed or percentage based resize increments through a new "ResizeExact" action.

    This ended up being a pretty big MR, so I'm sure there are some additional changes I should make before it's merged in. I'd appreciate any feedback, thanks!

    Reviewed by Chase-C at 2022-06-24 04:37
  • 13. Not drawing strikethrough text as strikedthrough

    Basic information

    zellij --version: 0.30.0 tput lines: 43 tput cols: 174 uname -av or ver(Windows): Linux aka-system 5.15.47 #1-NixOS SMP Tue Jun 14 16:36:28 UTC 2022 x86_64 GNU/Linux

    Reproducing

    • paste "a̶b̶c̶" in Zellij

    Expected

    • letters are strikethrough as GH renders them (hopefully)

    Actual

    • It's just "abc"

    I've checked this without Zellij, terminal renders them OK

    Log

    zellij-9.log

    Reviewed by Mr-Andersen at 2022-06-22 20:13
  • 14. Windows sleep, Zellij server inside WSL does not remember the active sessions

    Basic information

    zellij --version: zellij 0.30.0 tput lines: tput cols: uname -av or ver(Windows cmd NOT powershell):

    • WSL 2 env: Linux PF2WDF9K-wsl 5.4.72-microsoft-standard-WSL2 #1 SMP Wed Oct 28 23:40:43 UTC 2020 x86_64 GNU/Linux
    • Host machine: Microsoft Windows [version 10.0.19042.1706]

    List of programs you interact with as, PROGRAM --version: output cropped meaningful, for example: alacritty --version: alacritty 0.10.0 (8a26dee) (Installed on Windows host) bash --version: GNU bash, version 5.0.3(1)-release (x86_64-pc-linux-gnu) fish --version: fish, version 3.0.2 (Alacritty open WSL2 which is configured with bash for now, I open fish from there)

    Further information I closed my laptop for the night and the morning I opened it back. The session in the open terminal was still active and working but a bit moved (not sure if alacritty or zellij bug, but changing tabs fixed it). I could change panel, tab, open and close flotting panel, ... but zellij ls did not found anything. From within zellij or an other terminal.

    I opened qtcreator from within the current not found zellij session then tried to detach. I got the Bye from Zellij! message and am not able to re-open it (forgot to note it's name before doing so :( ). But qtcreator still live from there and I just opened it with qtcreator & without nohup so a shell close should have closed it.

    Reviewed by Zykino at 2022-06-22 08:39
  • 15. Panic when ssh session terminates

    Hi -- love your project, thank you! i'm trying to figure out the bug below. If you can point in a general direction in the code, i could fix. I am very familiar with rust.

    Basic information

    zellij --version: 0.30.0 tput lines: 62 tput cols: 242 uname -av or ver(Windows): Linux prometheus-vm 5.4.0-120-generic #136-Ubuntu SMP Fri Jun 10 13:40:48 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

    List of programs you interact with as, PROGRAM --version:

    • No programs running just open zsh sessions.

    Further information

    • SSH into home server, start with zellij --debug
    • enter the control sequence to close ssh session (~.). This also happens if you put ssh to sleep via (~^z) and kill session.
    • SSH session terminates, zellij-client exists (panics)
    • SSH back into server, and there are no zellij sessions open.
    • Reproducible, happens every time.

    Specifics about my systems (not sure any info is useful)

    • Happens when originating from iterm2 or alacritty (on macos)
    • destination is a linux VM running inside a freebsd host using bhyve as vm host

    zellij.log (using --debug)

    INFO   |zellij_client            | 2022-06-20 13:50:43.479 [main      ] [/home/brad/.cargo/registry/src/github.com-1ecc6299db9ec823/zellij-client-0.30.0/src/lib.rs:124]: Starting Zellij client!
    INFO   |zellij_server            | 2022-06-20 13:50:43.490 [main      ] [/home/brad/.cargo/registry/src/github.com-1ecc6299db9ec823/zellij-server-0.30.0/src/lib.rs:194]: Starting Zellij server!
    INFO   |zellij_server::wasm_vm   | 2022-06-20 13:50:43.547 [wasm      ] [/home/brad/.cargo/registry/src/github.com-1ecc6299db9ec823/zellij-server-0.30.0/src/wasm_vm.rs:87]: Wasm main thread starts
    DEBUG  |status-bar               | 2022-06-20 13:50:43.677 [id: 1     ] quicknav_show_count: 18
    DEBUG  |status-bar               | 2022-06-20 13:50:43.682 [id: 1     ] quicknav_show_count: 19
    ERROR  |zellij_client            | 2022-06-20 13:50:49.767 [stdin_handler] [/home/brad/.cargo/registry/src/github.com-1ecc6299db9ec823/zellij-client-0.30.0/src/lib.rs:205]: Panic occured in client:
    PanicInfo { payload: Any { .. }, message: Some(called `Result::unwrap()` on an `Err` value: Os { code: 5, kind: Uncategorized, message: "Input/output error" }), location: Location { file: "/home/brad/.cargo/registry/src/github.com-1ecc6299db9ec823/zellij-client-0.30.0/src/os_input_output.rs", line: 121, col: 39 }, can_unwind: true }
    INFO   |zellij_server::wasm_vm   | 2022-06-20 13:50:49.776 [wasm      ] [/home/brad/.cargo/registry/src/github.com-1ecc6299db9ec823/zellij-server-0.30.0/src/wasm_vm.rs:213]: wasm main thread exits
    
    Reviewed by noyez at 2022-06-20 14:02
  • 16. Preserve environment variable when attaching to existing session

    Currently the environment variables in shells opened in zellij are inherited from the session that starts the zellij server. It would be great to have the newly opened shells inherit the environment of the currently attached session. This is useful for, e.g., indicating current session is a SSH session via shell prompts.

    Reviewed by blurgyy at 2022-06-20 03:24
Cork is a simple command-line calculator, mainly targeted towards people who deal with hex numbers
Cork is a simple command-line calculator, mainly targeted towards people who deal with hex numbers

Cork is a simple command-line calculator, mainly targeted towards people who deal with hex numbers. It deals only with integer arithmetic. Expressions may involve mixed bases (limited to decimal, hexadecimal, octal and binary numbers). The global output format may be set to a particular radix - by default it is hex.

Mar 16, 2022
CLI tool for generating a summary of recent github activity for people who are incredibly forgetful

CLI tool for generating a summary of recent github activity for people who are incredibly forgetful but still need to give weekly status updates to their boss without getting depressed and convincing themselves they did nothing because they can't remember what they did!

Mar 29, 2022
Warp is a blazingly fast, Rust-based terminal that makes you and your team more productive at running, debugging, and deploying code and infrastructure.
Warp is a blazingly fast, Rust-based terminal that makes you and your team more productive at running, debugging, and deploying code and infrastructure.

Warp is a blazingly fast, Rust-based terminal that makes you and your team more productive at running, debugging, and deploying code and infrastructure.

Jun 17, 2022
create and test the style and formatting of text in your terminal applications
 create and test the style and formatting of text in your terminal applications

description: create and test the style and formatting of text in your terminal applications docs: https://docs.rs/termstyle termstyle is a library tha

Jul 3, 2021
Rust library for ANSI terminal colours and styles (bold, underline)

rust-ansi-term This is a library for controlling colours and formatting, such as red bold text or blue underlined text, on ANSI terminals. View the Ru

Jun 15, 2022
Cross-platform Rust library for coloring and formatting terminal output
Cross-platform Rust library for coloring and formatting terminal output

Coloring terminal output Documentation term-painter is a cross-platform (i.e. also non-ANSI terminals) Rust library for coloring and formatting termin

Jun 6, 2022
Build terminal user interfaces and dashboards using Rust
Build terminal user interfaces and dashboards using Rust

tui-rs tui-rs is a Rust library to build rich terminal user interfaces and dashboards. It is heavily inspired by the Javascript library blessed-contri

Jun 23, 2022
A library that creates a terminal-like window with feature-packed drawing of text and easy input handling. MIRROR.

BearLibTerminal provides a pseudoterminal window with a grid of character cells and a simple yet powerful API for flexible textual output and uncompli

May 11, 2022
Build terminal dashboards using ascii/ansi art and javascript
Build terminal dashboards using ascii/ansi art and javascript

blessed-contrib Build dashboards (or any other application) using ascii/ansi art and javascript. Friendly to terminals, ssh and developers.

Jun 24, 2022
🖥 A feature rich terminal UI file transfer and explorer with support for SCP/SFTP/FTP/S3
🖥  A feature rich terminal UI file transfer and explorer with support for SCP/SFTP/FTP/S3

?? A feature rich terminal UI file transfer and explorer with support for SCP/SFTP/FTP/S3

Jun 19, 2022
Terminal UI that allows Alacritty users to quickly and easily shuffle through provided themes 🦄

Alac-pretty alac-pretty.mp4 If you're like me in that you constantly need to change the colors of your dev environment because visual stagnation reall

Apr 17, 2022
Detects whether a terminal supports color, and gives details about that support

Detects whether a terminal supports color, and gives details about that support. It takes into account the NO_COLOR environment variable. This crate i

May 29, 2022
An elegant language for script-kiddies and terminal squatters.

Tonic An elegant language for script-kiddies and terminal squatters. About I started Tonic to complete the Advent of Code 2021. My eventual goal is to

Mar 3, 2022
pt is a simple tabbed terminal built with gtk-rs and vte-rs.
pt is a simple tabbed terminal built with gtk-rs and vte-rs.

pt pt is a simple tabbed terminal built with gtk-rs and vte-rs. how to build You need to have gtk3 glib vte pcre2 dev packages installed on your syste

Dec 8, 2021
Vari (Väri) is a Rust library for formatting strings with colors and cosmetic stuff to the terminal.
Vari (Väri) is a Rust library for formatting strings with colors and cosmetic stuff to the terminal.

Vari Vari (Väri) is a Rust library for formatting strings with colors and cosmetic stuff to the terminal. Like Rich library for Python. Väri means "co

Mar 12, 2022
zigfi is an open-source stocks, commodities and cryptocurrencies price monitoring CLI app, written fully in Rust, where you can organize assets you're watching easily into watchlists for easy access on your terminal.
zigfi is an open-source stocks, commodities and cryptocurrencies price monitoring CLI app, written fully in Rust, where you can organize assets you're watching easily into watchlists for easy access on your terminal.

zigfi zigfi is an open-source stocks, commodities and cryptocurrencies price monitoring CLI app, written fully in Rust, where you can organize assets

Jun 12, 2022
Create tasks and save notes offline from your terminal

Create tasks and save notes offline from your terminal

Apr 18, 2022
Workflows make it easy to browse, search, execute and share commands (or a series of commands)--without needing to leave your terminal.
Workflows make it easy to browse, search, execute and share commands (or a series of commands)--without needing to leave your terminal.

Workflows The repo for all public Workflows that appear within Warp and within commands.dev. To learn how to create local or repository workflows, see

Jun 17, 2022
An open source, programmed in rust, privacy focused tool for reading programming resources (like stackoverflow) fast, efficient and asynchronous from the terminal.

Falion An open source, programmed in rust, privacy focused tool for reading programming resources (like StackOverFlow) fast, efficient and asynchronou

May 4, 2022