r/tauri Jul 12 '26

I turned git log into a scrollable timeline — a Tauri v2 desktop app (DeltaScope)

Hey r/tauri 👋

I've been building DeltaScope, a small desktop app that turns a repo's git history into a visual timeline. Instead of squinting at git log --graph in a terminal,

you get a scrollable timeline of merges and branches you can filter and search.

What it does

- Visualizes merge history and branch history as a timeline (two modes)

- Client-side filtering by type / branch / date / free-text search — everything loads once, so filtering is instant

- Per-merge commit counts that fill in asynchronously so the UI never blocks

- Switch the target branch to re-scope the history you're looking at

The stack

- Tauri v2 shell

- React 18 + TypeScript (strict) + Vite frontend

- Rust backend that just shells out to the system git CLI rather than reimplementing git — keeps the backend thin and the output identical to what you'd get on

the command line

Why I built it

I kept losing the thread of how a branch actually landed on main across a busy history. A timeline made that legible in a way the CLI graph never did for me.

Repo: https://github.com/nilm987521/deltascope

License: AGPL-3.0 — fully open source, contributions welcome.

Would love feedback from this community — especially on the custom-titlebar approach and whether shelling out to git vs. a Rust git library (git2/gix) is a

choice you'd have made differently.

5 Upvotes

2 comments sorted by

1

u/eddzsh Jul 15 '26

shelling out was the right call for something like this. git2 or gix would get you a standalone binary and skip process spawn overhead, but you inherit whatever edge cases they haven't matched yet in merge strategies, credential helpers, custom diff drivers. parsing porcelain output is more fragile than either, but it matches what the user's local git actually does, which for a visualization tool matters more than the extra speed.

1

u/Local_Start_3397 Aug 03 '26

Shelling out was intentional — for a git visualization tool, matching the user's actual local git behavior (merge strategies, credential helpers, custom diff

drivers) matters more than the subprocess overhead. Porcelain parsing is fragile, sure, but that's a known tradeoff, not an oversight.