npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

openmux

v0.2.120

Published

Terminal multiplexer with master-stack tiling layout

Readme

openmux

GitHub Release codecov

A terminal multiplexer with master-stack layout (Zellij-style), built with:

  • Bun - Fast JavaScript runtime
  • OpenTUI - Terminal UI library with SolidJS reconciler
  • SolidJS - Reactive UI framework
  • zig-pty - PTY support for Bun (pure Zig implementation)
  • libghostty-vt - Native terminal emulation (VT parser/state)

openmux screenshot

Features

  • Master-stack tiling layout (like Zellij)
  • i3-gaps style gaps and borders
  • Vim-style hjkl navigation
  • Tmux-style Ctrl+b prefix key
  • 9 workspaces with isolated pane layouts
  • Session persistence and management
  • Detach/attach (leave sessions running in background)
  • Pane zoom (fullscreen focused pane)
  • Aggregate view for browsing/filtering PTYs across workspaces
  • Mouse tracking (click to focus, tabbed pane switching)
  • Scrollback support with mouse wheel and scrollbar
  • Kitty graphics protocol support (image rendering, pixel sizing, SSH-aware offloading)

Installation

Quick Install (curl)

curl -fsSL https://raw.githubusercontent.com/monotykamary/openmux/main/scripts/install.sh | bash

npm / bun

npm install -g openmux
# or
bun add -g openmux

From Source

git clone https://github.com/monotykamary/openmux.git
cd openmux
bun install
bun run build --install

GitHub Releases

Download prebuilt binaries from GitHub Releases.

Available platforms:

  • macOS (Apple Silicon)
  • Linux (x64 / arm64)

Usage

openmux

For development:

bun start      # Run from source
bun dev        # Run with watch mode

CLI

openmux ships a headless-style CLI that talks to the running UI for pane/layout operations and uses on-disk session metadata for session listing/creation.

openmux --help
openmux pane --help
openmux pane capture --help

Examples:

openmux session list --json
openmux session create dev
openmux attach --session dev
openmux pane split --direction vertical --workspace 2
openmux pane send --pane focused --text "npm test\n"
openmux pane capture --pane focused --lines 200 --format ansi

Notes:

  • Pane commands require a running UI (control socket available).
  • pane send supports C-style escapes like \n, \t, \xNN, \uXXXX.
  • See docs/guides/cli.md for the full spec and exit codes.

Architecture (High Level)

┌─────────────────────────┐
│  Host Terminal (TTY)    │
└────────────┬────────────┘
             │ input/output
             v
┌─────────────────────────┐
│ openmux UI (client)     │  Solid + OpenTUI
└────────────┬────────────┘
             │ shim protocol (detach/attach)
             v
┌─────────────────────────┐
│ shim server (background)│
└────────────┬────────────┘
             │ PTY I/O + emulation
             v
┌─────────────────────────┐
│ zig-pty + libghostty-vt │
└─────────────────────────┘

Keyboard Shortcuts

Normal Mode (Alt shortcuts - no prefix needed)

  • Alt+h/j/k/l - Navigate panes
  • Alt+m - Enter move mode
  • Alt+n - New pane
  • Alt+s - Open session picker
  • Alt+t - Open template overlay
  • Alt+g - Open aggregate view (browse all PTYs)
  • Alt+f - Open search
  • Alt+p - Open command palette
  • Alt+[ / Alt+] - Cycle layout mode (vertical → horizontal → stacked)
  • Alt+z - Toggle zoom (fullscreen focused pane)
  • Alt+x - Close pane
  • Alt+- - Split pane horizontally
  • Alt+\ - Split pane vertically
  • Alt+1-9 - Switch to workspace 1-9

Mouse

  • Click - Focus pane
  • Click tab - Switch to stacked pane (in stacked mode)
  • Scroll wheel - Scroll through terminal history (when not in alternate screen apps like vim)
  • Click scrollbar - Jump to position in scrollback
  • Drag scrollbar - Scroll through history by dragging

Prefix Mode (Ctrl+b, 2s timeout)

  • 1-9 - Switch to workspace 1-9
  • n or Enter - New pane
  • h/j/k/l - Navigate panes
  • m - Enter move mode
  • \ - Split pane vertically
  • - - Split pane horizontally
  • v - Set layout mode: vertical
  • H - Set layout mode: horizontal
  • t - Set layout mode: stacked (tabbed)
  • T - Open template overlay
  • x - Close pane
  • z - Toggle zoom
  • s - Open session picker
  • g - Open aggregate view (browse all PTYs)
  • / - Open search
  • : - Open command palette
  • ] or p - Paste from clipboard
  • ` - Toggle console overlay
  • q - Quit openmux
  • d - Detach (leave session running in background)
  • Esc - Exit prefix mode

Move Mode

  • h/j/k/l - Move focused pane west/south/north/east
  • Esc - Exit move mode

Search Mode

  • Ctrl+n - Next match
  • Ctrl+p - Previous match
  • Enter - Confirm selection and jump
  • Esc - Cancel search
  • Backspace - Delete last character

Command Palette

  • / - Navigate commands
  • Enter - Execute selected command
  • Esc - Close command palette
  • Backspace - Delete last character

Template Overlay

Apply Tab:

  • / - Navigate templates
  • Enter - Apply selected template
  • Tab - Switch to save tab
  • Ctrl+x / Ctrl+d - Delete template
  • Esc - Close overlay

Save Tab:

  • Enter - Save current layout as template
  • Tab - Switch to apply tab
  • Backspace - Delete last character
  • Esc - Close overlay

Aggregate View

List:

  • / - Navigate PTYs
  • Enter - Preview selected PTY
  • Tab - Jump to selected PTY and close view
  • Alt+a - Toggle scope (all workspaces vs current)
  • Alt+x - Kill selected PTY
  • Backspace - Delete last filter character
  • Alt+Esc - Close aggregate view

Preview:

  • Alt+Esc - Return to list
  • Alt+f - Open search in preview
  • Alt+x - Kill current PTY
  • Full keyboard/mouse support for terminal interaction

Search (in preview):

  • Ctrl+n - Next match
  • Ctrl+p - Previous match
  • Enter - Jump to match
  • Esc - Exit search
  • Backspace - Delete last character

Prefix (in preview):

  • q - Quit openmux
  • d - Detach
  • Esc - Return to list
  • / - Open search

Session Picker

List Tab:

  • / - Navigate sessions
  • Enter - Select or create session
  • Ctrl+n - Create new session
  • Ctrl+r - Rename session
  • Ctrl+x / Ctrl+d - Delete session
  • Backspace - Delete last filter character
  • Esc - Close picker

Rename Tab:

  • Enter - Confirm new name
  • Esc - Cancel rename
  • Backspace - Delete last character

Confirmation Dialog

  • h / or l / - Focus confirm/cancel
  • Tab - Toggle between confirm/cancel
  • Enter - Confirm
  • Esc - Cancel

Vim Mode (Overlays, opt-in)

Enable via the command palette ("Toggle overlay vim mode"), or in config.toml:

[keyboard]
vimMode = "overlays"
vimSequenceTimeoutMs = 1000

When enabled, overlays open in normal mode:

  • j/k - Navigate lists
  • gg / G - Jump to first/last item
  • Enter - Confirm/preview
  • q - Close overlay
  • i - Enter insert mode
  • Esc - Return to normal mode
  • Search overlays: n / N for next/prev match

Concepts

Why openmux (vs tmux / zellij)

  • Single-client steal/lock: predictable attach semantics; new client wins and old client detaches.
  • UI binary swap: update the UI without touching running PTYs (shim stays alive).
  • UI-first architecture: SolidJS/OpenTUI enables richer overlays and layout evolution.
  • PTY state snapshots: fast attach with immediate state restore (no full redraw pipeline).
  • Emulator ownership: aggregate previews, scrollback caching, and search are first-class.
  • Lower client CPU: shim does emulation; client focuses on rendering updates.

Workspaces

Like i3/sway, openmux supports multiple workspaces (1-9). Each workspace has its own layout tree of panes. The status bar shows populated workspaces dynamically - empty workspaces don't appear unless active.

Layout Modes (Zellij-style)

Each workspace has a layout mode that determines how panes are arranged:

  • Vertical (): Main pane on left, stack panes split vertically on right
  • Horizontal (): Main pane on top, stack panes split horizontally on bottom
  • Stacked (): Main pane on left, stack panes tabbed on right (only active visible)

Sessions

Sessions persist your workspace layouts and pane working directories. Sessions are auto-saved to ~/.config/openmux/sessions/ and can be switched via the session picker (Alt+s or Ctrl+b then s).

Configuration

openmux loads ~/.config/openmux/config.toml (or $XDG_CONFIG_HOME/openmux/config.toml). If the file is missing, a full default config is generated on startup. Deleting the file and restarting openmux will regenerate it.

Config changes are hot-reloaded while openmux is running (layout, theme, and keybindings update live).

See docs/guides/config.md for the full generated config.

Environment variables override the config file for layout values:

  • OPENMUX_WINDOW_GAP
  • OPENMUX_MIN_PANE_WIDTH
  • OPENMUX_MIN_PANE_HEIGHT
  • OPENMUX_STACK_RATIO (maps to layout.defaultSplitRatio)

To unbind a keybinding, set its value to null or "unbind".

Detach / Attach

Use Ctrl+b d to detach and leave the background shim running. Reattach by launching openmux again. Detach/attach uses a single-client lock; a new client steals the lock and the previous client detaches.

Aggregate View

A fullscreen overlay (Alt+g or Ctrl+b then g) that lets you browse all PTYs across all workspaces in one place. Features:

  • Card-style PTY list showing directory, process name, and git branch
  • Interactive terminal preview with full input support (keyboard + mouse)
  • Filter by typing to search by process name, directory, or git branch
  • Navigate with arrow keys (or j/k in overlay vim mode), Enter to interact, Prefix+Esc to return to list

Development Status

Current status:

  • [x] Master-stack layout with gaps
  • [x] OpenTUI component layer
  • [x] Keyboard navigation system
  • [x] PTY integration
  • [x] libghostty-vt native terminal emulation
  • [x] Workspaces (1-9)
  • [x] Layout modes (vertical/horizontal/stacked)
  • [x] Session persistence
  • [x] Pane zoom
  • [x] Mouse support
  • [x] Scrollback support
  • [x] Aggregate view (PTY browser)
  • [x] Attach/detach (steal + lock)
  • [x] Configurable keybindings
  • [x] Configurable settings and colors
  • [x] Kitty graphics protocol support

License

MIT