A blazing-fast, GPU-accelerated terminal that summons to the center of your screen — or drops down Yakuake-style — on a global hotkey.
JeTTY — a terminal (TTY) that moves like a Jet. Raw speed is its first priority, above everything else.
🤝 JeTTY is young and looking for collaborators! If you love terminals, Rust, or GPU rendering, come help shape a fast, beautiful terminal — see Collaborators wanted.
- Features
- Screenshots
- Install
- Keybindings
- Performance
- Architecture
- Collaborators wanted
- Roadmap
- License
- 🚀 Blazing fast — GPU-rendered with
wgpu; ~5.5 ms full-screen frames (144 Hz-ready), ~0 % CPU when idle (damage-driven redraw), 150+ MB/s VT throughput. See the performance budget. - 🎯 Global summon hotkey — press F9 anywhere to bring JeTTY up. Three modes (switchable in settings):
- Center — drops into the middle of your screen.
- Dropdown — slides down from the top edge, full screen width, Yakuake/Guake style, with adjustable width & height.
- Fullscreen — covers the whole monitor it is on (borderless, no display-mode change), with the rounded corners squared off so no desktop shows through at the screen edges.
F11toggles fullscreen on the focused terminal window — the main one or a detached one — without changing the mode; it is a view toggle, so in Fullscreen mode the next summon puts you back. Like every other shortcut,F11is swallowed while an overlay owns the keyboard (command palette, search, hint/copy-mode, a confirmation, inline rename), and the Settings window only listens forEsc. Note that if your window manager fullscreens JeTTY behind our back (its own shortcut or window menu), JeTTY does not hear about it — winit reports no such event — so its idea of the shape can go stale until you pressF11twice.
- ✨ Summon effects — five self-written GPU reveal shaders, selectable in settings: Phosphor Ignition (default — CRT power-on), Bayer Crystallize, Liquid Drop, Focus Pull, or None.
- 📺 Visual effects — an optional CRT mode (curvature, scanlines, shadow-mask, bloom, chromatic aberration, vignette + animated roll/flicker/jitter) and a caret flash/glow, all under a dedicated Effects settings tab. Off by default, so the default look and ~0% idle CPU are untouched.
- 🗂️ Tabs —
Ctrl+Shift+Tnew (opens in the current tab's directory),Ctrl+Shift+Wclose (with confirm),Ctrl+Tab/Ctrl+1‒9switch, double-click to rename, right-click for a Detach / Rename / Close menu. Tabs auto-title from the shell (OSC 0/2 — a manual rename always wins), and inactive tabs show an activity / bell dot. - 🔎 Scrollback search —
Ctrl+Shift+F: incremental, case-insensitive, every visible match highlighted,Enter/F3/Shift+F3to jump older/newer, live3/17counter. - 🔗 Clickable links — hold Ctrl (also ⌘ on macOS) to underline the URL under the pointer, Ctrl+click opens it in your browser — plain-text URLs and OSC 8 hyperlinks.
- 🧭 Shell integration (OSC 133) — opt in with
eval "$(jetty --print-shell-integration zsh)"and JeTTY marks failed commands with a themed bar and jumps between prompts withCtrl+Shift+Z/Ctrl+Shift+X. Never edits your dotfiles; powerlevel10k-aware (POWERLEVEL9K_TERM_SHELL_INTEGRATION=true). - 🔔 Run & Notify — kick off a long build, summon JeTTY away, and it pings you when the command finishes (desktop notification naming the tab + exit code + duration + last output line, plus a taskbar/dock urgency hint) — only when you're not already watching. Optional auto-summon on finish. The summon terminal's superpower.
- 📋 OSC 52 clipboard — copy from inside
ssh/tmux/nvimstraight to your local system clipboard (write by default; remote paste is opt-in for safety). - 🎨 Bring your own theme — drop a
~/.config/jetty/themes/*.tomlpalette and it appears in the picker (and can shadow a built-in). Plus the 22 built-ins. - ♻️ Config hot-reload — edit
~/.config/jetty/config.toml(or a theme file) and JeTTY applies it live, no restart — never clobbering your file. - ⌘ Command palette —
Ctrl+Shift+P(⌘⇧P on macOS) opens a fuzzy, keyboard-first launcher: type to filter every action (new tab, switch theme, toggle effects, jump to prompt, settings…),Enterruns it. The fast way to do anything. - 🖼️ Inline images (Sixel + Kitty) — programs that emit Sixel (
img2sixel,chafa -f sixel, matplotlib's sixel backend,lsix) or speak the Kitty graphics protocol (chafa -f kitty,timg -p kitty,kitten icat --transfer-mode=stream) render a real bitmap right in the grid, GPU-textured, at native size, scrolling with your scrollback. Image previews and plots without leaving the terminal. - ⌨️ Remappable keybindings — a
[keys]table in your config remaps any shortcut (copy, tabs, search, palette, font…) to your muscle memory; unset keys keep the sensible defaults, and it hot-reloads live. Terminal control bytes (Ctrl+C…) are protected. Setting an action to""unbinds it and hands the key back to the shell — e.g.[keys]toggle_fullscreen = ""gives bareF11back to your TUI (it then sends\e[23~again);Shift/Ctrl/Alt+F11reach the shell either way. - 🔤 Hint mode & copy-mode —
Ctrl+Shift+Hlabels every URL / path / git-hash / IP on screen so you can copy it with a keystroke (Alt to open a URL);Ctrl+Shift+Spaceenters a vi-style keyboard copy-mode (hjkl / word motions,v/Vto select,yto yank) — select and copy without ever touching the mouse. - 🪟➡️ Detachable tabs —
Ctrl+Shift+D, the tab's right-click menu, or simply dragging a tab off the bar pops it into its own window (with its own title bar and status strip); reattach withCtrl+Shift+D, the window's right-click menu, closing it, or dropping it back onto the main tab bar. Detached windows have full mouse parity: selection, wheel, scrollbar, middle-click paste. - 🎨 22 built-in themes — Catppuccin (Mocha/Macchiato), Tokyo Night, Gruvbox, Dracula, Onyx, Nord, Solarized (dark/light), One Dark, Monokai (+Pro), Everforest, Rosé Pine, Kanagawa, Material, Ayu (dark/mirage), Tomorrow Night, Oceanic Next, GitHub Dark, Palenight — exact community palettes, picked from a scrollable dropdown with live color previews. Every UI surface re-skins with the active theme.
- 🪟 Custom-decorated window — borderless client-side decorations, our own title bar, rounded corners (radius slider), runtime opacity.
- 🔤 Live font control — change font size (
Ctrl + +/-/0) and family (any installed monospace) at runtime, no restart. - 📋 Selection & clipboard — drag to select (auto-copies), Shift+drag to select even inside mouse-aware TUIs (vim/htop/tmux/Claude Code), right-click Copy / Paste / Select All menu,
Ctrl+Shift+C/V, middle-click paste, bracketed-paste aware. - ⚙️ Settings dialog —
Ctrl+Shift+Popens a movable dialog (theme, opacity, corner radius, summon effect, window mode, dropdown size, tab-bar position, scrollback size, shell, focus auto-hide, welcome splash, performance HUD, font) — all persisted to~/.config/jetty/config.toml. - 📊 Live performance HUD — an optional tab-bar overlay showing frame ms · fps · CPU% · VT MB/s in real time, and an honest "idle" state when the app settles (never forces a redraw — idle stays ~0% CPU). Toggle with
show_perf_hud. - 👋 Welcome overlay — a neofetch-style splash on first launch (accent ASCII logo + version/backend), dismissed on the first key/click/Esc. Toggle with
show_welcome. - 🖥️ Desktop-independent — X11 and Wayland, KDE / GNOME / any compositor, every distro. No DE-specific code, no compositor libraries.
🅱️ Full text attributes — bold, italic, and every underline style: single, double, dotted, dashed, and undercurl (with per-run colors, so nvim/LSP diagnostics render their red squiggles), plus strikethrough. Monospace alignment is preserved (glyph advances snap to the cell grid). Cursor shape follows the shell: block / beam / underline (DECSCUSR), hollow when unfocused.- ✅ A real terminal — true-color, answers host queries (DSR/DA), proper
TERM, window resize with grid reflow, configurable scrollback (1k–100k lines), Ctrl+D closes cleanly.
| Catppuccin Mocha | Tokyo Night |
|---|---|
![]() |
![]() |
| Gruvbox Dark | Dracula |
![]() |
![]() |
| Onyx | Settings — 22 themes, live previews |
![]() |
![]() |
| CRT effect (curvature · scanlines · bloom · vignette) | Summon effect (Phosphor Ignition) |
|---|---|
![]() |
![]() |
| Live perf HUD | |
|---|---|
![]() |
JeTTY runs on Linux (X11 / Wayland, Vulkan) and macOS (Metal). Building from source needs only the Rust toolchain and works on both.
# 1. Install Rust (skip if you already have it)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh && source "$HOME/.cargo/env"
# 2. Build + run
git clone https://github.com/bozdemir/JeTTY.git && cd JeTTY
cargo build --release
./target/release/jettyRenders through Metal. Summon with F9 — on Mac keyboards where the function-row keys default to media actions, press fn+F9 so the OS delivers F9. You can also bind jetty --toggle to a shortcut via a launcher (the first press launches JeTTY; each subsequent press toggles the running instance via the single-instance socket). A locally built binary is not quarantined, so there's no Gatekeeper prompt. (Prebuilt .app / .dmg are on the roadmap.)
cargo build --release
sh scripts/make-macos-app.sh # builds JeTTY.app with the Dock/Finder icon
open JeTTY.app # run the bundle, NOT ./target/release/jettyNote: the bare binary cannot show a Dock icon on macOS (winit limitation); the
.appbundle is required. If the icon appears stale in the Dock, runkillall Dockonce to flush the icon cache.
curl -fsSL https://raw.githubusercontent.com/bozdemir/JeTTY/main/install.sh | shInstalls to ~/.local/bin by default. The script verifies the published SHA256SUMS.txt checksum before installing. For a system-wide install:
curl -fsSL https://raw.githubusercontent.com/bozdemir/JeTTY/main/install.sh | JETTY_PREFIX=/usr/local sudo -E shAlso available: a launcher entry. Or grab a .deb / AppImage from the latest release:
sudo apt install ./jetty_*_amd64.deb # Debian / Ubuntu
chmod +x JeTTY-*-x86_64.AppImage && ./JeTTY-*-x86_64.AppImage # any distrogit clone https://github.com/bozdemir/JeTTY.git && cd JeTTY
cargo build --release && ./target/release/jettyPrebuilt artifacts (
.deb, AppImage, tarball, checksums) are published by CI when av*tag is pushed — Linux x86_64 today; macOS prebuilt builds are on the roadmap. Until then, macOS users build from source (above).
- X11 —
F9works immediately, no setup. - Wayland — Wayland routes global shortcuts through the compositor, so bind
jetty --toggleto a key (first press launches JeTTY; each press after toggles the running instance via the single-instance socket;--show/--hideset the state explicitly). Seedocs/global-hotkey.md. (Note: in Dropdown mode, top-edge anchoring relies on window positioning, which the compositor controls on Wayland — it works fully on X11.)
| Key | Action |
|---|---|
F9 |
Summon / hide JeTTY (global; fn+F9 on macOS) |
Ctrl+Shift+P |
Open settings dialog |
Ctrl+Shift+T |
New tab |
Ctrl+Shift+W |
Close tab (with confirm) |
Ctrl+Tab / Ctrl+Shift+Tab |
Next / previous tab |
Ctrl+Shift+D |
Detach tab into its own window / reattach |
F11 |
Toggle fullscreen (whole monitor) for the focused window |
Cmd+Ctrl+F (macOS) |
Same — macOS also seeds this, because bare F11 there is Mission Control's "Show Desktop" (and Volume Down on Apple keyboards without Use F1, F2… as standard function keys) |
| Drag tab off the bar | Detach (drop the window on the bar to reattach) |
| Right-click tab | Detach / Rename / Close menu |
Ctrl+1‒9 |
Jump to tab |
Ctrl + + / - / 0 |
Font size up / down / reset |
Ctrl+Shift + + / - |
Opacity up / down |
| Left-drag | Select text (auto-copies) |
| Shift+drag | Select text over mouse-aware apps (vim/htop/tmux/Claude Code) |
| Right-click | Copy / Paste / Select All / Clear / Close Tab menu |
Ctrl+Shift+C / Ctrl+Shift+V |
Copy / Paste |
Ctrl+D |
Close the shell (and window) |
Theme is chosen by clicking a theme card in the Settings dialog (Ctrl+Shift+P) — there is no theme keybinding.
Measured headlessly on an Intel Arc iGPU at 1920×1200 (cargo run --release -p jetty-app --bin jetty-bench):
| Metric | JeTTY | Target |
|---|---|---|
| Frame render (full screen) | 5.5 ms (180 fps cap) | ≤ 6.9 ms (144 Hz) |
| Idle CPU | ~0 % | 0 % |
| Per-frame snapshot (11k cells) | 0.047 ms | ≤ 1 ms |
| VT throughput | 154 MB/s | ≥ 150 MB/s |
Speed is a gated requirement, not an afterthought — see docs/perf-budget.md.
A small Cargo workspace with clear boundaries:
| Crate | Responsibility |
|---|---|
jetty-core |
VT model (alacritty_terminal), PTY, themes, grid snapshot |
jetty-render |
GPU layers — text (glyphon/cosmic-text), quads, panel, menu, summon-effect shaders |
jetty-platform |
Window creation (winit), raw-window-handle plumbing |
jetty-app |
Event loop, input, clipboard, tabs, settings, hotkey, window modes, the binary |
JeTTY is in active early development and we're looking for collaborators. Whether you want to own a feature, fix a bug, or just trade ideas — you're welcome, at any experience level.
Great places to jump in right now:
- Native Wayland global shortcut (XDG GlobalShortcuts portal)
- Multi-monitor awareness & per-monitor dropdown placement
- More summon effects / themes / visual polish
- Faster cold start
- Packaging (PPA, AUR, Flatpak research), docs
How to get involved: open an issue or discussion, or send a pull request. New to the code? The architecture section is a good place to start.
- Native Wayland global shortcut via the XDG GlobalShortcuts portal
- Multi-monitor awareness
- Launchpad PPA (
apt install jetty) + AUR package - Faster cold start
- More summon effects and themes
MIT — see LICENSE.








