<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Crystal Studio</title>
    <description>The latest articles on DEV Community by Crystal Studio (@crystalstudio).</description>
    <link>https://dev.to/crystalstudio</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4097654%2Ffc0bb3d1-d5ee-43c5-9d0d-b6390f9f0898.jpg</url>
      <title>DEV Community: Crystal Studio</title>
      <link>https://dev.to/crystalstudio</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/crystalstudio"/>
    <language>en</language>
    <item>
      <title>umux: an open-source terminal workspace manager for Linux, Windows, and macOS</title>
      <dc:creator>Crystal Studio</dc:creator>
      <pubDate>Fri, 28 Aug 2026 10:51:03 +0000</pubDate>
      <link>https://dev.to/crystalstudio/umux-an-open-source-terminal-workspace-manager-for-linux-windows-and-macos-13nl</link>
      <guid>https://dev.to/crystalstudio/umux-an-open-source-terminal-workspace-manager-for-linux-windows-and-macos-13nl</guid>
      <description>&lt;h2&gt;
  
  
  TLDR
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;umux&lt;/strong&gt; is a free, open-source desktop app that organizes terminal windows into named &lt;strong&gt;workspaces&lt;/strong&gt; (one per project), each holding &lt;strong&gt;tabs&lt;/strong&gt; that split into any number of resizable &lt;strong&gt;panels&lt;/strong&gt;. It runs natively on Linux, Windows, and macOS from one codebase. It also watches the terminal data stream for the signals AI coding tools emit when a long task finishes, and fires a desktop notification — so you can step away while an agent works. Version 1.0.2, released 27 August 2026, is the first release with native Windows and macOS builds alongside Linux. It exists for developers who want the "many terminals, one place" workflow without learning tmux.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key facts
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Platforms:&lt;/strong&gt; Linux (&lt;code&gt;.deb&lt;/code&gt;, &lt;code&gt;.AppImage&lt;/code&gt;, &lt;code&gt;.rpm&lt;/code&gt;), Windows 10+ (&lt;code&gt;.exe&lt;/code&gt; installer), macOS 11+ (universal &lt;code&gt;.dmg&lt;/code&gt; — Apple Silicon and Intel in one file)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Current release:&lt;/strong&gt; v1.0.2, 27 August 2026; nine tagged releases in total, from five dev previews to the 1.0 line&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Development timeline:&lt;/strong&gt; 53 commits between 27 June and 27 August 2026; 42 of them in August — the active build took under a month&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tests:&lt;/strong&gt; 449 automated tests (115 Rust + 334 frontend), all passing at v1.0.2&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stack:&lt;/strong&gt; Tauri v2 — a Rust backend, a React + TypeScript frontend, terminals rendered with xterm.js&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Licence and cost:&lt;/strong&gt; MIT; builds are unsigned; infrastructure cost is $0 (GitHub Actions for builds, Cloudflare Pages for the landing page)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Telemetry:&lt;/strong&gt; exactly one anonymous app-open event, nothing else&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Layout model:&lt;/strong&gt; workspaces → tabs → unlimited split panels per tab, with minimum panel sizes and one-shortcut pane zoom&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key fact:&lt;/strong&gt; terminal output inside umux is byte-identical whether or not its inspector is running — the inspector reads the stream and never modifies it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is umux?
&lt;/h2&gt;

&lt;p&gt;umux is one window where all of a project's terminals live. A developer creates a &lt;strong&gt;workspace&lt;/strong&gt; named after the project — "shop-frontend", "server-migration" — and opens terminal &lt;strong&gt;tabs&lt;/strong&gt; inside it. Any tab's area splits into as many &lt;strong&gt;panels&lt;/strong&gt; as needed, resized by dragging dividers, with a minimum size enforced so nothing collapses to nothing. A keyboard shortcut zooms one panel to fill the tab and restores the exact previous layout afterwards; the covered panels keep running underneath.&lt;/p&gt;

&lt;p&gt;The whole arrangement survives a restart. Workspaces, tabs, panel layouts, and working directories are saved to a config file and restored when the app reopens. Each panel runs a real shell — the user's own shell on Linux and macOS, PowerShell on Windows — and renders a genuine terminal: colors, cursor movement, full-screen programs like &lt;code&gt;vim&lt;/code&gt; and &lt;code&gt;htop&lt;/code&gt; all work.&lt;/p&gt;

&lt;h2&gt;
  
  
  What problem does it solve?
&lt;/h2&gt;

&lt;p&gt;A working developer's terminal count grows with every project. Today's typical setup: a dev server in one window, an API in another, an SSH session into a remote machine somewhere, plus an AI coding agent churning through a task in a fourth. The windows pile up in the taskbar and the developer loses track — most acutely when an AI agent finishes a ten-minute task and nobody notices for twenty minutes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quick answer:&lt;/strong&gt; umux replaces the window pile-up with one window per project, and it tells you when the AI agent is done instead of making you babysit it.&lt;/p&gt;

&lt;p&gt;The classic tool for this is tmux, and it is genuinely excellent — but it is a keyboard-first, text-mode world with its own prefix keys and configuration language. Plenty of good developers never learn it. umux delivers the same outcome (many terminals, one place, organized per project) through a graphical interface.&lt;/p&gt;

&lt;h2&gt;
  
  
  How does umux work?
&lt;/h2&gt;

&lt;p&gt;umux is one app with two halves, built on Tauri v2.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Rust backend&lt;/strong&gt; owns everything that touches the operating system. It creates pseudoterminals (PTYs — the mechanism that makes a program believe it is talking to a real terminal), writes keystrokes into them, resizes them, and closes them cleanly. It also handles SSH connections, desktop notifications, and the config file.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;frontend&lt;/strong&gt; (React + TypeScript) renders the workspace UI and a real terminal surface per panel using xterm.js. Keystrokes flow from the terminal surface down to the backend; output flows from the PTY back up to the screen.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key fact:&lt;/strong&gt; local panels and SSH panels are the same thing to the rest of the app — both are just a PTY behind one interface — so a remote machine's terminal behaves exactly like a local one.&lt;/p&gt;

&lt;h2&gt;
  
  
  How does umux know when an AI agent finished a task?
&lt;/h2&gt;

&lt;p&gt;Terminals and the tools running inside them communicate through &lt;strong&gt;escape sequences&lt;/strong&gt; — special byte patterns embedded in the normal output stream. AI CLI tools such as Claude Code, Codex, and Aider emit standard OSC escape sequences (OSC 9;9, OSC 99, OSC 777) when a long task completes.&lt;/p&gt;

&lt;p&gt;umux feeds every byte of terminal output through a small parser that recognizes these sequences and turns them into events. An event becomes a native desktop notification, and it also drives a per-panel &lt;strong&gt;agent status&lt;/strong&gt; indicator: working while the agent streams, needs-attention when it waits for the user, idle once it exits.&lt;/p&gt;

&lt;p&gt;Three properties of this design matter:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;No polling.&lt;/strong&gt; umux never checks whether a process is still running on a timer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No screen scraping.&lt;/strong&gt; umux never reads the visible terminal content to guess what is happening.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No mutation.&lt;/strong&gt; The parser passes every byte through unchanged and only extracts events, so output stays byte-identical whether or not umux inspects it. Detection relies solely on the escape sequences — nothing else.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  How does umux compare to tmux, cmux, and Herdr?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Quick answer:&lt;/strong&gt; pick tmux if you already live in a keyboard-driven terminal workflow; pick umux if you want that outcome in a GUI — with cross-platform builds the others don't all have.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;umux&lt;/th&gt;
&lt;th&gt;tmux&lt;/th&gt;
&lt;th&gt;cmux&lt;/th&gt;
&lt;th&gt;Herdr&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Type&lt;/td&gt;
&lt;td&gt;desktop app (GUI)&lt;/td&gt;
&lt;td&gt;text-mode multiplexer&lt;/td&gt;
&lt;td&gt;native macOS app&lt;/td&gt;
&lt;td&gt;CLI/TUI multiplexer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Platforms&lt;/td&gt;
&lt;td&gt;Linux, Windows, macOS&lt;/td&gt;
&lt;td&gt;Unix-like (Windows via WSL)&lt;/td&gt;
&lt;td&gt;macOS only&lt;/td&gt;
&lt;td&gt;terminal-based&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Interface&lt;/td&gt;
&lt;td&gt;point-and-click + shortcuts&lt;/td&gt;
&lt;td&gt;keyboard prefix, config file&lt;/td&gt;
&lt;td&gt;GUI sidebar&lt;/td&gt;
&lt;td&gt;keyboard prefix (Ctrl+B)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agent-finish notifications&lt;/td&gt;
&lt;td&gt;yes, from OSC signals&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;agent-aware&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Learning curve&lt;/td&gt;
&lt;td&gt;install and use&lt;/td&gt;
&lt;td&gt;prefix keys, copy mode, config language&lt;/td&gt;
&lt;td&gt;install&lt;/td&gt;
&lt;td&gt;prefix keys&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;cmux and Herdr both target the same new audience — developers running AI coding agents — and both are solid tools. The gap umux fills, per its creator: cmux carries more features than he needed and ships only for macOS; Herdr is a terminal-world tool with no desktop app. umux is the middle option — a simple desktop app, three platforms, one codebase.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are the known limitations?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Agent status is the least polished feature.&lt;/strong&gt; By the creator's own admission it does not yet work perfectly. The completion notifications it is built on are the solid part.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Builds are unsigned.&lt;/strong&gt; umux ships without paid signing certificates (a deliberate $0-cost policy), so macOS Gatekeeper and Windows SmartScreen show a one-time first-run warning. The README documents the two-click workaround.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SSH panels run on Linux and macOS today;&lt;/strong&gt; Windows SSH support is planned for v2.0.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Linux is the reference platform&lt;/strong&gt; (Ubuntu on Wayland is what gets tested). X11 sessions are untested.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Steps: how to install umux
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Download&lt;/strong&gt; from &lt;a href="https://umux.pages.dev" rel="noopener noreferrer"&gt;umux.pages.dev&lt;/a&gt; or the &lt;a href="https://github.com/CrystalPlatforms/umux/releases" rel="noopener noreferrer"&gt;GitHub releases page&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pick the format:&lt;/strong&gt; Linux — &lt;code&gt;.deb&lt;/code&gt; (installs into the system) or &lt;code&gt;.AppImage&lt;/code&gt; (portable, no install); macOS — drag the &lt;code&gt;.dmg&lt;/code&gt; app to Applications; Windows — run the &lt;code&gt;.exe&lt;/code&gt; installer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;First run of an unsigned build:&lt;/strong&gt; on macOS, right-click the app and choose Open (once); on Windows, SmartScreen → More info → Run anyway (once). The README documents both.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Create a workspace per project&lt;/strong&gt;, add a tab, split it into panels. The layout, working directories, and shells come back after a restart.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is umux free?
&lt;/h3&gt;

&lt;p&gt;Yes. It is MIT-licensed open source, the builds cost nothing to make (GitHub Actions), and nothing in the toolchain is paid for — including certificates, which is why builds are unsigned and the README documents the first-run steps.&lt;/p&gt;

&lt;h3&gt;
  
  
  Which operating systems does umux support?
&lt;/h3&gt;

&lt;p&gt;Linux (Ubuntu/Wayland is the reference), Windows 10 and newer, and macOS 11 and newer. The macOS build is universal — one file covers Apple Silicon and Intel. Each platform gets its own native shell: PowerShell on Windows, the user's shell elsewhere.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do I need to learn keybindings or write a config file?
&lt;/h3&gt;

&lt;p&gt;No. umux is point-and-click first: workspaces are created and renamed in the UI, panels are split and resized by dragging, and a handful of shortcuts (such as pane zoom) speed up daily use. There is no configuration language to learn.&lt;/p&gt;

&lt;h3&gt;
  
  
  How does umux detect that an AI coding agent finished?
&lt;/h3&gt;

&lt;p&gt;It reads the standard OSC escape sequences (OSC 9;9, OSC 99, OSC 777) that AI CLI tools emit on task completion, straight from the terminal byte stream. No process polling, no screen reading. The same signals drive a per-panel agent status indicator.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does umux change my terminal output?
&lt;/h3&gt;

&lt;p&gt;No. The inspector sits beside the stream, not in front of it: every byte passes through unchanged, and detection relies solely on the escape sequences. Output is byte-identical whether or not umux is running.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is umux a tmux replacement?
&lt;/h3&gt;

&lt;p&gt;Not for people already productive in tmux — it does not aim at them. It is an alternative for the larger group that never adopted tmux's keyboard-first world and wants the same organization through a GUI. There is no config file and no modal editing model to learn.&lt;/p&gt;

&lt;h3&gt;
  
  
  What data does umux collect?
&lt;/h3&gt;

&lt;p&gt;One anonymous app-open event, used to estimate active usage. Nothing else — no terminal content, no file names, no telemetry of any other kind. It can be turned off.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can umux connect to remote machines?
&lt;/h3&gt;

&lt;p&gt;Yes. An SSH panel opens a shell on a remote machine using the local SSH agent and keys, and behaves identically to a local panel. SSH on Windows is planned for v2.0.&lt;/p&gt;

&lt;h3&gt;
  
  
  How long did it take to build?
&lt;/h3&gt;

&lt;p&gt;Under a month of active work. The commit record spans 27 June to 27 August 2026 (53 commits), with 42 of them landing in August.&lt;/p&gt;

&lt;h2&gt;
  
  
  Last updated
&lt;/h2&gt;

&lt;p&gt;2026-08-28&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>productivity</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
