Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

iwgyyyy/plotter

Repository files navigation

Plotter

Languages: English · 中文

A compact macOS desktop app for watching open GitHub pull requests across multiple repositories — without context-switching to github.com a dozen times a day.

Built for developers who keep a small browser-window-shaped app pinned in a corner and just want to know: which of my PRs need review, which are green, which are blocked.

Features

  • Multi-repo watch list — track any subset of your personal/org repos, persisted locally.
  • Live PR list — title, status glyph, CI/review state, +/- line counts, branches, author avatar, age. Polls every 60s.
  • Inline filter — full-text match on title/author, no round-trip.
  • PR detail in its own window (×ばつ700) — opens any PR in a separate macOS window so you can keep the launcher visible.
    • Conversation — unified timeline of commits, reviews, comments; commits and reviews link out to GitHub.
    • Files — parsed unified diff with line numbers and +/- highlighting. Binary files (images, archives, fonts, lockfiles, etc.) are detected and silently skipped.
    • Commits — clean list view.
    • Close / Merge actions — confirmation dialog; merge button is automatically disabled and labeled Conflict when GitHub reports the PR as unmergeable. Dynamic poll cadence: when GitHub's mergeable status is still UNKNOWN, refetch every 5s until resolved, then drop back to 60s.
  • Always-on-top pin — toggle the main window to stay above other apps. Useful while reviewing in your editor.
  • PAT auth via macOS Keychain — token stored using keyring-rs, never on disk in plaintext. Sign-out wipes the entry.
  • System theme follow — dark/light follows macOS, no toggle.
  • Native traffic-light positioning — the title bar is overlaid (no chrome) but close/min/max sit where macOS expects them on both main and detail windows.

Stack

Layer Tech
App shell Tauri 2.11 (Rust, multi-window)
Frontend React 19 + Vite 7 + TypeScript
Styling Tailwind v4 + shadcn/ui (radix-nova)
Fonts Geist Variable + Geist Mono
Data fetching SWR (poll + dedupe)
GitHub GraphQL v4 (PR list / detail) + REST (files, close, merge)
Secrets macOS Keychain via keyring-rs
Persistence tauri-plugin-store (JSON)

Install

Option A — Download the prebuilt .app (recommended for non-developers)

  1. Grab the latest Plotter_<version>_aarch64.dmg from the Releases page.
  2. Open the DMG and drag Plotter.app into /Applications.
  3. First launch will be blocked by Gatekeeper ("Apple cannot check it for malicious software") because the app isn't notarized — it's a personal tool, not paid through Apple's developer program. Bypass once with either of:
    • Right-click Plotter.appOpen → click Open again in the confirmation dialog, or
    • From a terminal: xattr -dr com.apple.quarantine /Applications/Plotter.app

Then jump to First-time setup.

Option B — Build from source

Use this if you want to hack on Plotter, or you trust your own toolchain more than a binary off the internet.

Prerequisites

  • macOS (Apple Silicon recommended; Plotter is built/tested there)
  • Bun
  • Rust toolchain (rustup)

Run dev

bun install
bun tauri dev

The frontend dev server runs on :1420; Tauri launches the native window automatically.

Build a release .app

bun tauri build

The .app (and DMG) will land under src-tauri/target/release/bundle/. It is not signed or notarized — Gatekeeper will treat it the same as the prebuilt DMG above, so the same quarantine bypass applies if you copy it to another machine.

First-time setup

Whether you installed via DMG or built from source, the first launch is the same:

  1. Open Settings (gear icon in the header).
  2. Paste your GitHub Personal Access Token and click Save. The token is verified against GET /user before being stored in the macOS Keychain.
  3. Add at least one repository. Accepts any of:
    • owner/repo
    • https://github.com/owner/repo
    • git@github.com:owner/repo.git
  4. Select the repo from the dropdown to start polling.

Creating a Personal Access Token

You need a PAT (classic or fine-grained) — create one at https://github.com/settings/tokens.

Scopes:

  • repo — read access is enough for browsing; full repo (write) is needed for the Close / Merge actions.
  • For org-owned repos, the token must also be authorized for the org at https://github.com/settings/tokens → "Configure SSO" / "Authorize" under the org name.

Project structure

×ばつ1024 macOS-template source">
plotter/
├── src/ # React app
│ ├── App.tsx # Main window (repo selector + PR list)
│ ├── pr-detail/
│ │ └── PrDetailWindow.tsx # Detail window (tabs, diff, close/merge)
│ ├── components/
│ │ ├── settings-sheet.tsx # PAT + repo management
│ │ └── ui/ # shadcn primitives
│ ├── lib/
│ │ ├── auth-store.tsx # PAT context
│ │ ├── repo-store.tsx # watch-list context (tauri-plugin-store backed)
│ │ ├── use-pull-requests.ts
│ │ ├── use-pr-detail.ts
│ │ ├── use-pr-files.ts
│ │ └── open-pr-detail.ts # invokes Rust to spawn detail window
│ └── App.css # Tailwind v4 theme tokens
└── src-tauri/
 ├── src/lib.rs # All Tauri commands (auth, list_prs, get_pr_detail, get_pr_files, close_pr, merge_pr, open_pr_detail)
 ├── tauri.conf.json # productName=Plotter, identifier=app.plotter.dev
 ├── capabilities/ # Per-window permissions (main + pr-*)
 └── icons/ # Generated from a ×ばつ1024 macOS-template source

Notes

  • Multi-window is implemented in Rust (open_pr_detail) rather than the JS API so traffic-light positioning is reliable. The capability whitelist (src-tauri/capabilities/default.json) covers main and pr-* windows.
  • All numeric/identifier text in the UI uses font-mono (Geist Mono) with tabular numerals to keep columns aligned across PR rows.
  • The icon source lives at public/gh-logo-icon.png; the bundled app icon is composited onto a ×ばつ1024 macOS-template canvas (824 squircle, 185px corner radius) before tauri icon regenerates the full icns/ico/PNG set.

Status

Personal tool, alpha-quality. No public release; clone and build for yourself if you find it useful.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

Contributors

AltStyle によって変換されたページ (->オリジナル) /