rexnux

A desktop client for Rex, the terminal multiplexer and session server by Superlogical, drawn as a native Go interface with MyGo and its Liquid Glass material.

Rex keeps sessions running on the server: windows, split panes and terminals live there, and a client is a view of them. This client speaks Rex's control API over WebSocket, renders each terminal with Ghostty's own VT engine (libghostty-vt through MyGo's terminal plugin), and paints the workspace the way the official macOS app does — a warm glass window, raised tab pills, 10 pt pane cards, hairline strokes and an accent-ringed active pane.

What works

  • Real server only. No mock data. On launch it looks for a local server ($XDG_RUNTIME_DIR/rex/server.sock), and otherwise offers to start one with rex server start or to connect to host:port / a socket path.
  • It never guesses which session to open. A returning user lands in the session they used last; a new one gets the session picker, and a server with no sessions gets a welcome screen rather than an empty terminal. Closing a pane removes it at once, before the server's view confirms.
  • Live sessions. Bootstrap, attach, and a session view driven by the server's events, with one palette (⌘K or ⌘⇧P) holding sessions, windows, commands and themes, and a tab strip of the session's windows.
  • Real terminals. Each pane is a Ghostty emulator fed by the block's data stream. The stream's snapshot is skipped and the screen is restored with com.superlogical.terminal.format; Rex's inline resize, theme and child_exited messages are handled. Keystrokes go back as client.key, and the pane claims the block and reports its size so the server's PTY matches the window.
  • Layout operations. New window, split horizontally/vertically, zoom, close, focus a window or block, all through the documented API.
  • Pane tabs. Drop a pane on another pane's title bar to make the two tabs in that slot; the dropped pane becomes the visible tab and the other stays running in the background. Click a tab in the pane header to switch. The pane close button closes the active tab. Rex has no native nested tabs: the inactive tabs are detached on the server and the grouping is stored in rexnux's own settings, so other clients see only the visible tab.
  • Drag tiling. Drag a pane by its header and drop it on another pane's edge to dock it there. Drop it on a tab, the empty tab strip, or the + button to give it its own tab; dropping on a tab places the new tab right after it. Hold it over a tab to preview that window, then drop on a pane to move the pane inside. The focused pane can also move from the palette, for the keyboard. With pane headers hidden, a narrow strip at the top of each pane stays draggable.
  • Renaming. Double-click a tab, or a session or window row in the palette, to rename it. Panes are not renamed: a pane's header follows the program's own title.
  • Appearance. The 41 palettes and 73 design tokens Rex ships, a settings window with the material switch (Glass / Classic), inactive-pane fading, headers, and the theme grid. Preferences persist under ~/.config/rexnux/settings.json.

Running

go build -o rexnux .
./rexnux

A Rex server must be reachable. Start one with the rex CLI:

rex server start        # or: rex server run
rex new demo -- bash    # a session to look at

The client needs the rex CLI on PATH only for the Start Local Server button; connecting to an existing socket or address needs nothing else.

Keyboard

ShortcutAction
⌘K / Ctrl KPalette: sessions, windows, commands, themes
⌘⇧P / Ctrl PThe same palette
⌘N / Ctrl NNew window
⌘T / Ctrl TSplit right
⌘D / Ctrl DSplit below
⌘W / Ctrl WClose the focused block
⌘, / Ctrl ,Settings

Development switches

These exist so the interface can be checked without a compositor's screenshot tool:

VariableEffect
REXNUX_SHOT=/path.pngCapture the window four seconds after launch
REXNUX_SHOT_SETTINGS=/path.pngCapture the settings window
REXNUX_OPEN=sessions|palette|settingsOpen a surface at launch
REXNUX_SETTINGS_PAGE=appearance|panes|themes|server|aboutOpen that settings page
REXNUX_ENDPOINT=host:7297Connect to this server instead of discovering
REXNUX_PANEL=1Float the window (handy in a tiling compositor)

Layout

main.go                 window creation, dev hooks
internal/theme          the shipped palettes and token parsing
internal/rex            control protocol, data streams, typed calls
internal/ui             the interface: chrome, panes, terminals, palette,
                        settings, connection flow
docs/reference          the build specification and reference screenshots
docs/screenshots        screenshots of this client

docs/reference/REX-BUILD-SPEC.md records what the official app does — the API surface, the GUI map, and the measured design system — extracted from Superlogical's site, docs and shipped app bundle. The large research corpus (videos, DMGs, frames) stays out of git.

Known gaps

  • No automatic resume when a data stream drops; reopen the pane to reconnect. (Rex's RESUME handshake is specified in the docs and not implemented here.)
  • The session picker lists sessions but not per-session activity or host grouping yet.
  • Pane motion and the theme editor are not implemented; the settings window covers appearance, panes, themes, server and about.
  • The window's glass is drawn over an in-app desktop tone, because Linux has no compositor material for MyGo's Vibrancy.

License and notice

MIT licensed; see LICENSE.

rexnux is an independent project and is not affiliated with, endorsed by, or sponsored by Superlogical, the makers of Rex. "Rex" is used only to describe what this client talks to. Rex, its app, its icon set and its screenshots belong to their respective owners; anything of theirs included here for reference or compatibility remains theirs, and is not covered by this project's license.