How tmux is put together
tmux is a terminal multiplexer written in C that allows multiple terminals to be created, accessed, and controlled from a single screen, with support for detaching and reattaching sessions. It follows a client-server architecture: a single server process owns sessions, windows, and panes (the grid/screen model), while client processes attach via a local socket and communicate with the server using imsg-based IPC (proc.c, tmux-protocol.h, compat/imsg*). Input parsing (input.c, cmd-parse.y), formatting (format.c), and terminal output (tty*.c) form the core data flow from keystrokes through the screen grid to terminal rendering. The build is autotools-based (configure.ac, Makefile.am) with per-platform osdep-*.c files and a compat/ directory of portability shims.
Languages
Frameworks
Infrastructure
Major components
client/server IPC (proc.c, tmux.c, client.c, server.c)
Implements the tmux client-server split, local socket listening, event loops, and message passing between clients and the server.
command layer (cmd-*.c, cmd.c, cmd-parse.y, cmd-queue.c)
Defines every tmux command (new-session, split-window, etc.), the configuration/command grammar parser, and the command execution queue.
screen/grid model (screen.c, grid.c, grid-view.c, grid-reader.c, screen-write.c, screen-redraw.c)
Maintains the terminal cell grid history for each pane, applies writes to it, and computes redraw diffs.
terminal input/output (input.c, input-keys.c, tty.c, tty-keys.c, tty-term.c, tty-draw.c)
Parses escape sequences coming from applications into grid updates and renders grid state out to the real terminal via terminfo.
session/window/pane management (session.c, window.c, window-panes.c, layout.c, spawn.c, resize.c)
Manages session/window/pane lifecycle, layouts, pane spawning (pty allocation), and resizing.
formats, styles and status line (format.c, format-draw.c, style.c, status.c, options.c, options-table.c)
Expands format strings, draws the status line, and stores/evaluates user-configurable options and styles.
interactive modes (window-copy.c, mode-tree.c, menu.c, popup.c, prompt.c, choose-tree modes)
Implements copy mode, tree choosers, menus, popups, and command prompts as modal overlays on windows.
portability & platform layer (compat/, osdep-*.c, xmalloc.c)
Provides OS-specific process/user-info functions per platform and replacement libc functions (imsg, forkpty, base64, explicit_bzero, etc.) plus checked allocation wrappers.
A cleanup-focused week dominated by fixing memory leaks across many parts of the program, plus a new clear-on-attach option.
5 weeksWeek of 2026-08-24
Week of 2026-08-24latest
A cleanup-focused week dominated by fixing memory leaks across many parts of the program, plus a new clear-on-attach option.
Week of 2026-08-17
A busy week centered on new floating and 'modal' pane features alongside a wave of user-reported bug fixes.
Week of 2026-08-10
A very quiet week with just a single compatibility fix for portability.
Week of 2026-08-03
Floating panes got polished, control-mode notifications became more reliable, and several stuck-client crashes were addressed.
Week of 2026-07-27
Scrollbar and mouse-menu fixes landed, plus helpful new introspection features showing hook usage.
Over the past five weeks, tmux development has been a steady mix of memory-leak cleanups, bug fixes reported by users on GitHub, and small new features. Recent highlights include new pane-related options (a clear-on-attach setting, modal panes that can capture all keys or float above zoom), better terminal capability detection, and numerous crash and display fixes. The project also continues to grow its automated regression tests so these bugs stay fixed.
Week by week
2026-08-24A cleanup-focused week dominated by fixing memory leaks across many parts of the program, plus a new clear-on-attach option.latest6 changes
Feature
Clear-on-attach option
Added an option that controls whether the screen is cleared when you attach, letting you keep scrollback history instead.
Fix
Batch of memory leak fixes
Several leaks were fixed where the program kept hold of memory it no longer needed, including exit messages, cached status lines, pane data, client paths, format strings, and buffer names — many contributed by Jeong, Heon.
Fix
Safer handling of invalid sessions and windows
The code now checks for missing sessions or windows before sorting data, avoiding potential crashes from passing empty values.
Fix
Fewer unnecessary redraws
Panes without scrollbars are no longer redrawn needlessly, making updates more efficient.
Fix
Shell escape characters updated
Curly braces were added to the characters tmux escapes in shell commands, since they are special in common shells like bash and csh.
Fix
Copy mode display fix
Synchronized screen updates are now always used in copy mode to prevent flickering or garbled output.
2026-08-17A busy week centered on new floating and 'modal' pane features alongside a wave of user-reported bug fixes.6 changes
Feature
Floating panes can stay above zoom
A new -A flag lets floating panes remain visible on top even when another pane is zoomed full-screen.
Feature
Modal panes capture all keys
A new -K flag for new-pane makes a pane intercept every keystroke, like a pop-up dialog inside the terminal.
Fix
Correct cursor position for combined characters
Fixed the horizontal position used when displaying combining characters, resolving GitHub issue 5511 with a test included.
Fix
Better terminal capability detection
tmux now asks the terminal directly (via DECRQM) whether it supports synchronized output, and you can disable specific features using an @ suffix in terminal-features.
Fix
Fixed wrapped-line walking and respawn behavior
Line navigation now stops at the right edge of wrapped text, and respawning a pane correctly resets control-mode offsets.
Fix
macOS socket names fixed
Socket naming was corrected so tmux works reliably on macOS, along with a fix restoring system permissions if binding fails.
2026-08-10A very quiet week with just a single compatibility fix for portability.1 change
Fix
Portability fix for socket options
Changed the type used when querying socket options to socklen_t, improving compatibility across operating systems.
2026-08-03Floating panes got polished, control-mode notifications became more reliable, and several stuck-client crashes were addressed.6 changes
Feature
New T key to rename pane title
You can now press T to interactively change a pane's title, plus a refresh-now command was added for copy mode.
Feature
New pane_private_modes format variable
A new format shows which special DEC modes a pane has enabled, useful for scripting and status displays.
Fix
Stuck clients no longer block the server
If a client hangs, tmux now gives up waiting on it so it cannot prevent the server from exiting.
Refactor
Control mode notifications queued properly
Notifications for automated control clients are now queued instead of sent mid-operation, making them far more reliable, with new tests added.
Fix
Background color handling in padding cells
Padding cells now store the background color so adjacent areas clear correctly without visual glitches.
Chore
CI workflows limited to main repository
Automated lock and regression workflows now only run on the main tmux repo rather than on forks, via merged pull request #5471.
2026-07-27Scrollbar and mouse-menu fixes landed, plus helpful new introspection features showing hook usage.6 changes
Fix
Crash prevention workaround
Compiler flags for one source file were adjusted after optimizations caused tmux to dump core.
Feature
Hook count and timing visible
Customize mode now shows how many times each hook (automation trigger) has fired and when it last ran, with tests included.
Feature
Option to hide scrollbars in display-panes
A new flag turns off scrollbars for the pane-overview display, addressing GitHub issue 5440.
Fix
Mouse menu position fixed
Menus opened by mouse clicks now remember their exact position reliably thanks to a reworked mouse event structure.
Fix
pipe-pane pipes closed cleanly
Destroying a pane now also closes its command pipe and event, preventing resource leaks (GitHub issue).
Feature
New after-swap-window hook
A new hook runs after windows are swapped between positions, enabling custom automation, contributed from a community member.
Dependencies and code review
Dependency advisories
Security Watch
No known advisories across 0 scanned dependencies.
No known advisories in the scanned dependencies.
Code review
No concrete code-level issues confirmed.
Get this report every week for your repos.
GitZoid learns each repo, reports what changed, and flags what needs attention. One flat price for the whole team.
$19 a month, flat · First 10 outputs free · No card required