A terminal workspace with batteries included
Go to file
KOVACS Tamas 8ccf3d61a0 fix: use bounded queue between pty and screen
Pty reads a command's output and feeds it to Screen using an unbounded
queue.

However, if the command produces output faster than what `Screen` can
render, `Pty` still pushes it on the queue, causing it to grow
indefinitely, resulting in high memory usage and latency.

This patch fixes this by using a bounded queue between Pty and Screen,
so if Screen can't keep up with Pty, the queue will fill up, exerting
back pressure on Pty, making it read the command's output only as fast
as Screen renders it.

The unbounded queue is kept between Screen and producers other than Pty
to avoid a deadlock such as this scenario:
* pty thread filling up screen queue as soon as screen thread pops
  something from it
* wasm thread is processing a Render instruction, blocking on the screen
  queue
* screen thread is trying to render a plugin pane. It attempts to send a
  Render insturction to the blocked wasm thread running the plugin.

This patch also adds a generous amount of sleeps to the integration
tests as having backpressure changes the timing of how instructions are
processed.

Fixes #525.
2021-05-27 23:42:15 +02:00
.github build(ci): Use Cache to speed up CI checks 2021-05-15 13:41:36 +05:30
assets Move config assets to zellij-utils crate 2021-05-27 13:41:17 +02:00
default-plugins remove shortened_text mode from status-bar 2021-05-25 13:20:30 +05:30
docs First round of merging against server-client and color stuff 2021-05-08 04:32:31 -07:00
example fixup! Merge branch 'main' of https://github.com/zellij-org/zellij into simple-font-ui 2021-05-10 20:54:39 +02:00
src fix: use bounded queue between pty and screen 2021-05-27 23:42:15 +02:00
zellij-client refactors for #525 (#534) 2021-05-27 16:28:28 +02:00
zellij-server fix: use bounded queue between pty and screen 2021-05-27 23:42:15 +02:00
zellij-tile chore(version): bump development version 2021-05-27 14:41:33 +02:00
zellij-tile-utils chore(version): bump development version 2021-05-27 14:41:33 +02:00
zellij-utils refactors for #525 (#534) 2021-05-27 16:28:28 +02:00
.gitignore clean and exit on window close 2021-05-15 22:18:29 +05:30
Cargo.lock refactors for #525 (#534) 2021-05-27 16:28:28 +02:00
Cargo.toml chore(version): bump development version 2021-05-27 14:41:33 +02:00
CHANGELOG.md chore(version): bump development version 2021-05-27 14:41:33 +02:00
CODE_OF_CONDUCT.md docs(coc): initial 2020-10-27 11:11:10 +01:00
CONTRIBUTING.md chore(docs): Fix references 2021-05-19 10:48:30 +02:00
GOVERNANCE.md Add Kyle to governance.md 2021-04-03 01:42:13 -07:00
LICENSE.md Update references of mosaic to Zellij in md files 2021-02-10 12:12:19 +05:30
Makefile.toml chore(release): v0.12.0 2021-05-27 14:15:24 +02:00
README.md docs(readme): clarifications 2021-05-17 18:21:31 +02:00
rust-toolchain feat(ci): add CI trigger for manual builds 2021-04-26 18:58:42 +01:00


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.

The default plugins make use of characters that are mostly found in nerdfonts. To get the best experience either install nerdfonts, or use the simplified ui by starting Zellij 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
  • To run all tests: cargo make test

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