{"id":51564108,"url":"https://github.com/kryptic-sh/gpur","last_synced_at":"2026-07-10T13:03:47.931Z","repository":{"id":368764807,"uuid":"1286727450","full_name":"kryptic-sh/gpur","owner":"kryptic-sh","description":"btop-style GPU monitor TUI — NVIDIA, AMD, Apple Silicon; Linux, macOS, Windows","archived":false,"fork":false,"pushed_at":"2026-07-02T05:55:32.000Z","size":145,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-02T06:05:55.824Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","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/kryptic-sh.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","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},"funding":{"github":["mxaddict"],"ko_fi":"mxaddict"}},"created_at":"2026-07-02T03:39:09.000Z","updated_at":"2026-07-02T05:55:32.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/kryptic-sh/gpur","commit_stats":null,"previous_names":["kryptic-sh/gpur"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/kryptic-sh/gpur","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kryptic-sh%2Fgpur","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kryptic-sh%2Fgpur/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kryptic-sh%2Fgpur/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kryptic-sh%2Fgpur/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kryptic-sh","download_url":"https://codeload.github.com/kryptic-sh/gpur/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kryptic-sh%2Fgpur/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35331970,"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-10T02:00:06.465Z","response_time":60,"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":[],"created_at":"2026-07-10T13:03:47.203Z","updated_at":"2026-07-10T13:03:47.921Z","avatar_url":"https://github.com/kryptic-sh.png","language":"Rust","funding_links":["https://github.com/sponsors/mxaddict","https://ko-fi.com/mxaddict"],"categories":[],"sub_categories":[],"readme":"# gpur\n\nbtop-style GPU monitor for the terminal. An `nvtop` replacement that runs\neverywhere: NVIDIA, AMD, Intel, and Apple GPUs on Linux, macOS, and Windows.\n\nMirrored braille waveforms, gradient meters, an nvtop-style process table with\nper-process GPU attribution, mouse support, foldable GPU cards, and theming via\nthe hjkl stack.\n\n![gpur running with three mock GPUs](assets/screenshot.svg)\n\n\u003e **Status: beta.** The AMD Linux path is battle-tested on real hardware, and\n\u003e the macOS IOKit backend returns live data (validated against macOS CI runners'\n\u003e paravirt GPU — Apple Silicon numbers still welcome). Intel and Windows\n\u003e backends are implemented, CI-exercised, and awaiting real-GPU reports.\n\n## Install\n\n```sh\ncargo install gpur              # crates.io\nyay -S gpur-bin                 # Arch (AUR)\nbrew install kryptic-sh/tap/gpur  # macOS\nscoop install kryptic/gpur      # Windows\n```\n\nDebian/RPM packages, musl builds, and an Alpine `.apk` are attached to each\n[GitHub release](https://github.com/kryptic-sh/gpur/releases).\n\n## Run\n\n```sh\ngpur              # real GPUs\ngpur --mock       # fake GPUs, works anywhere\ngpur --mock 6     # demo a 6-GPU rig\ngpur --once       # one text snapshot, no TUI (scripts, quick checks)\ngpur --json       # machine-readable snapshot (waybar/polybar, monitoring)\ngpur --log x.jsonl  # append one JSON record per poll (benchmark/sensor logs)\ngpur --graphs ascii # graph glyphs: braille (default) | block | ascii\n```\n\n## Keys \u0026 mouse\n\n| Input              | Action                                                   |\n| ------------------ | -------------------------------------------------------- |\n| `q` / `Esc`        | quit                                                     |\n| `Space`            | pause/resume polling                                     |\n| `0`-`9`            | focus GPU list + select GPU N; same digit again folds it |\n| `p`                | focus process list                                       |\n| `j`/`k`, arrows    | move within the focused pane                             |\n| `J`/`K`, PgUp/PgDn | move the process cursor from anywhere                    |\n| `s` / `r`          | cycle process sort column / reverse it                   |\n| `/`                | filter processes (Enter applies, empty clears)           |\n| `x` / `X`          | SIGTERM / SIGKILL the selected process (with confirm)    |\n| `+`/`=` / `-`      | poll rate faster/slower                                  |\n| wheel / click      | scroll + focus the pane under the cursor; click selects  |\n\n## Configuration\n\n`gpur` reads `$XDG_CONFIG_HOME/gpur/config.toml` (falls back to\n`~/.config/gpur/config.toml`). No file is written automatically; missing file\nmeans built-in defaults.\n\n```toml\ntick_ms = 1000\nhistory_len = 300\n# graph glyphs: \"braille\" (default), \"block\", or \"ascii\" for fonts\n# without braille coverage\ngraphs = \"braille\"\n# hjkl-theme TOML; omit for the built-in theme\ntheme = \"/path/to/theme.toml\"\n```\n\nThemes use the [hjkl-theme](https://crates.io/crates/hjkl-theme) schema:\n`[palette]` of hex colors plus `[ui]` styles. Any hjkl theme file works — the\nmeters, waveform gradients, and highlights all derive from the palette.\n\n## Backends\n\n| Backend | Platform       | Source                           | Status |\n| ------- | -------------- | -------------------------------- | ------ |\n| nvml    | Linux, Windows | NVML (dynamic load)              | done   |\n| amdgpu  | Linux          | sysfs `/sys/class/drm` + fdinfo  | done   |\n| intel   | Linux          | i915/xe fdinfo + hwmon           | done   |\n| pdh     | Windows        | GPU Engine/Adapter Memory + DXGI | done   |\n| ioaccel | macOS          | IOAccelerator PerfStats (IOKit)  | done   |\n| mock    | all            | deterministic waves (`--mock`)   | done   |\n\nProbe order: nvml → amdgpu → intel → ioaccel → pdh. Intel utilization is derived\nfrom per-client fdinfo engine counters (i915 busy-ns, xe cycles) the same way\nnvtop does it; power comes from the hwmon energy counter delta. PDH is the\nvendor-generic Windows fallback (Task Manager's counters) and reports\nutilization and memory only.\n\nBackend poll failures degrade gracefully: the last snapshot stays on screen with\na header warning until polling recovers — a driver reset won't kill the monitor.\n\nExtras: each GPU card shows session peaks/averages (util, temp, power) when tall\nenough, and the PCIe caption flags a link running below its maximum\n(`PCIe 3.0@8x (max 4.0@16x)`) — a classic symptom of a bad riser or wrong slot.\n\nEncoder/decoder activity shows in each card (split `enc`/`dec` on\nNVIDIA/Windows, unified `video` on AMD/Intel), and a red throttle badge appears\nwhen the GPU is thermal- or power-limited (real reasons on NVIDIA, at-limit\nheuristic on AMD).\n\nPlanned depth: Apple temperature/power (SMC/IOReport), Windows AMD ADLX\n(temps/fans/clocks).\n\n## Per-process GPU attribution\n\nThe process table (PID, user, device, type, GPU%, GPU memory, CPU%, host memory,\ncommand) works on Linux (AMD + Intel via `/proc` fdinfo — same-user processes\nunless run as root), NVIDIA everywhere (NVML), and Windows (PDH per-pid\ncounters). macOS has no public per-process GPU API. On Linux, containerized\nprocesses get a CONTAINER column (docker/podman/k8s id from cgroups).\n\nRecorded sessions replay: `gpur --log run.jsonl` while it happens, then\n`gpur --replay run.jsonl` anywhere — including machines with no GPU — with the\nrecorded process attribution intact. Ideal for bug reports.\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkryptic-sh%2Fgpur","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkryptic-sh%2Fgpur","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkryptic-sh%2Fgpur/lists"}