{"id":50453703,"url":"https://github.com/tituskirch/glimpse","last_synced_at":"2026-06-03T23:00:50.459Z","repository":{"id":361296610,"uuid":"1252849548","full_name":"TitusKirch/glimpse","owner":"TitusKirch","description":"Lightweight, git-native desktop Git client — branch graph \u0026 diffs with first-class WSL support.","archived":false,"fork":false,"pushed_at":"2026-05-31T23:59:55.000Z","size":1337,"stargazers_count":0,"open_issues_count":8,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-01T01:19:35.705Z","etag":null,"topics":["diff-viewer","git","git-client","git-graph","kirchdev","nuxt","tauri","vue","wsl"],"latest_commit_sha":null,"homepage":"","language":"Vue","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/TitusKirch.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":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-05-28T23:52:42.000Z","updated_at":"2026-05-31T23:39:15.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/TitusKirch/glimpse","commit_stats":null,"previous_names":["tituskirch/glimpse"],"tags_count":1,"template":false,"template_full_name":"TitusKirch/scaffold","purl":"pkg:github/TitusKirch/glimpse","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TitusKirch%2Fglimpse","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TitusKirch%2Fglimpse/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TitusKirch%2Fglimpse/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TitusKirch%2Fglimpse/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TitusKirch","download_url":"https://codeload.github.com/TitusKirch/glimpse/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TitusKirch%2Fglimpse/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33883102,"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-03T02:00:06.370Z","response_time":59,"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":["diff-viewer","git","git-client","git-graph","kirchdev","nuxt","tauri","vue","wsl"],"created_at":"2026-06-01T01:04:55.832Z","updated_at":"2026-06-03T23:00:50.449Z","avatar_url":"https://github.com/TitusKirch.png","language":"Vue","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n\u003cimg src=\"assets/logo_256x256.png\" alt=\"glimpse\" width=\"128\" height=\"128\" /\u003e\n\n# glimpse\n\n**A lightweight, git-native desktop Git client — the full branch graph, diffs, and everyday git, with first-class WSL support**\n\n[![Release](https://img.shields.io/github/v/release/TitusKirch/glimpse?style=flat-square\u0026label=release\u0026color=10b981)](https://github.com/TitusKirch/glimpse/releases/latest)\n[![Beta](https://img.shields.io/github/v/tag/TitusKirch/glimpse?sort=semver\u0026filter=*-beta*\u0026style=flat-square\u0026label=beta\u0026color=f59e0b)](https://github.com/TitusKirch/glimpse/releases)\n[![Tests](https://img.shields.io/github/actions/workflow/status/TitusKirch/glimpse/ci.yml?branch=main\u0026style=flat-square\u0026label=tests)](https://github.com/TitusKirch/glimpse/actions/workflows/ci.yml)\n[![License: MIT](https://img.shields.io/github/license/TitusKirch/glimpse?style=flat-square\u0026color=10b981)](LICENSE)\n\n![glimpse — the multi-branch graph and diffs](.github/assets/preview.png)\n\n\u003c/div\u003e\n\n---\n\n```bash\n# glimpse drives your real git, per repo — automatically:\ngit -C C:\\dev\\repo log --graph                               # a Windows-path repo → Windows git\nwsl.exe -d Ubuntu --cd /home/you/repo --exec git log --graph # a \\\\wsl$ repo → that distro's git\n```\n\nThat's it. A slim, fast desktop client that shells out to your own `git` — no reimplemented engine, no Chromium, and on Windows it transparently uses WSL git for repos that live in the WSL filesystem.\n\n## ✨ Features\n\n- **🪶 Featherweight** — built on [Tauri](https://tauri.app/), it uses the OS-native WebView (WebView2 / WebKitGTK) instead of bundling Chromium. Small disk and RAM footprint.\n- **🧬 Git-native** — never reimplements git; it shells out to your real `git` binary and parses its porcelain output. Your config, hooks, and credentials apply unchanged, and glimpse stores no secrets.\n- **🪟 First-class WSL (Windows)** — a `\\\\wsl$` repository is driven through that distro's git automatically, while Windows-path repos use Windows git. No setup, no per-repo switch.\n- **🌳 Graph \u0026 history** — the full multi-branch commit graph, searchable history, and per-commit detail (changed files + diff).\n- **🔍 Rich diffs** — side-by-side, unified, or whole-file, with syntax highlighting, word-level diff, ignore-whitespace, blame, and file history.\n- **✏️ Stage \u0026 commit** — stage/unstage by file **or hunk**, discard, commit, amend, and resolve merge conflicts (use ours/theirs).\n- **🌿 Branches, tags \u0026 stashes** — create/switch/rename/delete branches, merge, cherry-pick, revert, reset (soft/mixed/hard), tags, and stash save/pop/apply/drop.\n- **🔄 Live refresh** — a debounced filesystem watcher repaints status, diff, and graph as files change, with manual and on-window-focus refresh as fallback.\n- **⌨️ Fast workflow** — command palette, keyboard shortcuts, drag-reorderable multi-repo tabs, a resizable sidebar, recent repos, and \"open in editor / terminal / file manager\".\n- **🌓 Themed \u0026 localized** — dark/light follows the OS (manually switchable), with a localized UI.\n\n\u003cdetails\u003e\n\u003csummary\u003eFull feature list\u003c/summary\u003e\n\n- **Viewing** — multi-branch commit graph, commit search, side-by-side / unified / whole-file diffs with syntax highlighting and word-level diff, ignore-whitespace, blame, file history, list/tree file view.\n- **Staging \u0026 commits** — stage / unstage by file or hunk, discard, discard all, commit, `commit --amend`, conflict resolution (use ours/theirs, mark resolved).\n- **Branches \u0026 tags** — create / switch / rename / delete branches, branch from a commit, publish (set upstream), merge in either direction, create / delete / push tags, checkout a commit (detached HEAD).\n- **History rewriting** — cherry-pick, revert, reset (soft / mixed / hard).\n- **Stash** — save, pop, apply, drop.\n- **Remotes \u0026 sync** — add / rename / remove remotes, fetch, pull (incl. rebase), push (set-upstream, `--force-with-lease`), push tags.\n- **App** — command palette, keyboard shortcuts, drag-reorderable multi-repo tabs, resizable sidebar, recent repositories, open in editor / terminal / file manager, built-in auto-update.\n\n\u003c/details\u003e\n\n## 📦 Stack\n\n[Tauri](https://tauri.app/) (Rust) shell + [Nuxt 4](https://nuxt.com/) (Vue 3) SPA, [Tailwind v4](https://tailwindcss.com/) + [shadcn-vue](https://www.shadcn-vue.com/), with git accessed by shelling out to the system binary.\n\n\u003cdetails\u003e\n\u003csummary\u003eFull stack\u003c/summary\u003e\n\n| Layer           | Choice                                                                       |\n| :-------------- | :--------------------------------------------------------------------------- |\n| Desktop shell   | [Tauri](https://tauri.app/) (Rust) — OS-native WebView, no Electron/Chromium |\n| Frontend        | [Nuxt 4](https://nuxt.com/) (Vue 3), SPA mode (`ssr: false`), code in `app/` |\n| Styling / UI    | [Tailwind v4](https://tailwindcss.com/) + [shadcn-vue](https://www.shadcn-vue.com/) (Reka UI) |\n| State           | [Pinia](https://pinia.vuejs.org/) — per-repo store, persisted to `localStorage` |\n| Diff rendering  | Custom side-by-side / unified / whole-file view; [highlight.js](https://highlightjs.org/) syntax highlighting + word-level diff |\n| Graph rendering | SVG generated from structured `git log` data                                 |\n| i18n            | [`@nuxtjs/i18n`](https://i18n.nuxtjs.org/) — localized UI                     |\n| Git access      | System `git` binary (shell-out); Windows git or WSL git resolved per repo     |\n| FS watcher      | Rust [`notify`](https://docs.rs/notify) (debounced), best-effort (incl. `\\\\wsl$`) |\n| Updates         | [Tauri updater](https://v2.tauri.app/plugin/updater/) against GitHub Releases  |\n\n\u003c/details\u003e\n\n## 🚀 Setup\n\nDownload a build from the [latest release](https://github.com/TitusKirch/glimpse/releases) and install it for your OS; it self-updates from there via the built-in Tauri updater.\n\n- **Windows** — download `glimpse_\u003cversion\u003e_x64-setup.exe` and run it. It's unsigned for now, so SmartScreen may warn: choose **More info → Run anyway**.\n- **Linux (Ubuntu/Debian)** — download `glimpse_\u003cversion\u003e_amd64.deb` and install it (an `.AppImage` and an `.rpm` are also provided):\n  ```bash\n  sudo apt install ./glimpse_*_amd64.deb\n  ```\n- **macOS (Apple Silicon)** — the build produces an unsigned `.app` bundle (no `.dmg` installer); extract it from the release assets and move **glimpse** to Applications.\n\n\u003e [!WARNING]\n\u003e **The macOS build is untested and unsigned.** It compiles in CI alongside Windows and Linux, but those two are the actively tested targets. Gatekeeper blocks it on first launch — right-click the app and choose **Open**. Use at your own risk.\n\n### Manual setup (from source)\n\nPrerequisites: Node **24+**, **pnpm 11**, the **Rust toolchain**, and the [Tauri system dependencies](https://tauri.app/start/prerequisites/) for your platform.\n\n```bash\ngit clone https://github.com/TitusKirch/glimpse.git\ncd glimpse\npnpm install\npnpm tauri dev    # desktop dev shell\n```\n\n\u003e [!TIP]\n\u003e For fast UI iteration you can run `pnpm dev` (the Nuxt dev server) and open `http://localhost:3000` in a browser — backend IPC is mocked when not running under Tauri.\n\n## 🧬 Git-native \u0026 WSL\n\nglimpse never reimplements git: it shells out to your real `git` and parses machine-readable output, so behaviour, config, hooks, and **credentials** are exactly your own. It stores no secrets and ships no credential UI.\n\nOn Windows it picks the right git **per repository**:\n\n- a **Windows path** (e.g. `C:\\dev\\repo`) → Windows `git`;\n- a **WSL path** (`\\\\wsl$\\\u003cdistro\u003e\\…` / `\\\\wsl.localhost\\\u003cdistro\u003e\\…`) → that distro's git, via `wsl.exe -d \u003cdistro\u003e --cd \u003clinux-path\u003e --exec git …`.\n\nOn Linux and macOS git is simply native — there is no WSL concept. Live refresh over the `\\\\wsl$` 9P share is best-effort; the manual + on-focus refresh covers the rest.\n\n## 🧪 Development\n\n`pnpm tauri dev` for the desktop shell, `pnpm dev` for fast browser iteration, `pnpm check` for the CI gate. Rust unit tests cover the risky backend logic — git output parsing and WSL path translation — and CI builds across a Linux + Windows + macOS matrix (`cargo fmt --check`, `clippy -D warnings`, `cargo test`, `tauri build`).\n\n\u003cdetails\u003e\n\u003csummary\u003eAll commands\u003c/summary\u003e\n\n| Command            | What it does                                  |\n| :----------------- | :-------------------------------------------- |\n| `pnpm dev`         | Nuxt dev server (browser-testable, mocked IPC) |\n| `pnpm tauri dev`   | Desktop dev shell                             |\n| `pnpm tauri build` | Packaged binary                               |\n| `pnpm test`        | Frontend unit tests (Vitest)                  |\n| `pnpm lint`        | `oxlint . --deny-warnings`                    |\n| `pnpm format`      | `oxfmt --check .`                             |\n| `pnpm cargofmt`    | `cargo fmt --check` for the Rust backend      |\n| `pnpm cargo:update`   | Refresh Rust deps within semver            |\n| `pnpm cargo:outdated` | Show major Rust-dep upgrades (needs `cargo-edit`) |\n| `pnpm cargo:upgrade`  | Apply major Rust-dep upgrades (needs `cargo-edit`) |\n| `pnpm check`       | `lint` + `format` + `cargofmt` — the CI gate  |\n| `pnpm check:fix`   | Auto-fix lint, format, and Rust formatting    |\n\n\u003c/details\u003e\n\n## 🎨 Assets \u0026 branding\n\n\u003e [!NOTE]\n\u003e The logo and app icons are **placeholder artwork, currently AI-generated** with [icongeneratorai.com](https://icongeneratorai.com/) — not final, temporary stand-ins to be replaced at some point, with no fixed timeline.\n\n- **Source logo:** `assets/logo.png` (643×643). The platform icon set in `src-tauri/icons/` is regenerated from it via `pnpm tauri icon assets/logo.png`.\n- **Display variants:** `assets/logo_256x256.png` (README hero) and `public/logo.png` + `public/logo_128x128.png` (served in-app — sidebar header, About screen).\n\n**Brand colours** — the logo is a deep indigo→violet gradient (hue ≈ 289°) with a white mark, read straight from the artwork:\n\n| Role              | Hex       | OKLCH                     |\n| :---------------- | :-------- | :------------------------ |\n| Gradient (dark)   | `#120A40` | `oklch(0.203 0.096 280)`  |\n| Gradient (base)   | `#202050` | `oklch(0.274 0.086 279)`  |\n| Gradient (violet) | `#403090` | `oklch(0.388 0.151 285)`  |\n| Mark              | `#FFFFFF` | `oklch(1 0 0)`            |\n\n## 🤝 Contributing\n\nPRs welcome. Conventional Commits required (enforced via commitlint). Husky runs the project's linters/formatters on `git commit`.\n\n\u003e [!TIP]\n\u003e Run `pnpm check:fix` before pushing — CI will catch what husky missed.\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for the full workflow.\n\n## 🛣️ Versioning\n\n[Semantic Versioning](https://semver.org/) via [release-please](https://github.com/googleapis/release-please) — see [CHANGELOG.md](CHANGELOG.md).\n\n## 📄 License\n\n[MIT](LICENSE) © [Titus Kirch](https://github.com/TitusKirch/) / [IT-Dienstleistungen Titus Kirch](https://kirch.dev)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftituskirch%2Fglimpse","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftituskirch%2Fglimpse","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftituskirch%2Fglimpse/lists"}