Superlogical Web
A browser workspace for real terminals on your Mac. Horizontal tabs, split panes, translucent themes, and persistent processes—backed by a local companion, rather than the lifetime of a browser tab.
An independent experiment, deeply inspired by Superlogical. The product vision, interaction direction, and visual reference come from the wonderful work of the Superlogical team. Their multiplexer is the reason this project exists. Please explore and support the original. This is not an official Superlogical product, port, partnership, or endorsement.
The project is experimental and macOS-first. This repository is private while it is prepared for a possible public release. The working name is an attribution, not a claim to the Superlogical brand; a distinct project name should precede a public launch.
What works
- Real login shells with your local tools, ANSI colors, and terminal applications.
- Horizontal tabs, nested splits, resizing, renaming, and background tab management.
- Processes that continue after closing the browser or restarting the companion.
- Smart close: idle shells are removed; running or uncertain jobs are kept in the background. Ending processes is an explicit action.
- Reconnection with restored workspace layout and terminal output.
- Search, selection, copying, and a custom history scrollbar.
- Six light/dark palettes, system appearance by default, Geist fonts, glass surfaces, and reduced-motion support.
- Keyboard navigation and a command palette built on Base UI and cmdk.
Processes run on your Mac as your user, with access to your files and installed tools. There is no remote host support, cloud relay, collaboration service, account system, or browser sandbox in this version. Sleeping your Mac pauses execution; a reboot ends processes even though saved workspace metadata remains.
Run locally
Requirements: macOS, Node.js 24 LTS, npm 11, and tmux 3.6 or newer. Install tmux with brew install tmux. Xcode Command Line Tools (xcode-select --install) may be needed when node-pty builds from source.
git clone git@trylle.com:stylessh/superlogical-web.git
cd superlogical-web
npm ci
npm run build
npm startIn another terminal:
npm run openThe companion listens on http://127.0.0.1:4317. open pairs your browser using a local token; visiting the address alone does not grant shell access. Keep the checkout and its dependencies in place while using the companion.
To start the built companion automatically when you log in:
npm run companion:install
npm run openAfter updating the code, run npm ci, npm run build, and npm run companion:install again. The installer updates the launch agent and restarts the companion; existing tmux processes remain alive.
npm run companion:uninstallUninstalling removes the login service. It deliberately retains saved state and tmux processes; use the app's explicit process termination controls to end work you no longer need.
Development
Use a separate port, data directory, and tmux socket when the installed companion is running:
export PORT=4517
export SUPERLOGICAL_DATA_DIR="$HOME/.superlogical-web-dev"
export SUPERLOGICAL_SOCKET=superlogical-web-dev
npm run devIn another terminal, set the same PORT and SUPERLOGICAL_DATA_DIR, then run npm run open. The companion serves Vite on the same origin, with authenticated workspace bootstrap and source-based workspace package resolution. No separate frontend server or permissive CORS configuration is necessary.
npm run lint # Ultracite + Biome, including formatting
npm run lint:fix # Apply safe fixes
npm run typecheck # All workspace packages
npm run build # Dependency-ordered production builds
npm test # Model, bootstrap, and real companion/tmux integration tests
npm run check # Full local quality gateIntegration tests create isolated data directories and tmux sockets. They exercise real processes; tmux and zsh must be installed. See Contributing for conventions and test boundaries.
Workspace
| Package | Responsibility |
|---|---|
apps/web | React, Vite, StyleX, Motion, Base UI, cmdk, and xterm.js interface |
apps/companion | Loopback HTTP/WebSocket service, pairing, HTML bootstrap, macOS launch agent |
packages/terminal-core | tmux lifecycle, PTY attachments, history replay, workspace persistence |
packages/shared | Workspace model, validated action contracts, and theme definitions |
npm workspaces provide dependency linking; Turborepo orders builds and caches deterministic outputs. Production runs compiled JavaScript. Architecture explains persistence and trust boundaries; interface conventions document the visual system.
Configuration and data
| Variable | Default | Purpose |
|---|---|---|
PORT | 4317 | Loopback HTTP/WebSocket port |
SUPERLOGICAL_DATA_DIR | ~/.superlogical-web | Pairing token, metadata, tmux configuration, service logs |
SUPERLOGICAL_SOCKET | superlogical-web | Dedicated tmux server socket |
TMUX_BIN | tmux on PATH | Override the tmux executable |
SHELL | Your environment, falling back to /bin/zsh | Shell for new terminals |
Do not commit pairing tokens, workspace data, shell output, .env files, or local screenshots. Never expose the companion through a public proxy or bind it to a network interface. See Security before changing authentication or transport code.
Credits and license
The clearest credit belongs to Superlogical and its team. Their product and screenshots provided the foundational design and product reference for this experiment. This repository contains our implementation, not the original team's source code, and does not redistribute their reference screenshots.
Built with tmux, xterm.js, node-pty, React, StyleX, Motion, Base UI, cmdk, Hugeicons, Geist, Turborepo, and Ultracite.
Original code is available under the MIT license. Third-party dependencies retain their own licenses. The license does not grant rights to the Superlogical name, brand, original product, or reference imagery. See attribution.