{"id":50092618,"url":"https://github.com/reddimus/kettle","last_synced_at":"2026-06-06T02:04:27.106Z","repository":{"id":358799804,"uuid":"1243128350","full_name":"Reddimus/kettle","owner":"Reddimus","description":"Fast cross-platform GPU terminal emulator in Rust — Terminator splits, Ghostty themes, bundled Nerd Font","archived":false,"fork":false,"pushed_at":"2026-05-30T04:35:41.000Z","size":5700,"stargazers_count":2,"open_issues_count":5,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-30T06:20:04.321Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Reddimus.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"docs/ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":"NOTICE","maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-19T04:29:56.000Z","updated_at":"2026-05-30T04:32:52.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Reddimus/kettle","commit_stats":null,"previous_names":["reddimus/kettle"],"tags_count":73,"template":false,"template_full_name":null,"purl":"pkg:github/Reddimus/kettle","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Reddimus%2Fkettle","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Reddimus%2Fkettle/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Reddimus%2Fkettle/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Reddimus%2Fkettle/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Reddimus","download_url":"https://codeload.github.com/Reddimus/kettle/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Reddimus%2Fkettle/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33718446,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-31T02:00:06.040Z","response_time":95,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":[],"created_at":"2026-05-23T01:12:21.082Z","updated_at":"2026-05-31T04:01:01.911Z","avatar_url":"https://github.com/Reddimus.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# kettle 🫖\n\n[![CI](https://github.com/Reddimus/kettle/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/Reddimus/kettle/actions/workflows/ci.yml)\n[![Audit](https://github.com/Reddimus/kettle/actions/workflows/audit.yml/badge.svg?branch=main)](https://github.com/Reddimus/kettle/actions/workflows/audit.yml)\n[![cargo-deny](https://github.com/Reddimus/kettle/actions/workflows/deny.yml/badge.svg?branch=main)](https://github.com/Reddimus/kettle/actions/workflows/deny.yml)\n[![cargo-machete](https://github.com/Reddimus/kettle/actions/workflows/machete.yml/badge.svg?branch=main)](https://github.com/Reddimus/kettle/actions/workflows/machete.yml)\n[![Latest release](https://img.shields.io/github/v/release/Reddimus/kettle?label=release\u0026color=blue)](https://github.com/Reddimus/kettle/releases/latest)\n[![MSRV](https://img.shields.io/badge/MSRV-1.89-blue?logo=rust)](Cargo.toml)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n\n**Works out of the box** — bundled Nerd Font, ~512 themes, Terminator\nkeybinds, right-click Preferences. **GPU-accelerated** with `wgpu` so\nsplits and scrollback stay smooth on busy panes. **Cross-platform**:\none binary on Linux, macOS, and Windows 11.\n\nA fast, GPU-accelerated terminal emulator written in Rust — combining\nthe best ideas of **Ghostty**, **Terminator**, **kitty**, **Alacritty**\nand **WezTerm** into one tool.\n\n![kettle — TokyoNight Night, two-pane split with the redesigned tab bar](docs/images/kettle-hero.png)\n\n\u003e **Status: v2.0 — production-ready** on Linux, macOS and Windows 11.\n\u003e See [latest release](https://github.com/Reddimus/kettle/releases/latest)\n\u003e for prebuilt binaries (Linux tarball with installer + `.sha256`\n\u003e sidecar, macOS universal `.app`, Windows zip with embedded `.ico`).\n\u003e Eight CI workflows gate every push: build/test on all three OSes →\n\u003e `cargo doc -D warnings` → headless GPU smoke → `--screenshot-menu`\n\u003e visual regression → MSRV (Rust 1.89) verify → `cargo audit` →\n\u003e `cargo deny` (licenses + sources + bans) → `cargo machete` (unused\n\u003e deps) → `actionlint` (workflow YAML). See\n\u003e [docs/ROADMAP.md](docs/ROADMAP.md) for what is landing next.\n\n## Highlights\n\n- **GPU rendering** — `wgpu` (Vulkan/Metal/DX12/GL) + a `cosmic-text` glyph\n  atlas, with damage-aware draws.\n- **Battle-tested VT core** — built on `alacritty_terminal` + `vte`, so\n  vim/tmux/neovim/AstroNvim work out of the box (truecolor, undercurl,\n  alt-screen, bracketed paste, mouse, kitty keyboard).\n- **Terminator-style multiplexing** — tabs (clickable tab bar), splits,\n  focus cycling, broadcast/group input (with a yellow active-tab and\n  focused-pane accent so you always know broadcast is on) — with\n  Terminator's default keybindings.\n- **Every Ghostty theme bundled** (~500, from iTerm2-Color-Schemes), default\n  **TokyoNight Night**. Ghostty-compatible `key = value` config with live\n  reload.\n- **Bundled JetBrains Mono Nerd Font** — AstroNvim icons render with zero\n  setup.\n- **Search overlay** — `Ctrl+Shift+F`, real regex with **smart-case**\n  (case-insensitive until you type an uppercase), highlight + cycle.\n- **Hyperlinks** — OSC 8 + URL autodetection, underlined with hover, open\n  with `Ctrl`/`Cmd`+click.\n- **Inline images** — Sixel, kitty graphics, and iTerm2 (OSC 1337) decoded\n  and GPU-composited (`img2sixel`, `kitten icat`, `imgcat`).\n- **Shell integration** — OSC 133 prompt marks; jump between prompts with\n  `Ctrl+Up`/`Ctrl+Down` (see [docs/SHELL-INTEGRATION.md](docs/SHELL-INTEGRATION.md)).\n- **Mouse reporting** — full passthrough so `vim`/`tmux`/`htop`/`fzf` mouse\n  works (X10 + SGR 1006); focus-event reporting (DEC ?1004) too.\n- **Configurable bell** — visual flash and/or window-attention\n  (taskbar/dock urgency); `bell = off|visual|attention|both`.\n- **Polished input** — safe bracketed paste (newline-normalized,\n  injection-guarded), double-click word / triple-click line selection +\n  **Alt-drag rectangular (block) selection**, auto-copy, middle-click\n  paste, focus-aware hollow cursor, configurable blink, visual bell.\n- **Drag-and-drop files** — drop any file onto the window and its\n  shell-quoted path is inserted at the cursor (with a trailing space, so\n  `cat ` + drop + Enter works). Honors broadcast mode.\n- **Session restore** — the tab/split tree and each pane's working directory\n  are saved and restored across launches; new tabs/splits also inherit the\n  focused pane's current directory (OSC 7).\n- **SSH multiplexing** — `Ctrl+Shift+S` opens an SSH launcher (configured\n  `ssh-host` names with fuzzy tab-complete, or any `user@host`); SSH tabs\n  persist across sessions.\n- **Quick-select hints** — `Ctrl+Shift+H` labels every URL / path /\n  git-hash / IP on screen; type a label to open it (URLs) or copy it.\n- **Command palette** — `Ctrl+Shift+K` opens a fuzzy command palette;\n  type to filter every action, `Tab`/`↑↓` to select, `Enter` to run.\n- **Live theme switching** — cycle the ~512 bundled themes at runtime\n  (palette: \"Next/Previous theme\", or `next_theme`/`prev_theme` binds).\n- **Cross-platform** — one codebase for Windows 11, Linux (X11/Wayland) and\n  macOS, via `winit` + `portable-pty` (ConPTY on Windows).\n\n## Install\n\n| OS | Versions | Recommended install |\n|----|----------|---------------------|\n| **Linux** | X11 + Wayland | one-line installer (below) |\n| **macOS** | 11+ — Intel \u0026 Apple Silicon (universal `.app`) | drag-to-Applications (below) |\n| **Windows** | Windows 11 | `install.ps1` from the release `.zip` (below) |\n\nEvery release ships prebuilt binaries on the\n[releases page](https://github.com/Reddimus/kettle/releases/latest)\n(Linux `.tar.gz` + `.sha256`, macOS universal `.app`, Windows `.zip`) — or\nbuild from source.\n\n### Linux — one-line installer (recommended)\n\nDownloads the latest prebuilt binary + XDG launcher + icons and drops\neverything into `~/.local/` (no `sudo`, no Rust toolchain):\n\n```sh\ncurl -fsSL https://raw.githubusercontent.com/Reddimus/kettle/main/scripts/install-online.sh | sh\n```\n\nThen search **\"kettle\"** in GNOME Activities / KDE Krunner / Ubuntu's\nSuper-key, or run `kettle` from any shell on your `$PATH`.\n\nPin a specific version: `KETTLE_VERSION=v2.1.0 sh` instead of `sh`.\nSystem-wide install: `KETTLE_PREFIX=/usr/local sh` (needs write access).\nUninstall later: `~/.local/share/kettle/install.sh --uninstall`.\n\n### macOS\n\nGrab `kettle-macos-universal.zip` from\n[the latest release](https://github.com/Reddimus/kettle/releases/latest),\nunzip, and drag `kettle.app` to `/Applications`. The binary is a true\narm64 + x86_64 universal — runs natively on every Mac.\n\n### Windows 11\n\nGrab `kettle-windows-x86_64.zip` from\n[the latest release](https://github.com/Reddimus/kettle/releases/latest),\nunzip it, and run the bundled installer from the extracted folder:\n\n```powershell\n.\\install.ps1                        # per-user install: Start-menu entry + PATH (no admin)\n.\\install.ps1 -WithShellIntegration  # also wire OSC 133 prompt marks into your $PROFILE\n.\\install.ps1 -Uninstall             # remove it again later\n```\n\nThen press **Win** and type **\"kettle\"** to launch it from the Start menu.\n(If PowerShell blocks the script, run\n`powershell -ExecutionPolicy Bypass -File .\\install.ps1`.) Prefer it\nportable? Skip the installer — just `cd` into the folder and run\n`kettle.exe`.\n\nkettle opens **PowerShell 7+ (`pwsh`)** by default when it's installed —\nthe same default as Windows Terminal — falling back to Windows PowerShell\nthen `cmd.exe`. Set `shell = cmd.exe` (or any program) in your config to\noverride. To use **WSL / Ubuntu**, set `command = wsl.exe -d Ubuntu` — see\n[Launching WSL as your shell](docs/CONFIG.md#launching-wsl--ubuntu-as-your-shell-windows).\n\n### Build from source\n\n```sh\n# Linux build deps (Debian/Ubuntu)\nsudo apt-get install -y pkg-config libfontconfig1-dev libfreetype6-dev \\\n  libx11-dev libxkbcommon-dev libxkbcommon-x11-dev libwayland-dev libxcb1-dev\n\ngit clone https://github.com/Reddimus/kettle \u0026\u0026 cd kettle\ncargo run --release                   # try it\n./scripts/install.sh                  # XDG desktop install\n./scripts/install.sh --uninstall      # undo later\n```\n\nRust ≥ 1.89 (the workspace MSRV). See\n[`docs/INSTALL.md`](docs/INSTALL.md) for packaging details across all\nthree platforms.\n\n## First launch\n\n1. **Run `kettle`** (or launch it from your app menu / Start menu). It\n   opens with the **TokyoNight Night** theme and the bundled JetBrains\n   Mono Nerd Font — zero setup. On Windows it starts **PowerShell 7+**.\n2. **Right-click any pane → Preferences ▸** to toggle the scrollbar,\n   cursor blink, bell, copy-on-select and font size — changes persist\n   instantly to your config.\n3. **Split** with `Ctrl+Shift+O` (top/bottom) or `Ctrl+Shift+E`\n   (left/right), cycle panes with `Ctrl+Shift+N` / `P`, and open a new\n   tab with `Ctrl+Shift+T`.\n4. **Search** the screen with `Ctrl+Shift+F` (regex, smart-case), or open\n   the **command palette** with `Ctrl+Shift+K` to fuzzy-find any action.\n5. **Configure** it:\n   `kettle --print-default-config \u003e ~/.config/kettle/config` (Windows:\n   `%APPDATA%\\kettle\\config`) — edits live-reload the moment you save.\n\n## CLI quick reference\n\n```sh\nkettle --print-default-config \u003e ~/.config/kettle/config   # bootstrap a commented starter config\nkettle --shell-integration bash \u003e\u003e ~/.bashrc              # OSC 133 jump-to-prompt (zsh/fish also supported)\nkettle --print-completions bash \u003e\u003e ~/.bashrc              # tab-complete every kettle flag\nkettle --list-themes        # list every bundled theme (~512)\nkettle --list-keybinds      # print the *effective* keymap (defaults + your overrides + unbinds)\nkettle --list-actions       # list every action name accepted by `keybind = trigger=action`\nkettle --list-ssh-hosts     # print configured `ssh-host = name=target` entries\nkettle --config-path        # show where the config file is read from\nkettle --check-config       # validate config: resolved settings + unknown-key / malformed-value diagnostics\nkettle --gpu-info           # print the wgpu adapter / backend / driver / texture limits (for bug reports)\nkettle --config FILE        # use a specific config file (live-reloaded; error if it doesn't exist)\nkettle -d /path/to/dir      # open the first tab in this directory\nkettle -e htop              # run a command instead of the shell\nkettle -e ssh -t host       # (-e consumes the rest of the args)\nkettle --screenshot OUT.png # render a representative frame offscreen and exit (no window)\n```\n\n## Default keybindings (Terminator-compatible)\n\n| Action | Bind | Action | Bind |\n|---|---|---|---|\n| Split top/bottom | `Ctrl+Shift+O` | New tab | `Ctrl+Shift+T` |\n| Split left/right | `Ctrl+Shift+E` | Close pane | `Ctrl+Shift+W` |\n| Split (auto-pick) | `Ctrl+Shift+A` | New window | `Ctrl+Shift+I` |\n| Focus next/prev pane | `Ctrl+Shift+N` / `P` | Close window | `Ctrl+Shift+Q` |\n| Next/prev tab | `Ctrl+PgDn` / `PgUp` | Move tab left/right | `Ctrl+Shift+PgUp` / `PgDn` |\n| Goto tab 1..9 | `Alt+1..9` | Zoom / unzoom pane | `Ctrl+Shift+X` |\n| Copy / Paste | `Ctrl+Shift+C` / `V` | **Search** | **`Ctrl+Shift+F`** |\n| **SSH launcher** | **`Ctrl+Shift+S`** | **Command palette** | **`Ctrl+Shift+K`** |\n| **Quick-select hints** | **`Ctrl+Shift+H`** | Fullscreen | `F11` |\n| Jump prev/next prompt | `Ctrl+Up` / `Down` | Resize split | `Shift+Arrows` |\n| Directional focus | `Alt+Arrows` | Scroll to top/bottom | `Shift+Home` / `End` |\n| Scroll line / page | `Ctrl+Shift+Up/Down` / `Shift+PgUp/PgDn` | Reset font size | `Ctrl+0` |\n| Font bigger / smaller | `Ctrl+` `+` / `-` | Broadcast on/off | `Super+G` / `Shift+Super+G` |\n| Reload config | `Ctrl+Shift+M` | Reset terminal | `Ctrl+Shift+R` |\n\nFull effective keymap with your `--config` applied: `kettle --list-keybinds`.\n\n\u003e **Tip — right-click anywhere in a pane** for the context menu: Copy /\n\u003e Paste / Split / Close, plus **Theme ▸** (cycle through ~512 bundled\n\u003e themes), **Profile ▸**, and the **Preferences ▸** submenu\n\u003e with one-click toggles for scrollbar mode, cursor blink, copy-on-select,\n\u003e bell mode, mouse-hide, and font size. Settings persist atomically to\n\u003e `~/.config/kettle/config` with a backup at `config.bak`. The menu\n\u003e supports keyboard mnemonics (single letter) and typeahead\n\u003e (multi-char prefix) — see [docs/CONFIG.md](docs/CONFIG.md)\n\u003e \"Editing the config from inside kettle\" for the full toggle map.\n\n## Configuration\n\nkettle reads `$XDG_CONFIG_HOME/kettle/config` (Ghostty syntax). Example:\n\n```ini\ntheme = TokyoNight Night\nfont-family = JetBrainsMono Nerd Font\nfont-size = 13\nbackground-opacity = 1.0\ncursor-style = block\nkeybind = ctrl+shift+t=new_tab\n```\n\nSee [docs/CONFIG.md](docs/CONFIG.md) and the sample at\n[`docs/kettle.example.config`](docs/kettle.example.config).\n\n## Documentation\n\n- [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) — system design + diagrams\n- [docs/RESEARCH.md](docs/RESEARCH.md) — analysis of other terminals \u0026 citations\n- [docs/UX-COMPARISON.md](docs/UX-COMPARISON.md) — cited UI/UX matrix vs Ghostty/kitty/WezTerm/Terminator/Alacritty\n- [docs/INSTALL.md](docs/INSTALL.md) — install per-OS / from source\n- [docs/ROADMAP.md](docs/ROADMAP.md) — what's done / next\n- [docs/TESTING.md](docs/TESTING.md) — test suite + CI\n- [docs/PERFORMANCE.md](docs/PERFORMANCE.md) — measured startup / memory / render numbers\n- [CHANGELOG.md](CHANGELOG.md) — release history\n- [docs/CONFIG.md](docs/CONFIG.md) — every config key\n- [docs/SHELL-INTEGRATION.md](docs/SHELL-INTEGRATION.md) — OSC 133 prompt-mark hooks for bash / zsh / fish\n- [CONTRIBUTING.md](CONTRIBUTING.md) — the audit-cycle pattern + how to land your first change\n\n## License\n\nMIT. Bundled assets, third-party crates kettle consumes (Alacritty's VT\ncore, WezTerm's `portable-pty`, cosmic-text), and the design-source\nprojects kettle cites (kitty's graphics protocol spec, Terminator's\nsplits-and-broadcast convention, Ghostty's config syntax) are all\ncredited in [NOTICE](NOTICE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Freddimus%2Fkettle","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Freddimus%2Fkettle","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Freddimus%2Fkettle/lists"}