{"id":50229251,"url":"https://github.com/vikgmdev/forgetty","last_synced_at":"2026-06-12T09:01:05.645Z","repository":{"id":353530496,"uuid":"1196620817","full_name":"vikgmdev/forgetty","owner":"vikgmdev","description":"Daemon-architected GTK4 terminal for Linux, built on the Ghostty VT engine","archived":false,"fork":false,"pushed_at":"2026-05-05T11:17:42.000Z","size":3236,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-05-05T12:11:30.592Z","etag":null,"topics":["ghostty","gtk4","linux","rust","terminal","terminal-emulator"],"latest_commit_sha":null,"homepage":"https://forgetty.dev","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/vikgmdev.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-30T21:56:52.000Z","updated_at":"2026-05-05T11:17:44.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/vikgmdev/forgetty","commit_stats":null,"previous_names":["vikgmdev/forgetty"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/vikgmdev/forgetty","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vikgmdev%2Fforgetty","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vikgmdev%2Fforgetty/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vikgmdev%2Fforgetty/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vikgmdev%2Fforgetty/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vikgmdev","download_url":"https://codeload.github.com/vikgmdev/forgetty/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vikgmdev%2Fforgetty/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34236552,"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-06-12T02:00:06.859Z","response_time":109,"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":["ghostty","gtk4","linux","rust","terminal","terminal-emulator"],"created_at":"2026-05-26T18:00:25.033Z","updated_at":"2026-06-12T09:01:05.639Z","avatar_url":"https://github.com/vikgmdev.png","language":"Rust","funding_links":[],"categories":["Terminal Apps \u0026 Clients"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/icons/dev.forgetty.Forgetty.svg\" width=\"120\" alt=\"Forgetty icon\"\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eForgetty\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cb\u003eA modern terminal emulator for Linux with workspaces, session persistence, and native rendering quality.\u003c/b\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-MIT-blue.svg\" alt=\"MIT License\"\u003e\u003c/a\u003e\n  \u003cimg src=\"https://img.shields.io/badge/platform-Linux-informational\" alt=\"Linux\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/status-beta-orange\" alt=\"Beta\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/built%20with-Claude%20Code-blueviolet\" alt=\"Built with Claude Code\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cem\u003eScreenshots coming soon — see \u003ca href=\"CHANGELOG.md\"\u003eCHANGELOG.md\u003c/a\u003e for what's shipped.\u003c/em\u003e\n\u003c/p\u003e\n\n\u003e ⚠️ **Active development — pre-release.** Forgetty v0.1.0-beta is the first\n\u003e public preview. Expect breaking changes, rough edges, and missing features.\n\u003e Not recommended for production use. Bug reports very welcome.\n\nForgetty is a terminal emulator for Linux built on\n[Ghostty](https://ghostty.org/)'s VT engine ([libghostty-vt](https://github.com/ghostty-org/ghostty))\nand native GTK4 rendering. It matches Ghostty's text quality pixel-for-pixel,\nthen adds what's missing from every Linux terminal: workspaces that persist\nacross reboots, session restore, a live theme browser with 486 themes, and\nAI-native integrations for developers who work with coding agents daily.\n\n---\n\n## Features\n\n### Native rendering quality\n\nGTK4 + Pango/FreeType — the same text rendering stack as Ghostty on Linux.\nSubpixel antialiasing, Fontconfig font discovery, full IME support. Powered by\nlibghostty-vt: SIMD-optimized VT parsing, Kitty keyboard protocol, Unicode\ngrapheme clustering, text reflow. No compromises on terminal correctness.\n\n### Tabs and split panes\n\nTabs with CWD-based titles that update automatically. Horizontal and vertical\nsplits with independent shells. Navigate panes with `Alt+Arrow`. Each pane has\nits own scrollback, search state, zoom level, and cursor.\n\n### 486 color themes with live preview\n\nBrowse and switch themes from the appearance sidebar (`Ctrl+,`). All 485 themes\nfrom [iTerm2-Color-Schemes](https://github.com/mbadolato/iTerm2-Color-Schemes)\nare bundled, plus you can drop your own into `~/.config/forgetty/themes/`. Arrow\nkeys cycle through themes with live preview on your actual terminal content —\nEnter to keep, Escape to revert.\n\n### Session persistence\n\nClose your laptop, reopen it, and everything is exactly where you left it —\ntabs, splits, working directories, scroll position. Auto-saves in the\nbackground. You never lose your terminal layout again.\n\n### Workspaces\n\nNamed workspaces for different projects. Each workspace has its own set of tabs,\nsplits, and layout. Switch between them instantly. Workspaces persist across\nrestarts just like sessions.\n\n### Search across scrollback\n\n`Ctrl+Shift+F` opens per-pane search. All matches highlighted with an \"N of M\"\ncount. Enter/Shift+Enter navigate forward and backward with wrap-around.\nViewport auto-scrolls to center each match.\n\n### AI-native integrations\n\nFor developers working with AI coding agents daily:\n\n- **Agent notifications** — colored ring on pane border, badge on the tab, and\n  desktop notification when a background agent needs attention. No more hunting\n  through tabs.\n- **Smart clipboard** — strips box-drawing characters, trailing whitespace, and\n  normalizes line endings automatically. Copy from Claude Code or any TUI app\n  and paste clean text.\n- **Socket API** — JSON-RPC over Unix socket. Automate Forgetty from scripts,\n  editors, or AI agents — create tabs, send input, read output, manage\n  workspaces programmatically.\n\n### Everything else\n\n- **URL detection** — hover highlights URLs, `Ctrl+Click` opens in browser\n- **Font zoom** — `Ctrl+=`/`Ctrl+-` per pane, grid reflows correctly\n- **Cursor styles** — block, bar, underline, hollow block; blink; respects DECSCUSR\n- **Bell modes** — visual flash, audio beep, both, or none\n- **Config hot reload** — edit `config.toml`, changes apply instantly to all panes\n- **Right-click context menu** — copy, paste, select all, search, open URL\n- **Command palette** — `Ctrl+Shift+P` for quick access to all actions\n- **Multi-instance** — each `forgetty` invocation is a fully independent window\n- **Desktop integration** — `.desktop` entry, SVG icon, GNOME Activities search\n- **CLI flags** — `--working-directory`, `-e` (execute command), `--class`, `--config-file`\n\n## Forgetty vs the rest\n\n| | Ghostty | Warp | Terminator | GNOME Terminal | Forgetty |\n|---|---|---|---|---|---|\n| **Rendering** | Pango/FreeType | GPU | VTE | VTE | Pango/FreeType |\n| **VT engine** | libghostty | Custom | VTE | VTE | libghostty-vt |\n| **Tabs + splits** | Yes | Yes | Yes | Tabs only | Yes |\n| **Session persistence** | No | Partial | No | No | **Full** |\n| **Workspaces** | No | No | Layouts (manual) | No | **Yes** |\n| **Themes** | ~20 | Limited | ~10 | ~10 | **486 + live preview** |\n| **Agent notifications** | No | No | No | No | **Yes** |\n| **Smart copy** | No | Some | No | No | **Yes** |\n| **Socket API** | No | No | D-Bus (limited) | No | **JSON-RPC** |\n| **Config hot reload** | Yes | N/A | Partial | No | **Yes** |\n| **Open source** | Yes | No | Yes | Yes | **Yes (MIT)** |\n\n## Install\n\n### DEB package (Ubuntu/Debian)\n\n```sh\n# Download from GitHub Releases\nsudo dpkg -i forgetty_0.1.0-beta_amd64.deb\n```\n\n### Install script (any Linux)\n\n```sh\ngit clone https://github.com/vikgmdev/forgetty.git\ncd forgetty\ncargo build --release\n./install.sh\n```\n\nInstalls binary to `/usr/local/bin/`, shared library to `/usr/local/lib/`,\ndesktop entry and icon to `~/.local/share/`. Uninstall with `./uninstall.sh`.\n\n## Keyboard shortcuts\n\n| Action | Shortcut |\n|--------|----------|\n| New tab | `Ctrl+Shift+T` |\n| Close pane/tab | `Ctrl+Shift+W` |\n| Split right | `Alt+Shift+=` |\n| Split down | `Alt+Shift+-` |\n| Navigate panes | `Alt+Arrow` |\n| Copy | `Ctrl+Shift+C` |\n| Paste | `Ctrl+Shift+V` |\n| Search | `Ctrl+Shift+F` |\n| Zoom in / out / reset | `Ctrl+=` / `Ctrl+-` / `Ctrl+0` |\n| Appearance sidebar | `Ctrl+,` |\n| Command palette | `Ctrl+Shift+P` |\n| Keyboard shortcuts | `F1` |\n| Quit | `Ctrl+Shift+Q` |\n\n## Configuration\n\nForgetty is configured via `~/.config/forgetty/config.toml`. The config file is\ncreated automatically on first launch with sensible defaults. Changes apply\ninstantly (hot reload).\n\n```toml\nfont_family = \"JetBrains Mono\"\nfont_size = 13.0\ntheme = \"Catppuccin Mocha\"\nscrollback_lines = 10000\ncursor_style = \"block\"      # block | bar | underline | block_hollow\nbell_mode = \"visual\"         # visual | audio | both | none\n# shell = \"/bin/zsh\"         # default: your login shell\n```\n\nOr use the appearance sidebar (`Ctrl+,`) to change theme, font, and size with live preview.\n\n## Building from Source\n\n### Prerequisites\n\n| Tool | Version | Notes |\n|------|---------|-------|\n| Rust | stable | Install via [rustup.rs](https://rustup.rs/) |\n| Zig | 0.15+ | Builds libghostty-vt ([download](https://ziglang.org/download/)) |\n| GTK4 | 4.14+ | `sudo apt install libgtk-4-dev libadwaita-1-dev` |\n\n\u003e **Tip:** If Zig isn't on your `$PATH`, set `ZIG_PATH` to its location.\n\n### Build\n\n```sh\ngit clone --recursive https://github.com/vikgmdev/forgetty.git\ncd forgetty\ncargo build --release\ncargo run --release\n```\n\nThe release binary is at `target/release/forgetty`.\n\n### Run the dev build safely (sandbox)\n\nIf you have Forgetty already installed (via `.deb` or `install.sh`) and want\nto test your local changes without touching your daily-driver state, use\n`./launch-dev.sh`. It runs `target/release/forgetty` inside an XDG-isolated\nsandbox at `/tmp/forgetty-dev/` — separate sessions, byte logs, identity\nkey, and socket. Your installed daemon's state under `~/.local/share/forgetty/`\nis untouched.\n\n```sh\n./launch-dev.sh             # normal launch in the sandbox\n./launch-dev.sh --stop      # cleanly stop dev daemons (production untouched)\n./launch-dev.sh --fresh     # stop + wipe sandbox + relaunch\n./launch-dev.sh --clean     # stop + wipe sandbox + exit\n```\n\n`socat` is required for `--stop` (Debian/Ubuntu: `sudo apt install socat`).\n\n### Running tests\n\n```sh\ncargo test --workspace\n```\n\n## Architecture\n\n**The daemon is a byte pipe. The client is a terminal.** Each Forgetty window\nruns its own `forgetty-daemon` process that owns PTY processes, session\npersistence, and networking. The GTK client owns the terminal engine — VT\nparsing, screen buffer, scrollback, search, selection, rendering. They\ncommunicate over a Unix socket: JSON-RPC for control (create tab, resize,\nsubscribe), length-prefixed binary frames for the raw PTY byte stream.\n\n- **Closing the window doesn't kill your processes** — the daemon keeps them alive\n- **Sessions persist** in `~/.local/share/forgetty/sessions/` and restore automatically on next launch\n- **Multi-window** — each window is fully independent with its own daemon, socket, and session file\n- **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)\n\n**Portable core, native UI.** The shared Rust crates (VT engine bindings,\ncore types, config, transport) are platform-independent. Porting to Windows\nor Android means writing a native UI layer that consumes those crates — not\nreimplementing the terminal.\n\n```\n┌──────────────────────────────────────────────────────┐\n│  Client (terminal engine + native UI)                │\n│  Linux:   GTK4 + libadwaita (gtk4-rs)    ← current   │\n│  Windows: native shell                   ← planned    │\n│  Android: Jetpack Compose + Rust JNI     ← planned    │\n├──────────────────────────────────────────────────────┤\n│  Shared Rust crates (portable)                       │\n│  forgetty-vt        libghostty-vt FFI (VT parsing)   │\n│  forgetty-core      Shared types, errors             │\n│  forgetty-config    Config, 486 themes, defaults     │\n│  forgetty-watcher   Config file hot reload           │\n├──────────────────────────────────────────────────────┤\n│  Daemon (headless — process + transport)             │\n│  forgetty-session   PTY processes + byte-log store   │\n│  forgetty-pty       PTY spawn (portable-pty)         │\n│  forgetty-workspace Session + workspace JSON         │\n│  forgetty-socket    Unix socket: JSON-RPC + frames   │\n│  forgetty-sync      iroh QUIC P2P transport          │\n├──────────────────────────────────────────────────────┤\n│  libghostty-vt.so (Zig, C API — Ghostty project)     │\n│  SIMD VT parser, Kitty protocol, Unicode graphemes,  │\n│  scrollback, text reflow — proven by millions of     │\n│  users via Ghostty                                   │\n└──────────────────────────────────────────────────────┘\n```\n\nThe decision to use GTK4 instead of wgpu came from learning (the hard way) that\nGPU-rendered text can never match native Linux quality — no subpixel\nantialiasing, no Fontconfig, no IME. Pivoting to GTK4 + Pango gave us rendering\nidentical to Ghostty on day one.\n\nSee `docs/architecture/ARCHITECTURE_DECISIONS.md` for the full design rationale.\n\n## Roadmap\n\n**Next:** Windows + WSL support, Android companion app, cross-device sync,\nweb version. See the roadmap in [CONTRIBUTING.md](CONTRIBUTING.md) for the full plan.\n\n## Contributing\n\nContributions welcome! See [CONTRIBUTING.md](CONTRIBUTING.md) for build\ninstructions, code style, and the crate map.\n\n## License\n\n[MIT](LICENSE) \u0026copy; 2026 TotemLabsForge, LLC\n\n## The story\n\nForgetty is built by one person — [Victor Garcia](https://github.com/vikgmdev),\na self-taught engineer with 10+ years of experience across backend, blockchain,\ninfrastructure, and security. No company, no funding, no team. Just a developer\nwho got tired of losing his terminal layout every time he closed a window.\n\nThe project started in early 2026, born from a simple frustration: every\nterminal emulator treats sessions as disposable. Close the window, lose your\nwork. I wanted a terminal that *remembers* — tabs, splits, working directories,\nscroll position — all restored exactly where I left off. And I wanted it to feel\nnative on Linux, not an Electron wrapper or a GPU experiment.\n\nI'd never written Rust before this project. I used\n[Claude Code](https://claude.ai/claude-code) as a force multiplier — an AI\ncoding agent that let me move at 10x speed in a language I was learning as I\nbuilt. The entire codebase, from the daemon architecture to the GTK4 renderer to\nthe 486-theme browser, was built this way: one developer + one AI, shipping a\nfeature-complete terminal in weeks instead of months.\n\nForgetty is the terminal I wanted to exist. If you work with AI coding agents\ndaily — running Claude Code, Copilot, or Cursor in split panes for hours — you\nneed a terminal that's built for that workflow. That's what this is.\n\nNo venture capital. No growth metrics. Just a tool that works.\n\n**Follow the journey:** [@vikgmdev](https://twitter.com/vikgmdev)\n\n## Acknowledgments\n\n- **[Ghostty](https://ghostty.org/)** by [Mitchell Hashimoto](https://github.com/mitchellh)\n  — libghostty-vt provides the terminal emulation engine. Ghostty's VT\n  correctness and SIMD-optimized parsing are what make Forgetty possible.\n- **[iTerm2-Color-Schemes](https://github.com/mbadolato/iTerm2-Color-Schemes)**\n  — 485 of our 486 bundled themes come from this collection.\n- **[Claude Code](https://claude.ai/claude-code)** by\n  [Anthropic](https://anthropic.com) — the AI coding agent that made it possible\n  for a solo developer to build a full terminal emulator in Rust.\n- **GTK4, libadwaita, Pango, FreeType** — the GNOME platform that gives\n  Forgetty its native rendering quality.\n- **The Rust ecosystem** — gtk4-rs, portable-pty, serde, toml, clap, and the\n  many crates Forgetty depends on.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvikgmdev%2Fforgetty","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvikgmdev%2Fforgetty","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvikgmdev%2Fforgetty/lists"}