{"id":45704889,"url":"https://github.com/jsnjack/bunk","last_synced_at":"2026-04-01T21:57:56.466Z","repository":{"id":340358032,"uuid":"1164199634","full_name":"jsnjack/bunk","owner":"jsnjack","description":"Lightweight terminal multiplexer in Go — smart splits, scrollback, container/SSH context awareness, and mouse selection","archived":false,"fork":false,"pushed_at":"2026-03-26T15:21:08.000Z","size":1380,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-03-27T06:13:07.326Z","etag":null,"topics":["go","multiplexer","terminal-multiplexer"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jsnjack.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.MD","dco":null,"cla":null}},"created_at":"2026-02-22T19:33:30.000Z","updated_at":"2026-03-26T15:25:31.000Z","dependencies_parsed_at":"2026-02-27T02:00:39.998Z","dependency_job_id":"1c4889d2-19e1-4dc1-9973-c3cc0f7a015c","html_url":"https://github.com/jsnjack/bunk","commit_stats":null,"previous_names":["jsnjack/bunk"],"tags_count":48,"template":false,"template_full_name":null,"purl":"pkg:github/jsnjack/bunk","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsnjack%2Fbunk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsnjack%2Fbunk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsnjack%2Fbunk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsnjack%2Fbunk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jsnjack","download_url":"https://codeload.github.com/jsnjack/bunk/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsnjack%2Fbunk/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31292631,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-01T21:15:39.731Z","status":"ssl_error","status_checked_at":"2026-04-01T21:15:34.046Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["go","multiplexer","terminal-multiplexer"],"created_at":"2026-02-25T00:07:05.844Z","updated_at":"2026-04-01T21:57:56.461Z","avatar_url":"https://github.com/jsnjack.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# bunk\n\nAdds split panes to any terminal. Detects your current context - container, SSH, or sudo - and can open new panes inside the same environment.\n\n![bunk demo](assets/bunk_demo.gif)\n\n\u003c/div\u003e\n\n---\n\nbunk is a terminal multiplexer written in Go. Each pane has its own PTY. It's been used daily with Copilot CLI, Claude Code, btop, vim, and other TUI apps.\n\n## Features\n\n- Split panes (F1) - direction chosen by pixel cell aspect ratio, not column count\n- Context-aware split (Alt+F1) - opens a new shell in the same container, SSH host, or sudo\n- Zoom (F12) - fullscreen toggle for the active pane; other panes stay open\n- Content reflow - text rewraps at the new column width on every split or resize\n- Per-pane scrollback (10 000 lines by default) with Shift+PgUp/PgDn, preserved through vim and other alt-screen apps\n- Incremental search (Ctrl+F) across live output and scrollback\n- Copy/paste with Ctrl+C / Ctrl+V (Ctrl+C passes through when no selection is active)\n- Mouse: click to focus, drag to select, double-click word, scroll wheel; Shift overrides app mouse mode\n- Status badges: container name, SSH host, sudo, scroll depth\n- Themes: `terminal` (inherit from host), `default`, `solarized-dark`, `dracula`, `nord`\n\n## Installation\n\n```bash\ngrm install jsnjack/bunk\n```\n\nOr grab a binary from [Releases](https://github.com/jsnjack/bunk/releases).\n\n## Auto-launch\n\nAdd to `~/.bashrc` or `~/.zshrc`:\n\n```bash\nif [[ -t 1 ]] \u0026\u0026 [[ -z \"$BUNK\" ]] \u0026\u0026 [[ -z \"$SSH_TTY\" ]] \u0026\u0026 command -v bunk \u0026\u003e/dev/null; then\n    exec bunk\nfi\n```\n\n`BUNK=1` is set in every pane to prevent recursion.\n\n## Key Bindings\n\n| Key | Action |\n|-----|--------|\n| `F1` | Split pane (taller than wide → splits top/bottom; wider than tall → splits left/right) |\n| `Alt+F1` | Split with a new shell in the same context (SSH / container / sudo) |\n| `F12` | Toggle fullscreen zoom |\n| `Alt+←↑→↓` | Navigate between panes |\n| `Shift+PgUp` / `Shift+PgDn` | Scroll history |\n| `Ctrl+F` | Search (Enter / Ctrl+N = next, Ctrl+P = prev, Esc = exit) |\n| `Ctrl+C` | Copy selection; passes `^C` through if nothing is selected |\n| `Ctrl+V` | Paste |\n| `Ctrl+Q` | Quit |\n| `Ctrl+D` / `exit` | Close active pane |\n| Mouse drag | Select text (hold Shift to override app mouse mode) |\n| Double-click | Select word |\n| Drag to edge | Auto-scroll into history while selecting |\n\n## Context-aware splitting (`Alt+F1`)\n\n`F1` always opens a plain host shell. `Alt+F1` opens a new shell in the same context as the current pane.\n\nSupported contexts: Podman, Docker, LXD/LXC, Incus, Toolbox, Distrobox, SSH, sudo/su.\n\n## Status badges\n\nShown in the top-right corner of each pane:\n\n| Badge | Meaning |\n|---|---|\n| `⬡ mycontainer` | Podman / Docker / LXD / LXC / Incus container |\n| `▣ my-toolbox` | Toolbox or Distrobox container |\n| `⇄ myserver.com` | SSH session |\n| `sudo` / `su` | Elevated shell |\n| `ZOOM` | Pane is in fullscreen zoom mode (`F12`) |\n| `-42` | Scrolled back 42 lines |\n| `COPIED` | Selection copied to clipboard |\n\n## Configuration\n\n```bash\nbunk config init    # writes ~/.config/bunk/config.toml\n```\n\n```toml\n# Built-in themes: terminal, default, solarized-dark, dracula, nord\n# \"terminal\" inherits all colours from the host terminal emulator.\ntheme = \"default\"\n\n# Per-pane scrollback limit (default: 10 000 lines).\n# scrollback = 10000\n\n# Log destination - only written when --debug or --trace is passed.\n# log_file = \"/tmp/bunk.log\"\n\n# Cell aspect ratio (height / width). Controls split direction.\n# Default 2.25 suits most monospace fonts.\n# cell_aspect = 2.25\n\n[keybindings]\nsplit         = \"f1\"\nsplit_context = \"alt+f1\"\nzoom          = \"f12\"\nquit          = \"ctrl+q\"\ncopy          = \"ctrl+c\"\npaste         = \"ctrl+v\"\nsearch        = \"ctrl+f\"\n\n[ui]\n# Hex colour overrides (\"#RRGGBB\"). Empty = use theme default.\nactive_border   = \"\"\ninactive_border = \"\"\nscrollbar_thumb = \"\"\nscrollbar_track = \"\"\n```\n\n## CLI flags\n\n```\nbunk [flags]\nbunk config init [--force]\n\nFlags:\n  --config string    Config file path (default ~/.config/bunk/config.toml)\n  --theme  string    Override theme name\n  --debug            Debug logging\n  --trace            Trace logging (includes raw PTY bytes)\n```\n\n## Debugging\n\nIf your shell auto-launches bunk from `.bashrc` / `.zshrc`, use this workflow:\n\n```bash\n# 1) Open a terminal that does NOT auto-exec bunk\nBUNK=1 gnome-terminal\n\n# 2) From that terminal, run the local binary directly\nBUNK= ./bunk\n\n# (or: BUNK= ./bunk --trace for detailed logs of all input/output)\n```\n\nOr use the Makefile shortcut — builds the local binary, resets `/tmp/bunk.log`, and opens a new terminal with trace logging in one step:\n\n```bash\nmake run\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjsnjack%2Fbunk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjsnjack%2Fbunk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjsnjack%2Fbunk/lists"}