{"id":49969353,"url":"https://github.com/xuzhougeng/phantty","last_synced_at":"2026-05-26T05:05:50.539Z","repository":{"id":354940931,"uuid":"1225551985","full_name":"xuzhougeng/phantty","owner":"xuzhougeng","description":"Windows renderer for libghostty-vt","archived":false,"fork":false,"pushed_at":"2026-05-18T05:33:29.000Z","size":4857,"stargazers_count":20,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-18T07:49:13.886Z","etag":null,"topics":["ghostty","terminal","windows"],"latest_commit_sha":null,"homepage":"https://phantty.cc-remote.app/","language":"Zig","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"arya-s/phantty","license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/xuzhougeng.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-04-30T11:53:26.000Z","updated_at":"2026-05-18T05:33:33.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/xuzhougeng/phantty","commit_stats":null,"previous_names":["xuzhougeng/phantty"],"tags_count":64,"template":false,"template_full_name":null,"purl":"pkg:github/xuzhougeng/phantty","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xuzhougeng%2Fphantty","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xuzhougeng%2Fphantty/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xuzhougeng%2Fphantty/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xuzhougeng%2Fphantty/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/xuzhougeng","download_url":"https://codeload.github.com/xuzhougeng/phantty/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xuzhougeng%2Fphantty/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33386159,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-23T04:15:53.637Z","status":"ssl_error","status_checked_at":"2026-05-23T04:15:53.242Z","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":["ghostty","terminal","windows"],"created_at":"2026-05-18T07:13:23.961Z","updated_at":"2026-05-23T07:11:20.306Z","avatar_url":"https://github.com/xuzhougeng.png","language":"Zig","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Phantty\n\nA Windows terminal written in Zig, powered by [libghostty-vt](https://github.com/ghostty-org/ghostty) for terminal emulation.\n\n\u003e [!NOTE]\n\u003e This repository is a fork of [arya-s/phantty](https://github.com/arya-s/phantty),\n\u003e with additional features layered on top: an embedded WebView2 browser panel,\n\u003e a file explorer with Markdown/text/image preview, AI Agent sessions,\n\u003e an opt-in remote-access client,\n\u003e Kitty Graphics image protocol support, and a configurable background image.\n\n## Features\n\n- **Ghostty's terminal emulation** - uses libghostty-vt for VT parsing and terminal state\n- **DirectWrite font discovery** - find system fonts by name, with per-glyph fallback for missing characters\n- **FreeType rendering** - high-quality glyph rasterization with Ghostty-style font metrics\n- **Sprite rendering** - box drawing, block elements, braille patterns, powerline symbols\n- **Theme support** - Ghostty-compatible theme files, 450+ themes built in (default: Poimandres)\n- **Background image and shaders** - wallpaper blending plus Ghostty-compatible GLSL post-processing\n- **Splits and tabs** - vertical/horizontal splits, tab strip, focus-follows-mouse, equalize sizes\n- **File Explorer and previews** - browse local, WSL, and SSH files; preview Markdown/text/images without leaving the terminal\n- **Embedded browser panel** - open web URLs in a side WebView2 panel, with SSH loopback tunneling for profile sessions\n- **AI Agent sessions** - launch an OpenAI-compatible Agent tab directly and configure profiles in Settings\n- **Kitty Graphics protocol** - display inline images and PDFs from remote shells via `imgcat.py` / `pdfcat.py`\n- **Opt-in remote access** - share a session key over a Cloudflare-hosted relay (disabled by default)\n\n\u003e [!NOTE]\n\u003e Phantty is **Windows-only**. On macOS and Linux, use [Ghostty](https://ghostty.org/) instead.\n\n## Documentation\n\n- [Configuration](docs/configuration.md)\n- [File Explorer and previews](docs/file-explorer.md)\n- [AI Agent sessions](docs/ai-agent.md)\n- [Media, background images, and inline remote images](docs/media.md)\n- [Development, architecture, packaging, and releases](docs/development.md)\n- [FAQ](docs/faq.md)\n\n## Building\n\n```powershell\nzig build                         # Debug build for development\nzig build -Doptimize=ReleaseFast  # ReleaseFast build for distribution\nRemove-Item -Recurse -Force .\\zig-out, .\\.zig-cache -ErrorAction SilentlyContinue\n```\n\nThe `Makefile` may still exist as a convenience wrapper, but normal Windows\ndevelopment should use PowerShell and direct `zig` commands.\n\nFor architecture, packaging, and release details, see [Development, architecture, packaging, and releases](docs/development.md).\n\n## Usage\n\n```bash\nphantty.exe [options]\n\nOptions:\n  --font, -f \u003cname\u003e            Set font (default: embedded fallback)\n  --font-style \u003cstyle\u003e         Font weight (default: regular)\n                                Options: thin, extra-light, light, regular,\n                                         medium, semi-bold, bold, extra-bold, black\n  --cursor-style \u003cstyle\u003e       Cursor shape (default: block)\n                                Options: block, bar, underline, block_hollow\n  --cursor-style-blink \u003cbool\u003e  Enable cursor blinking (default: true)\n  --theme \u003cpath\u003e               Load a Ghostty theme file\n  --background-image \u003cpath\u003e    Image file to render behind the terminal\n  --background-opacity \u003c0..1\u003e  Opacity of theme/cell backgrounds (default: 1.0)\n  --background-image-mode \u003cm\u003e  fill | fit | center | tile (default: fill)\n  --window-height \u003crows\u003e       Initial window height in cells (default: 0=auto, min: 4)\n  --window-width \u003ccols\u003e        Initial window width in cells (default: 0=auto, min: 10)\n  --config \u003cpath\u003e              Use this file as the main config\n  --config-path \u003cpath\u003e         Alias for --config\n  --config-file \u003cpath\u003e         Include another config file (prefix ? for optional)\n  --version, -v                Print the Phantty version and exit\n  --show-config-path           Print the resolved main config path\n  --list-fonts                 List available system fonts\n  --list-themes                List available themes\n  --test-font-discovery        Test DirectWrite font discovery\n  --help, -h                   Show help\n```\n\nConfiguration file details are in [Configuration](docs/configuration.md).\n\n## Keyboard shortcuts\n\nDefault chords are implemented in [`src/input.zig`](src/input.zig). Some keys are handled first when a modal overlay is open (command center, session launcher, settings, and similar).\n\nTo confirm the running desktop version, open the command center with `Ctrl+Shift+P`, type `version`, and press Enter.\n\n\n| Shortcut                                                                       | Action                                                                             |\n| ------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------- |\n| **Ctrl+Shift+P**                                                               | Open command center                                                                |\n| **Ctrl+Shift+T**                                                               | New session (session launcher)                                                     |\n| **Ctrl+Shift+N**                                                               | New window                                                                         |\n| **Ctrl+Shift+B**                                                               | Toggle tab sidebar                                                                 |\n| **Ctrl+Shift+O**                                                               | Split to the right                                                                 |\n| **Ctrl+Shift+Alt+E**                                                           | Toggle file explorer sidebar                                                       |\n| Ctrl-click `.md` / `.txt` / image files in terminal output, or double-click in File Explorer | Preview local, WSL, or SSH Markdown/text/images in the right preview panel        |\n| Ctrl+Shift-click file path in SSH terminal output                              | Download the SSH remote file to `%USERPROFILE%\\Downloads`                         |\n| **Ctrl+Shift+W**                                                               | Close focused panel, tab, or window; press again to confirm closing the last panel |\n| **Alt+Enter**                                                                  | Maximize or restore window                                                         |\n| **Ctrl++** / **Ctrl+-**                                                        | Increase / decrease font size                                                      |\n| **Ctrl+Shift+C**                                                               | Copy terminal selection, or copy AI Chat selection/transcript                     |\n| Shift-click terminal text                                                      | Select from the last terminal click anchor                                        |\n| Drag AI answer text                                                            | Select part of an AI answer for `Ctrl+C`                                          |\n| Shift-drag AI answer text                                                      | Select and copy part of an AI answer                                              |\n| **Ctrl+A** in AI Chat                                                          | Select the input text; when the input is empty, select the transcript             |\n| **Ctrl+C** in AI Chat                                                          | Copy the selected AI Chat text, or copy the transcript when nothing is selected   |\n| **D** / **Delete** in Agent History                                            | Delete the selected saved Agent session                                          |\n| Left / Right / Home / End / Delete / Backspace in AI Chat                      | Edit the AI Chat input cursor without clearing the whole draft                    |\n| **Esc** in AI Chat while working                                               | Stop the in-flight AI Chat or Agent request                                      |\n| Right-click a selection                                                        | Copy selection by default; configurable with `right-click-action`                 |\n| **Ctrl+V**                                                                     | Paste text                                                                         |\n| **Ctrl+Shift+V**                                                               | Paste clipboard image                                                              |\n| **Alt** + arrow keys                                                           | Move focus to adjacent panel (spatial)                                             |\n| **Ctrl+Shift+[**                                                               | Focus previous panel (cycle)                                                       |\n| **Ctrl+Shift+]**                                                               | Focus next panel (cycle)                                                           |\n| **Ctrl+Shift+Z**                                                               | Equalize split sizes                                                               |\n| **Ctrl+Tab**                                                                   | Next tab                                                                           |\n| **Ctrl+Shift+Tab**                                                             | Previous tab                                                                       |\n| **Alt+1**-**9**                                                                | Switch to tab 1-9 (when that tab exists)                                           |\n| **Ctrl+,**                                                                     | Open config file in the default editor                                             |\n\n## SSH current directory for downloads and uploads\n\nPhantty can download a relative file path from an SSH terminal output, and upload\ndragged files into the interactive SSH shell's current directory, only when the\nremote shell reports its current directory with OSC 7. This is the same terminal\nconvention used by Ghostty shell integration.\n\nIf OSC 7 is missing, helper `ssh.exe` / `scp.exe` commands start a fresh SSH\nsession and usually see the login directory, not the directory you `cd`'d to in\nthe interactive shell. In that case Phantty shows `SSH cwd unknown; click for\nsetup` instead of guessing `~/file`.\n\nAdd one of these snippets to the remote shell startup file, then start a new\nPhantty SSH session.\n\nFor Bash, add this to `~/.bashrc`:\n\n```bash\n__phantty_report_cwd() {\n  printf '\\033]7;file://%s%s\\a' \"${HOSTNAME:-localhost}\" \"$PWD\"\n}\nPROMPT_COMMAND=\"__phantty_report_cwd${PROMPT_COMMAND:+;$PROMPT_COMMAND}\"\n```\n\nFor Zsh, add this to `~/.zshrc`:\n\n```zsh\n__phantty_report_cwd() {\n  printf '\\033]7;file://%s%s\\a' \"${HOST:-localhost}\" \"$PWD\"\n}\nautoload -Uz add-zsh-hook\nadd-zsh-hook chpwd __phantty_report_cwd\nadd-zsh-hook precmd __phantty_report_cwd\n```\n\nFor Fish, add this to `~/.config/fish/config.fish`:\n\n```fish\nfunction __phantty_report_cwd --on-variable PWD\n    printf '\\e]7;file://%s%s\\a' (hostname) (string escape --style=url $PWD)\nend\n__phantty_report_cwd\n```\n\n## Credits\n\n- Original project: [arya-s/phantty](https://github.com/arya-s/phantty) - the\nZig + libghostty-vt foundation and the Windows terminal core.\n- Terminal emulation: [ghostty-org/ghostty](https://github.com/ghostty-org/ghostty)\nvia `libghostty-vt`.\n- Image decoding: [stb_image](https://github.com/nothings/stb) (vendored\nthrough the ghostty dependency).\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxuzhougeng%2Fphantty","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxuzhougeng%2Fphantty","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxuzhougeng%2Fphantty/lists"}