Skip to content

vikgmdev/forgetty

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

218 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Forgetty icon

Forgetty

A modern terminal emulator for Linux with workspaces, session persistence, and native rendering quality.

MIT License Linux Beta Built with Claude Code

Screenshots coming soon — see CHANGELOG.md for what's shipped.

⚠️ Active development — pre-release. Forgetty v0.1.0-beta is the first public preview. Expect breaking changes, rough edges, and missing features. Not recommended for production use. Bug reports very welcome.

Forgetty is a terminal emulator for Linux built on Ghostty's VT engine (libghostty-vt) and native GTK4 rendering. It matches Ghostty's text quality pixel-for-pixel, then adds what's missing from every Linux terminal: workspaces that persist across reboots, session restore, a live theme browser with 486 themes, and AI-native integrations for developers who work with coding agents daily.


Features

Native rendering quality

GTK4 + Pango/FreeType — the same text rendering stack as Ghostty on Linux. Subpixel antialiasing, Fontconfig font discovery, full IME support. Powered by libghostty-vt: SIMD-optimized VT parsing, Kitty keyboard protocol, Unicode grapheme clustering, text reflow. No compromises on terminal correctness.

Tabs and split panes

Tabs with CWD-based titles that update automatically. Horizontal and vertical splits with independent shells. Navigate panes with Alt+Arrow. Each pane has its own scrollback, search state, zoom level, and cursor.

486 color themes with live preview

Browse and switch themes from the appearance sidebar (Ctrl+,). All 485 themes from iTerm2-Color-Schemes are bundled, plus you can drop your own into ~/.config/forgetty/themes/. Arrow keys cycle through themes with live preview on your actual terminal content — Enter to keep, Escape to revert.

Session persistence

Close your laptop, reopen it, and everything is exactly where you left it — tabs, splits, working directories, scroll position. Auto-saves in the background. You never lose your terminal layout again.

Workspaces

Named workspaces for different projects. Each workspace has its own set of tabs, splits, and layout. Switch between them instantly. Workspaces persist across restarts just like sessions.

Search across scrollback

Ctrl+Shift+F opens per-pane search. All matches highlighted with an "N of M" count. Enter/Shift+Enter navigate forward and backward with wrap-around. Viewport auto-scrolls to center each match.

AI-native integrations

For developers working with AI coding agents daily:

  • Agent notifications — colored ring on pane border, badge on the tab, and desktop notification when a background agent needs attention. No more hunting through tabs.
  • Smart clipboard — strips box-drawing characters, trailing whitespace, and normalizes line endings automatically. Copy from Claude Code or any TUI app and paste clean text.
  • Socket API — JSON-RPC over Unix socket. Automate Forgetty from scripts, editors, or AI agents — create tabs, send input, read output, manage workspaces programmatically.

Everything else

  • URL detection — hover highlights URLs, Ctrl+Click opens in browser
  • Font zoomCtrl+=/Ctrl+- per pane, grid reflows correctly
  • Cursor styles — block, bar, underline, hollow block; blink; respects DECSCUSR
  • Bell modes — visual flash, audio beep, both, or none
  • Config hot reload — edit config.toml, changes apply instantly to all panes
  • Right-click context menu — copy, paste, select all, search, open URL
  • Command paletteCtrl+Shift+P for quick access to all actions
  • Multi-instance — each forgetty invocation is a fully independent window
  • Desktop integration.desktop entry, SVG icon, GNOME Activities search
  • CLI flags--working-directory, -e (execute command), --class, --config-file

Forgetty vs the rest

Ghostty Warp Terminator GNOME Terminal Forgetty
Rendering Pango/FreeType GPU VTE VTE Pango/FreeType
VT engine libghostty Custom VTE VTE libghostty-vt
Tabs + splits Yes Yes Yes Tabs only Yes
Session persistence No Partial No No Full
Workspaces No No Layouts (manual) No Yes
Themes ~20 Limited ~10 ~10 486 + live preview
Agent notifications No No No No Yes
Smart copy No Some No No Yes
Socket API No No D-Bus (limited) No JSON-RPC
Config hot reload Yes N/A Partial No Yes
Open source Yes No Yes Yes Yes (MIT)

Install

DEB package (Ubuntu/Debian)

# Download from GitHub Releases
sudo dpkg -i forgetty_0.1.0-beta_amd64.deb

Install script (any Linux)

git clone https://github.com/vikgmdev/forgetty.git
cd forgetty
cargo build --release
./install.sh

Installs binary to /usr/local/bin/, shared library to /usr/local/lib/, desktop entry and icon to ~/.local/share/. Uninstall with ./uninstall.sh.

Keyboard shortcuts

Action Shortcut
New tab Ctrl+Shift+T
Close pane/tab Ctrl+Shift+W
Split right Alt+Shift+=
Split down Alt+Shift+-
Navigate panes Alt+Arrow
Copy Ctrl+Shift+C
Paste Ctrl+Shift+V
Search Ctrl+Shift+F
Zoom in / out / reset Ctrl+= / Ctrl+- / Ctrl+0
Appearance sidebar Ctrl+,
Command palette Ctrl+Shift+P
Keyboard shortcuts F1
Quit Ctrl+Shift+Q

Configuration

Forgetty is configured via ~/.config/forgetty/config.toml. The config file is created automatically on first launch with sensible defaults. Changes apply instantly (hot reload).

font_family = "JetBrains Mono"
font_size = 13.0
theme = "Catppuccin Mocha"
scrollback_lines = 10000
cursor_style = "block"      # block | bar | underline | block_hollow
bell_mode = "visual"         # visual | audio | both | none
# shell = "/bin/zsh"         # default: your login shell

Or use the appearance sidebar (Ctrl+,) to change theme, font, and size with live preview.

Building from Source

Prerequisites

Tool Version Notes
Rust stable Install via rustup.rs
Zig 0.15+ Builds libghostty-vt (download)
GTK4 4.14+ sudo apt install libgtk-4-dev libadwaita-1-dev

Tip: If Zig isn't on your $PATH, set ZIG_PATH to its location.

Build

git clone --recursive https://github.com/vikgmdev/forgetty.git
cd forgetty
cargo build --release
cargo run --release

The release binary is at target/release/forgetty.

Run the dev build safely (sandbox)

If you have Forgetty already installed (via .deb or install.sh) and want to test your local changes without touching your daily-driver state, use ./launch-dev.sh. It runs target/release/forgetty inside an XDG-isolated sandbox at /tmp/forgetty-dev/ — separate sessions, byte logs, identity key, and socket. Your installed daemon's state under ~/.local/share/forgetty/ is untouched.

./launch-dev.sh             # normal launch in the sandbox
./launch-dev.sh --stop      # cleanly stop dev daemons (production untouched)
./launch-dev.sh --fresh     # stop + wipe sandbox + relaunch
./launch-dev.sh --clean     # stop + wipe sandbox + exit

socat is required for --stop (Debian/Ubuntu: sudo apt install socat).

Running tests

cargo test --workspace

Architecture

The daemon is a byte pipe. The client is a terminal. Each Forgetty window runs its own forgetty-daemon process that owns PTY processes, session persistence, and networking. The GTK client owns the terminal engine — VT parsing, screen buffer, scrollback, search, selection, rendering. They communicate over a Unix socket: JSON-RPC for control (create tab, resize, subscribe), length-prefixed binary frames for the raw PTY byte stream.

  • Closing the window doesn't kill your processes — the daemon keeps them alive
  • Sessions persist in ~/.local/share/forgetty/sessions/ and restore automatically on next launch
  • Multi-window — each window is fully independent with its own daemon, socket, and session file
  • Cross-device — the daemon accepts remote clients over iroh QUIC, so an Android phone or a second machine can attach to a desktop daemon as a full renderer (pairing required)

Portable core, native UI. The shared Rust crates (VT engine bindings, core types, config, transport) are platform-independent. Porting to Windows or Android means writing a native UI layer that consumes those crates — not reimplementing the terminal.

┌──────────────────────────────────────────────────────┐
│  Client (terminal engine + native UI)                │
│  Linux:   GTK4 + libadwaita (gtk4-rs)    ← current   │
│  Windows: native shell                   ← planned    │
│  Android: Jetpack Compose + Rust JNI     ← planned    │
├──────────────────────────────────────────────────────┤
│  Shared Rust crates (portable)                       │
│  forgetty-vt        libghostty-vt FFI (VT parsing)   │
│  forgetty-core      Shared types, errors             │
│  forgetty-config    Config, 486 themes, defaults     │
│  forgetty-watcher   Config file hot reload           │
├──────────────────────────────────────────────────────┤
│  Daemon (headless — process + transport)             │
│  forgetty-session   PTY processes + byte-log store   │
│  forgetty-pty       PTY spawn (portable-pty)         │
│  forgetty-workspace Session + workspace JSON         │
│  forgetty-socket    Unix socket: JSON-RPC + frames   │
│  forgetty-sync      iroh QUIC P2P transport          │
├──────────────────────────────────────────────────────┤
│  libghostty-vt.so (Zig, C API — Ghostty project)     │
│  SIMD VT parser, Kitty protocol, Unicode graphemes,  │
│  scrollback, text reflow — proven by millions of     │
│  users via Ghostty                                   │
└──────────────────────────────────────────────────────┘

The decision to use GTK4 instead of wgpu came from learning (the hard way) that GPU-rendered text can never match native Linux quality — no subpixel antialiasing, no Fontconfig, no IME. Pivoting to GTK4 + Pango gave us rendering identical to Ghostty on day one.

See docs/architecture/ARCHITECTURE_DECISIONS.md for the full design rationale.

Roadmap

Next: Windows + WSL support, Android companion app, cross-device sync, web version. See the roadmap in CONTRIBUTING.md for the full plan.

Contributing

Contributions welcome! See CONTRIBUTING.md for build instructions, code style, and the crate map.

License

MIT © 2026 TotemLabsForge, LLC

The story

Forgetty is built by one person — Victor Garcia, a self-taught engineer with 10+ years of experience across backend, blockchain, infrastructure, and security. No company, no funding, no team. Just a developer who got tired of losing his terminal layout every time he closed a window.

The project started in early 2026, born from a simple frustration: every terminal emulator treats sessions as disposable. Close the window, lose your work. I wanted a terminal that remembers — tabs, splits, working directories, scroll position — all restored exactly where I left off. And I wanted it to feel native on Linux, not an Electron wrapper or a GPU experiment.

I'd never written Rust before this project. I used Claude Code as a force multiplier — an AI coding agent that let me move at 10x speed in a language I was learning as I built. The entire codebase, from the daemon architecture to the GTK4 renderer to the 486-theme browser, was built this way: one developer + one AI, shipping a feature-complete terminal in weeks instead of months.

Forgetty is the terminal I wanted to exist. If you work with AI coding agents daily — running Claude Code, Copilot, or Cursor in split panes for hours — you need a terminal that's built for that workflow. That's what this is.

No venture capital. No growth metrics. Just a tool that works.

Follow the journey: @vikgmdev

Acknowledgments

  • Ghostty by Mitchell Hashimoto — libghostty-vt provides the terminal emulation engine. Ghostty's VT correctness and SIMD-optimized parsing are what make Forgetty possible.
  • iTerm2-Color-Schemes — 485 of our 486 bundled themes come from this collection.
  • Claude Code by Anthropic — the AI coding agent that made it possible for a solo developer to build a full terminal emulator in Rust.
  • GTK4, libadwaita, Pango, FreeType — the GNOME platform that gives Forgetty its native rendering quality.
  • The Rust ecosystem — gtk4-rs, portable-pty, serde, toml, clap, and the many crates Forgetty depends on.

About

Daemon-architected GTK4 terminal for Linux, built on the Ghostty VT engine

Topics

Resources

License

Contributing

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors