{"id":47995704,"url":"https://github.com/jongio/grut","last_synced_at":"2026-07-07T21:00:33.925Z","repository":{"id":345622226,"uuid":"1177489495","full_name":"jongio/grut","owner":"jongio","description":"A terminal file explorer with full Git and GitHub integration, AI chat, and reactive panels that stay in sync as you navigate.","archived":false,"fork":false,"pushed_at":"2026-07-03T19:55:26.000Z","size":28298,"stargazers_count":40,"open_issues_count":46,"forks_count":2,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-03T21:27:22.347Z","etag":null,"topics":["cli","copilot","developer-tools","dprun","dx-idea","file-explorer","git","git-client","github","terminal","terminal-ui","tui"],"latest_commit_sha":null,"homepage":"https://jongio.github.io/grut/","language":"Go","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/jongio.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":"ROADMAP.md","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-03-10T04:26:50.000Z","updated_at":"2026-07-03T19:55:30.000Z","dependencies_parsed_at":null,"dependency_job_id":"85682251-fb2e-4933-97b2-92cfa08d315f","html_url":"https://github.com/jongio/grut","commit_stats":null,"previous_names":["jongio/grut"],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/jongio/grut","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jongio%2Fgrut","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jongio%2Fgrut/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jongio%2Fgrut/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jongio%2Fgrut/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jongio","download_url":"https://codeload.github.com/jongio/grut/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jongio%2Fgrut/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35242497,"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-07-07T02:00:07.222Z","response_time":90,"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":["cli","copilot","developer-tools","dprun","dx-idea","file-explorer","git","git-client","github","terminal","terminal-ui","tui"],"created_at":"2026-04-04T11:57:00.550Z","updated_at":"2026-07-07T21:00:33.919Z","avatar_url":"https://github.com/jongio.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/logo.svg\" alt=\"grüt\" width=\"300\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n\n[![CI](https://github.com/jongio/grut/actions/workflows/ci.yml/badge.svg)](https://github.com/jongio/grut/actions/workflows/ci.yml)\n[![Go Report Card](https://goreportcard.com/badge/github.com/jongio/grut)](https://goreportcard.com/report/github.com/jongio/grut)\n[![Go Reference](https://pkg.go.dev/badge/github.com/jongio/grut.svg)](https://pkg.go.dev/github.com/jongio/grut)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n[![Go Version](https://img.shields.io/github/go-mod/go-version/jongio/grut)](go.mod)\n[![Platform](https://img.shields.io/badge/platform-Windows%20%7C%20macOS%20%7C%20Linux-lightgrey)](#)\n\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\nA reactive terminal UI for Git and GitHub where every panel talks to every other panel.\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"web/public/screenshots/default/hero-main.png\" alt=\"grüt Explorer layout with file tree, git info, and syntax-highlighted preview\" width=\"800\"\u003e\n\u003c/p\u003e\n\n## Why grut?\n\nFiles, Git, GitHub, and preview — all in one terminal, all aware of each other. Pick a branch and the file tree, commits, and preview update. Pick a file and commits filter to its history. Pick a PR and three panels reconfigure at once. No switching tools, no refreshing.\n\n## Features\n\n### Reactive Panels\n- **Context-Aware** — Panels react to your selections. Select a branch, file, worktree, remote, stash, or PR and every other panel updates to match.\n- **Commit-Files Mode** — Enter on a commit shows only that commit's changed files in the tree. Escape restores.\n- **PR Triple-Sync** — Select a PR and file tree, commits, and preview all update simultaneously.\n- **Git Filter** — `g` cycles through three modes: all files → git-changed → branch diff. Preview switches to diff mode automatically.\n\n### Files\n- **File Explorer** — Navigate your project with git status markers, Nerd Font icons, create/rename/delete\n- **Fuzzy Finder** — `/` for instant file search\n- **Syntax Highlighting** — 100+ languages via Chroma\n- **Preview** — Adapts to show file content, issue/PR bodies, workflow details, or diffs depending on selection. Press `f` to toggle between file-on-disk and contextual diff view. Click and drag to select text, `y` to copy.\n- **Inline Editor** — Press `e` in the preview panel to edit files directly. `Ctrl+S` saves, `Escape` discards.\n\n### Git\n- **Status \u0026 Staging** — Stage, unstage, discard with single keystrokes. Partial staging for individual hunks and lines.\n- **Branches, Worktrees, Stash, Tags, Remotes, Reflog** — Each as a dedicated tab with full CRUD operations.\n- **Diff** — Inline and side-by-side modes with hunk navigation.\n- **Log** — Commit graph with ASCII visualization.\n- **Merge, Rebase, Blame, Bisect, Undo/Redo** — Complete git workflow without leaving the terminal.\n\n### GitHub\n- **Issues, Pull Requests, Actions, Workflows, Releases** — Each as a tab with filters and preview integration.\n- **Merge PRs** — Merge pull requests with merge commit, squash, or rebase strategies and optional branch cleanup.\n- **Workflow Dispatch** — Trigger CI/CD workflows with parameters from the TUI.\n\n### AI Chat\n- Built-in chat powered by **GitHub Copilot** — read/write files, run git commands, search code, interact with issues and PRs.\n- AI-powered commit messages, conflict resolution, code review, and PR descriptions.\n- Collapsed, expanded, and full-screen overlay modes.\n\n### Interface\n- **Themes** — Default, Catppuccin, Tokyo Night, Gruvbox, plus custom TOML themes.\n- **Session Persistence** — Saves and restores layout on restart.\n- **Self-Update** — `grut update` upgrades in-place.\n\nSee the [Roadmap](ROADMAP.md) for what's coming next.\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eScreenshots\u003c/strong\u003e\u003c/summary\u003e\n\n### AI Chat\n\u003cimg src=\"web/public/screenshots/default/ai-chat.png\" alt=\"AI chat overlay with search results and code analysis\" width=\"800\"\u003e\n\n### Git Info\n\u003cimg src=\"web/public/screenshots/default/git-info.png\" alt=\"Git info panel with branches, tags, remotes, and stash tabs\" width=\"800\"\u003e\n\n### Git Diff\n\u003cimg src=\"web/public/screenshots/default/git-diff.png\" alt=\"Inline diff view with syntax-highlighted additions and deletions\" width=\"800\"\u003e\n\n### Git Branches\n\u003cimg src=\"web/public/screenshots/default/git-branches.png\" alt=\"Branch management panel with local and remote branches\" width=\"800\"\u003e\n\n### Git Log\n\u003cimg src=\"web/public/screenshots/default/git-log.png\" alt=\"Git log with commit graph visualization\" width=\"800\"\u003e\n\n### Fuzzy Finder\n\u003cimg src=\"web/public/screenshots/default/fuzzy-finder.png\" alt=\"Fuzzy file finder overlay for quick navigation\" width=\"800\"\u003e\n\n### File Explorer \u0026 Preview\n\u003cimg src=\"web/public/screenshots/default/file-explorer.png\" alt=\"File explorer with syntax-highlighted preview\" width=\"800\"\u003e\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eThemes\u003c/strong\u003e\u003c/summary\u003e\n\n### Default\n\u003cimg src=\"web/public/screenshots/default/hero-main.png\" alt=\"Default theme\" width=\"800\"\u003e\n\n### Catppuccin\n\u003cimg src=\"web/public/screenshots/catppuccin/hero-main.png\" alt=\"Catppuccin theme\" width=\"800\"\u003e\n\n### Tokyo Night\n\u003cimg src=\"web/public/screenshots/tokyonight/hero-main.png\" alt=\"Tokyo Night theme\" width=\"800\"\u003e\n\n### Gruvbox\n\u003cimg src=\"web/public/screenshots/gruvbox/hero-main.png\" alt=\"Gruvbox theme\" width=\"800\"\u003e\n\n\u003c/details\u003e\n\n## Installation\n\n### Shell script (Linux / macOS)\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/jongio/grut/main/install.sh | sh\n```\n\nTo install a specific version:\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/jongio/grut/main/install.sh | sh -s -- v0.1.0\n```\n\n### PowerShell script (Windows)\n\n```powershell\nirm https://raw.githubusercontent.com/jongio/grut/main/install.ps1 | iex\n```\n\nTo install a specific version:\n\n```powershell\n$v=\"v0.1.0\"; irm https://raw.githubusercontent.com/jongio/grut/main/install.ps1 | iex\n```\n\n### Go Install\n\n```bash\ngo install github.com/jongio/grut@latest\n```\n\n### Binary Download\n\nDownload from [GitHub Releases](https://github.com/jongio/grut/releases).\n\n### Updating\n\n```bash\ngrut update  # Downloads and installs the latest release\n```\n\n## Quick Start\n\n```bash\ngrut              # Launch file explorer in current directory\ngrut /path/to/dir # Open specific directory\ngrut update       # Update grut to the latest release\ngrut version      # Print the version\n```\n\n## CLI Flags\n\n| Flag | Description |\n|---|---|\n| `--help`, `-h` | Show usage information |\n| `--version`, `-v` | Print the version and exit |\n| `--demo` | Launch with a demo project to explore grut |\n| `--no-ai` | Disable AI features for this session |\n| `--cpu-profile FILE` | Write CPU profile to FILE (dev/debug) |\n| `--mem-profile FILE` | Write memory profile to FILE (dev/debug) |\n| `--pprof PORT` | Start pprof server on localhost:PORT (dev/debug) |\n| `--reset-welcome` | Reset first-run state so the welcome screen shows on next launch |\n\nA background update check runs on every launch and notifies you when a new version is available.\n\n## Nerd Font Icons\n\ngrüt displays file-type icons using [Nerd Font](https://www.nerdfonts.com/) glyphs. For the best experience, install a Nerd Font (e.g. **0xProto**, **FiraCode**, **JetBrainsMono**) and configure your terminal to use it.\n\nWhen `icon_mode` is set to `\"auto\"` (the default), grüt detects known nerd-font-capable terminals (WezTerm, kitty, Alacritty, iTerm, Ghostty, Windows Terminal, etc.) and enables icons automatically. You can also force it:\n\n```toml\n# ~/.config/grut/config.toml\n[file_tree]\nicon_mode = \"nerd\"   # always use nerd font icons\n# icon_mode = \"ascii\" # always use plain ASCII\n```\n\nOr set the environment variable `GRUT_NERD_FONT=1` to enable nerd icons in any terminal.\n\n## Keybindings\n\nSee [docs/keybindings.md](docs/keybindings.md) for the complete reference.\n\n| Key | Action |\n|-----|--------|\n| `j` / `k` | Navigate up/down |\n| `h` / `l` | Collapse/expand |\n| `Enter` | Open/select |\n| `1`–`5` | Focus panel (File Tree, Git Info, GitHub, Commits, Preview) |\n| `/` | Fuzzy finder |\n| `?` | Help overlay |\n| `R` | Refresh all data + preview |\n| `F` | Fetch all remotes |\n| `P` | Push |\n| `s` | Stage file |\n| `x` | Delete / cancel |\n| `g` | Cycle filter: all → git changed → branch diff |\n| `e` | Edit file inline (in preview panel) |\n\n## Configuration\n\nConfig file: `~/.config/grut/config.toml` (Linux/macOS) or `%APPDATA%\\grut\\config.toml` (Windows)\n\nSee [docs/configuration.md](docs/configuration.md) for all options.\n\n## Building from Source\n\n```bash\ngit clone https://github.com/jongio/grut.git\ncd grut\ngo build -o grut .\n./grut\n```\n\nOr with Mage:\n\n```bash\nmage build\n```\n\n## Development\n\ngrut uses [Mage](https://magefile.org/) for development workflows:\n\n```bash\nmage install    # Run tests, build bin/grut-dev, add to PATH (default target)\nmage test       # Run all unit tests\nmage preflight  # Pre-commit checks: fmt, tidy, vet, build, test, vulncheck\nmage vet        # Run go vet\nmage lint       # Run golangci-lint (falls back to go vet)\nmage fmt        # Format all Go source files\nmage clean      # Remove bin/ directory\n```\n\nYou can also use standard Go commands directly:\n\n```bash\ngo build ./...   # Build all packages\ngo test ./...    # Run all tests\ngo vet ./...     # Vet all packages\n```\n\n## Tech Stack\n\n- **Go 1.26.3** + **Bubble Tea v2** (TUI) + **Lipgloss v2** (styling) + **Bubbles v2** (widgets)\n- **Chroma v2** (syntax highlighting) + **Glamour** (markdown rendering)\n- **fsnotify** (filesystem watching) + **mimetype** (file type detection)\n- **TOML** configuration via go-toml/v2\n- **Cobra** CLI framework\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjongio%2Fgrut","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjongio%2Fgrut","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjongio%2Fgrut/lists"}