{"id":51697536,"url":"https://github.com/sei40kr/rugit","last_synced_at":"2026-07-16T06:34:47.126Z","repository":{"id":369409202,"uuid":"1288439960","full_name":"sei40kr/rugit","owner":"sei40kr","description":"A standalone Magit-style Git TUI, written in Rust (ratatui)","archived":false,"fork":false,"pushed_at":"2026-07-06T08:19:48.000Z","size":279,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-16T06:34:40.094Z","etag":null,"topics":["cli","git","git-client","magit","ratatui","rust","terminal","tui"],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sei40kr.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":null,"dco":null,"cla":null}},"created_at":"2026-07-03T15:49:30.000Z","updated_at":"2026-07-06T08:19:52.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/sei40kr/rugit","commit_stats":null,"previous_names":["sei40kr/rugit"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/sei40kr/rugit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sei40kr%2Frugit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sei40kr%2Frugit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sei40kr%2Frugit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sei40kr%2Frugit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sei40kr","download_url":"https://codeload.github.com/sei40kr/rugit/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sei40kr%2Frugit/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35534109,"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-16T02:00:06.687Z","response_time":83,"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","git","git-client","magit","ratatui","rust","terminal","tui"],"created_at":"2026-07-16T06:34:46.413Z","updated_at":"2026-07-16T06:34:47.117Z","avatar_url":"https://github.com/sei40kr.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# rugit\n\nA standalone [Magit](https://magit.vc/)-style Git TUI, written in Rust.\n\nrugit brings Magit's core interaction model to a terminal application that\ndoes not depend on Emacs: a status buffer made of foldable sections, commands\nthat act on the thing at point, and transient menus with toggleable\ncommand-line switches. Git operations shell out to your real `git` binary, so\nhooks, commit signing, credential helpers, and your git config all behave\nexactly as they do on the command line.\n\n\u003e **Status**: early (v0.1). The core workflow — stage/unstage/discard,\n\u003e commit, branch, push/pull/fetch, revision view, search — works. See\n\u003e [Roadmap](#roadmap) for what's missing.\n\n## Features\n\n- **Magit-style status buffer** — untracked/unstaged/staged files with inline\n  diffs, stashes, and recent commits as a tree of collapsible sections\n- **Stage at any granularity** — `s` stages whatever is at point: a file, a\n  hunk, or a **single diff line**; `u` unstages the same way\n- **Transient menus** — commit / branch / push / pull / fetch popups with\n  Magit-style switches (`-a` → `--all`, `-f` → `--force-with-lease`, ...)\n- **Pickers and prompts** — checkout from a filterable branch picker; type a\n  name to create branches; unmatched picker input is passed through, so tags\n  and SHAs work too\n- **Incremental search** — `/` with live highlighting and smart-case; `n`/`p`\n  jump between matches\n- **Revision \u0026 stash view** — `RET` on a commit or stash opens its diff\n- **Real git, transparently** — every command rugit runs is logged to a\n  process buffer (`$`); commit messages open in your `$GIT_EDITOR`\n- **Auto-refresh** — the status buffer updates when `.git` changes, even from\n  other terminals\n- **Configurable** — remap any key, restyle every color, all from one TOML\n  file\n\n## Installation\n\nRequires a Rust toolchain and a `git` binary on `$PATH`.\n\n```sh\ncargo install --git https://github.com/sei40kr/rugit\n# or from a checkout:\ncargo install --path .\n```\n\n## Usage\n\nRun `rugit` anywhere inside a git repository.\n\n### Default key bindings\n\n| Key | Action |\n|---|---|\n| `j` / `k`, arrows | move cursor |\n| `n` / `p` | next / previous section (match, while a search is active) |\n| `^` | parent section |\n| `TAB` | collapse / expand section |\n| `C-d` / `C-u`, `PgDn` / `PgUp` | scroll half page |\n| `g` | refresh |\n| `s` / `u` | stage / unstage the thing at point (file, hunk, or line) |\n| `S` / `U` | stage all tracked / unstage all |\n| `x` | discard the change at point (with confirmation) |\n| `RET` | show the commit / stash at point |\n| `c` | commit menu |\n| `b` | branch menu (checkout picker, create) |\n| `P` / `F` / `f` | push / pull / fetch menus |\n| `/` | incremental search (`RET` to confirm, `ESC` to clear) |\n| `$` | git process log |\n| `?` | help (scrollable) |\n| `q` | close buffer / quit |\n\nInside a transient menu, keys like `-a` toggle switches and highlighted\nactions run with the enabled flags.\n\n## Configuration\n\n`~/.config/rugit/config.toml` (`$XDG_CONFIG_HOME` is respected). Everything\nis optional; invalid entries produce a startup warning instead of an error.\n\n```toml\nscrolloff = 3\n\n[keys.global]\n\"g\"   = \"refresh\"\n\"P p\" = \"push\"        # space-separated key sequences are supported\n\n[keys.status]\n\"s\" = \"stage\"\n\n[colors]               # role names: see src/theme.rs\ndiff-add     = \"green\" # color names, \"#rrggbb\", or 256-color indexes (\"42\")\ncursor-bg    = \"#3a3a3a\"\nsearch-match = \"yellow\"\n```\n\nCommand names for remapping are listed in the help buffer (`?`).\n\n## Design\n\nThe architecture — section trees, the event loop, the keymap trie, the\ntransient engine, and why rugit shells out to git instead of using libgit2 —\nis documented in [DESIGN.md](DESIGN.md). A contributor-oriented cheat sheet\nlives in [CLAUDE.md](CLAUDE.md).\n\n## Roadmap\n\n- Log buffer\n- Rebase / stash / merge transients; branch rename \u0026 delete\n- Region selection for multi-line staging\n- Word-level diff highlighting and syntax highlighting\n- Value-taking transient arguments (`--set-upstream=\u003cvalue\u003e`) and persisted\n  switch defaults\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsei40kr%2Frugit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsei40kr%2Frugit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsei40kr%2Frugit/lists"}