repos / zmx

session persistence for terminal processes
git clone https://github.com/neurosnap/zmx.git

commit
98c58c7
parent
990a98f
author
Eric Bower
date
2025-12-02 11:57:19 -0500 EST
docs: readme
1 files changed,  +5, -4
M README.md
+5, -4
 1@@ -14,7 +14,7 @@ Reason for this tool: [You might not need `tmux`](https://bower.sh/you-might-not
 2 - Multiple clients can connect to the same session
 3 - Re-attaching to a session restores previous terminal state and output
 4 - Works on mac and linux
 5-- This project does **NOT** provide windows, tabs, or window splits
 6+- This project does **NOT** provide windows, tabs, or splits
 7 
 8 ## install
 9 
10@@ -81,9 +81,9 @@ todo.
11 
12 ## philosophy
13 
14-The entire argument for `zmx` instead of something like `tmux` that has windows, panes, splits, etc. is that job should be handled by your os window manager.  By using something like `tmux` you now have redundent functionality in your dev stack: a tiling manager for your os windows and a tiling manager for your terminal windows.  Further, in order to use modern terminal features, your terminal emulator **and** `tmux` need to have support for them.  This holds back the terminal enthusiast community and feature development.
15+The entire argument for `zmx` instead of something like `tmux` that has windows, panes, splits, etc. is that job should be handled by your os window manager.  By using something like `tmux` you now have redundent functionality in your dev stack: a window manager for your os and a window manager for your terminal.  Further, in order to use modern terminal features, your terminal emulator **and** `tmux` need to have support for them.  This holds back the terminal enthusiast community and feature development.
16 
17-Instead, we focus this tool specifically on session persistence and defer window management to your os wm.
18+Instead, this tool specifically focuses on session persistence and defers window management to your os wm.
19 
20 ## ssh workflow
21 
22@@ -164,6 +164,7 @@ At this point, nothing is configurable.  We are evaluating what should be config
23 ## impl
24 
25 - The `daemon` and client processes communicate via a unix socket
26+- Both `daemon` and `client` loops leverage `poll()`
27 - Each session creates its own unix socket file `/tmp/zmx/*`
28 - We restore terminal state and output using `libghostty-vt`
29 
30@@ -182,7 +183,7 @@ How it works:
31 - user re-attaches to session
32 - `ghostty-vt` sends terminal snapshot to client stdout
33 
34-In this way, `ghostty-vt` doesn't sit in the middle of an active terminal session, it simply receives all the same data the client receives so it can re-hydrate clients that connect to the session.  This enables users to pick up where they left off as if they didn't disconnect from the terminal session at all.  It also has the added benefit of being very fast, the only thing sitting in-between you and your PTY is a unix socket file.
35+In this way, `ghostty-vt` doesn't sit in the middle of an active terminal session, it simply receives all the same data the client receives so it can re-hydrate clients that connect to the session.  This enables users to pick up where they left off as if they didn't disconnect from the terminal session at all.  It also has the added benefit of being very fast, the only thing sitting in-between you and your PTY is a unix socket.
36 
37 ## prior art
38