github-search-cli 9.1.0 → 9.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -22,14 +22,15 @@
22
22
  npm install -g github-search-cli
23
23
  ```
24
24
 
25
- > **No separate runtime needed!** The package bundles a Bun binary, so the TUI
26
- > works out of the box on Windows, macOS, and Linux — no Node FFI, no `--experimental-ffi`.
25
+ > **No separate runtime needed!** Only requires Node.js 20+. The TUI needs Bun,
26
+ > which is downloaded automatically at install time. Non-interactive modes work
27
+ > with just Node.js.
27
28
  >
28
- > | Runtime | TUI | CLI modes |
29
- > | ----------- | --- | --------- |
30
- > | Bundled Bun | ✅ | ✅ |
31
- > | System Bun | ✅ | ✅ |
32
- > | Node 20+ | ✅ | ✅ |
29
+ > | Platform | TUI | CLI modes |
30
+ > | --------------------- | ---------------- | --------- |
31
+ > | Node 20+ | ⚠ Bun required | ✅ |
32
+ > | Bun | ✅ | ✅ |
33
+ > | Downloaded Bun | ✅ auto-installed| ✅ |
33
34
 
34
35
  ## Use
35
36
 
@@ -191,19 +192,38 @@ cd ghfind
191
192
  # With Bun (recommended for TUI)
192
193
  bun install
193
194
  bun start # TUI
194
- bun test # 102 tests
195
+ bun test # 131 tests
195
196
  bun run build # build dist/
196
197
 
197
198
  # Or with npm
198
199
  npm install
199
- npm start # TUI (requires Node 20-22 for native FFI)
200
- npm test # vitest (TUI render test needs Bun)
200
+ npm start # TUI (requires Node 20+)
201
+ npm test # 131 tests
201
202
  npm run build # build dist/
202
203
  ```
203
204
 
204
205
  ---
206
+ ### Unreleased
207
+ - Fixed trending tabs (Today / This Week / This Month) returning the same repos — cache key now includes the `since` parameter so each period fetches independently
208
+ - Added cyan underline indicator beneath the active trending tab for clearer visual selection
209
+ - Added `ghfind --compare <repo1> <repo2> [repo3]` CLI command to compare repos side-by-side
210
+ - Added `c` keybinding in TUI to toggle compare mode on selected repo
211
+ ---
212
+ ### v0.9.2
213
+
214
+ - Remove bundled Bun binary from npm package (now downloaded at install time for all platforms)
215
+ - Package size reduced from 39.5 MB to 100 KB
216
+ - Postinstall no longer fails npm install on Bun download failure (graceful fallback)
217
+ - Removed `bun` from engines field (users no longer need Bun pre-installed)
218
+ - Non-interactive modes (`--json`, `--csv`, etc.) work with just Node.js 20+
219
+
220
+ ### v0.9.1
221
+
222
+ - bug fix TUI layout issues on small terminals
223
+ - npm package search(beta)
224
+ - a new landing screen
205
225
 
206
- ### v9.1.0
226
+ ### v0.9.0
207
227
 
208
228
  - Bundle `vendor/` and `dist/` in npm package for offline install support
209
229
  - Remove dead Strategy 3 fallback in `bin/ghfind.js` (Node cannot import `.ts`)
package/bin/ghfind.js CHANGED
@@ -3,9 +3,9 @@
3
3
  * ghfind — npm bin entry point.
4
4
  * Requires Node.js >= 20 or Bun.
5
5
  *
6
- * Uses the bundled Bun binary (vendor/bun.exe) to run the TypeScript source
7
- * directly, so users don't need to install Bun separately. Falls back to
8
- * the bundled dist/cli.js if present, or system Bun/Node.
6
+ * Strategy 1: Use a Bun binary from vendor/ (downloaded by postinstall) to
7
+ * run TypeScript source directly. Strategy 2: Fall back to the bundled
8
+ * dist/cli.js with Node.js (works for non-interactive modes).
9
9
  */
10
10
  import { existsSync } from "fs";
11
11
  import { spawnSync } from "child_process";
@@ -7,7 +7,7 @@ _ghfind() {
7
7
  cur="${COMP_WORDS[COMP_CWORD]}"
8
8
  prev="${COMP_WORDS[COMP_CWORD-1]}"
9
9
 
10
- opts="--json --csv --markdown --count --limit --sort --token --trending --since --pipe --format --watch --interval --version --help --completion"
10
+ opts="--json --csv --markdown --count --limit --sort --token --trending --since --pipe --format --registry --watch --interval --version --help --completion pkg"
11
11
 
12
12
  case "${prev}" in
13
13
  --sort)
@@ -30,6 +30,10 @@ _ghfind() {
30
30
  COMPREPLY=( $(compgen -W "bash zsh fish" -- "${cur}") )
31
31
  return 0
32
32
  ;;
33
+ --registry)
34
+ COMPREPLY=( $(compgen -W "npm" -- "${cur}") )
35
+ return 0
36
+ ;;
33
37
  --limit|--interval)
34
38
  return 0
35
39
  ;;
@@ -12,6 +12,8 @@ complete -c ghfind -l trending -d "Trending mode"
12
12
  complete -c ghfind -l since -d "Trending period" -r -f -a "daily weekly monthly"
13
13
  complete -c ghfind -l pipe -d "Pipe target" -r -f -a "clone open"
14
14
  complete -c ghfind -l format -d "Output format" -r -f -a "urls names ssh-urls clone-commands ids"
15
+ complete -c ghfind -l registry -d "Registry for pkg" -r -f -a "npm"
16
+
15
17
  complete -c ghfind -l watch -d "Watch mode"
16
18
  complete -c ghfind -l interval -d "Watch interval seconds" -r
17
19
  complete -c ghfind -l version -d "Print version"
@@ -15,6 +15,8 @@ _ghfind() {
15
15
  '--since[Trending period]:(daily weekly monthly)'
16
16
  '--pipe[Pipe target]:(clone open)'
17
17
  '--format[Output format]:(urls names ssh-urls clone-commands ids)'
18
+ '--registry[Registry for pkg]:(npm)'
19
+
18
20
  '--watch[Watch mode]'
19
21
  '--interval[Watch interval seconds]:seconds:'
20
22
  '--version[Print version]'
package/demo.svg CHANGED
@@ -12,55 +12,60 @@
12
12
  <rect width="100%" height="100%" fill="#0d0d1a"/>
13
13
 
14
14
  <!-- Window -->
15
- <rect x="12" y="10" width="876" height="783" fill="#1e1e2e" rx="8" filter="url(#shadow)"/>
16
- <rect x="12" y="10" width="876" height="36" fill="#181825" rx="8"/>
17
- <rect x="12" y="46" width="876" height="2" fill="#313244"/>
15
+ <rect x="12" y="10" width="876" height="783" fill="#1a1b26" rx="8" filter="url(#shadow)"/>
16
+ <rect x="12" y="10" width="876" height="36" fill="#16161e" rx="8"/>
17
+ <rect x="12" y="46" width="876" height="2" fill="#24283b"/>
18
18
 
19
19
  <!-- Traffic lights -->
20
- <circle cx="24" cy="28" r="5" fill="#f38ba8"/>
21
- <circle cx="42" cy="28" r="5" fill="#f9e2af"/>
22
- <circle cx="60" cy="28" r="5" fill="#a6e3a1"/>
23
- <text x="450" y="34" fill="#6c7086" font-family="'JetBrains Mono','Fira Code',monospace" font-size="13" text-anchor="middle">search-cli — terminal GitHub browser</text>
20
+ <circle cx="24" cy="28" r="5" fill="#f7768e"/>
21
+ <circle cx="42" cy="28" r="5" fill="#e0af68"/>
22
+ <circle cx="60" cy="28" r="5" fill="#9ece6a"/>
23
+ <text x="450" y="34" fill="#565f89" font-family="'JetBrains Mono','Fira Code',monospace" font-size="13" text-anchor="middle">ghfind — terminal GitHub browser</text>
24
24
 
25
25
  <g font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">
26
- <text x="14" y="62" fill="#6c7086" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">search-cli — GitHub repo browser [t]rending [/]search [g]raph [r]efresh [q]uit</text>
27
- <rect x="14" y="69" width="860" height="54.5" fill="#1e1e2e" stroke="#89b4fa" stroke-width="1" rx="3"/>
28
- <text x="22" y="88" fill="#89b4fa" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">&gt; language:TypeScript stars:&gt;1000</text>
29
- <text x="14" y="150.2" fill="#6c7086" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">sort: stars limit: 50 (s=cycle sort l=cycle limit)</text>
30
- <rect x="14" y="159.3" width="432" height="378" fill="#1e1e2e" stroke="#45475a" stroke-width="1" rx="3"/>
31
- <text x="22" y="177.5" fill="#89b4fa" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14"> Results </text>
32
- <rect x="18" y="178.20000000000002" width="424" height="20" fill="#2d5bcf" rx="3"/>
33
- <text x="24" y="198.5" fill="#ffffff" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">shadcn/ui ★ 78.5k</text>
34
- <text x="24" y="221.6" fill="#cdd6f4" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">vercel/next.js ★ 129k</text>
35
- <text x="24" y="244.7" fill="#cdd6f4" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">tailwindlabs/tailwindcss ★ 84.2k</text>
36
- <text x="24" y="267.8" fill="#cdd6f4" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">tauri-apps/tauri ★ 84.1k</text>
37
- <text x="24" y="290.9" fill="#cdd6f4" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">oven-sh/bun ★ 74.5k</text>
38
- <text x="24" y="314" fill="#cdd6f4" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">n8n-io/n8n ★ 54.4k</text>
39
- <text x="24" y="337.1" fill="#cdd6f4" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">astral-sh/ruff ★ 36.1k</text>
40
- <text x="24" y="360.20000000000005" fill="#cdd6f4" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">missive/emoji-mart ★ 8.8k</text>
41
- <text x="24" y="383.3" fill="#cdd6f4" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">sharkdp/bat ★ 50.3k</text>
42
- <text x="24" y="406.4" fill="#cdd6f4" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">BurntSushi/ripgrep ★ 48.8k</text>
43
- <text x="24" y="429.5" fill="#cdd6f4" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">jdx/mise ★ 14.3k</text>
44
- <text x="24" y="452.6" fill="#cdd6f4" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">nektos/act ★ 56.1k</text>
45
- <text x="24" y="475.70000000000005" fill="#cdd6f4" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">astral-sh/uv ★ 40.2k</text>
46
- <text x="24" y="498.8" fill="#cdd6f4" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">zed-industries/zed ★ 52k</text>
47
- <rect x="450" y="159.3" width="432" height="378" fill="#1e1e2e" stroke="#45475a" stroke-width="1" rx="3"/>
48
- <text x="456" y="177.5" fill="#a6e3a1" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14"> Details </text>
49
- <text x="458" y="198.5" fill="#6c7086" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">Name shadcn/ui</text>
50
- <text x="458" y="221.6" fill="#6c7086" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">Stars 78,500</text>
51
- <text x="458" y="244.7" fill="#6c7086" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">Forks 4,200</text>
52
- <text x="458" y="267.8" fill="#6c7086" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">Lang TypeScript</text>
53
- <text x="458" y="290.9" fill="#6c7086" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">Updated 2026-07-12</text>
54
- <text x="458" y="314" fill="#6c7086" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">Topics react, ui, components, shadcn</text>
55
- <text x="458" y="360.20000000000005" fill="#cdd6f4" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">Beautifully designed components built with Radix UI and</text>
56
- <text x="458" y="383.3" fill="#cdd6f4" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">Tailwind CSS.</text>
57
- <text x="458" y="429.5" fill="#89b4fa" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">https://github.com/shadcn/ui</text>
58
- <rect x="14" y="489" width="860" height="25" fill="#181825" rx="3"/>
59
- <rect x="14" y="489" width="860" height="2" fill="#45475a"/>
60
- <text x="18" y="521.9" fill="#6c7086" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">15,842 results (↑↓ nav Enter open o browser Ctrl+R history)</text>
61
- <rect x="338.79999999999995" y="70" width="5.76" height="16" fill="#89b4fa" opacity="0.8">
62
- <animate attributeName="opacity" values="0.8;0.1;0.8" dur="1s" repeatCount="indefinite"/>
63
- </rect>
26
+ <text x="14" y="62" fill="#565f89" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">ghfind — GitHub repo browser [t]rending [/]search [g]raph [r]efresh [q]uit</text>
27
+ <rect x="14" y="69" width="860" height="54.5" fill="#1a1b26" stroke="#7aa2f7" stroke-width="1" rx="3"/>
28
+ <text x="22" y="88" fill="#7aa2f7" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">&gt; language:TypeScript stars:&gt;1000</text>
29
+ <text x="14" y="150.2" fill="#565f89" font-family="'JetBrains Mono','Fira Code','Cascadia Code',monospace" font-size="14">sort: stars limit: 50 (s=cycle sort l=cycle limit)</text>
30
+ <rect x="14" y="159.3" width="432" height="378" fill="#24283b" stroke="#1f2335" stroke-width="1"/>
31
+ <!-- Search results list -->
32
+ <rect x="14" y="159.3" width="432" height="19" fill="#7aa2f7" opacity="0.15"/>
33
+ <text x="22" y="173" fill="#c0caf5">✓ facebook/react ★ 218k JavaScript</text>
34
+ <text x="22" y="193" fill="#c0caf5">✓ vercel/next.js ★ 116k TypeScript</text>
35
+ <text x="22" y="213" fill="#c0caf5">✓ microsoft/vscode ★ 158k TypeScript</text>
36
+ <text x="22" y="233" fill="#c0caf5">✓ tanstack/router ★ 15k TypeScript</text>
37
+ <text x="22" y="253" fill="#c0caf5">✓ tailwindlabs/tailwindcss ★ 81k TypeScript</text>
38
+ <text x="22" y="273" fill="#c0caf5">✓ denoland/deno ★ 93k Rust</text>
39
+ <text x="22" y="293" fill="#c0caf5">✓ oven-sh/bun ★ 65k TypeScript</text>
40
+ <text x="22" y="313" fill="#c0caf5">✓ sagoie/open-tui ★ 3.2k TypeScript</text>
41
+ <text x="22" y="333" fill="#e0af68">→ ghfind/cli ★ 4.8k TypeScript</text>
42
+ <text x="22" y="353" fill="#c0caf5">✓ biomejs/biome ★ 28k Rust</text>
43
+ <!-- ... more results ... -->
44
+ <text x="14" y="525" fill="#565f89"> 10 of 847 results [Page 1/85]</text>
64
45
 
46
+ <rect x="456" y="159.3" width="418" height="378" fill="#24283b" stroke="#1f2335" stroke-width="1"/>
47
+ <!-- Right panel: repo info -->
48
+ <text x="468" y="183" fill="#bb9af7" font-weight="bold">facebook/react</text>
49
+ <text x="468" y="203" fill="#565f89">React is a JavaScript library for building user interfaces</text>
50
+ <text x="468" y="228" fill="#e0af68">★ 218,847</text>
51
+ <text x="540" y="228" fill="#565f89"> Forks: 46,231</text>
52
+ <text x="468" y="248" fill="#9ece6a">License: MIT</text>
53
+ <text x="468" y="268" fill="#7aa2f7">Language: JavaScript</text>
54
+ <text x="468" y="293" fill="#c0caf5">Updated: today</text>
55
+ <text x="468" y="318" fill="#565f89">Topics: react, javascript, ui, frontend, framework</text>
56
+
57
+ <text x="468" y="348" fill="#7aa2f7" font-weight="bold">Description</text>
58
+ <text x="468" y="368" fill="#c0caf5">A declarative, efficient, and flexible JavaScript library</text>
59
+ <text x="468" y="383" fill="#c0caf5">for building user interfaces.</text>
60
+
61
+ <text x="468" y="413" fill="#7aa2f7" font-weight="bold">README Preview</text>
62
+ <text x="468" y="433" fill="#c0caf5"># React</text>
63
+ <text x="468" y="453" fill="#565f89"> A JavaScript library for building user interfaces</text>
64
+ <text x="468" y="478" fill="#565f89"> ──────────────────────────────────────────────────</text>
65
+ <text x="468" y="503" fill="#c0caf5">React lets you build user interfaces out of individual</text>
66
+ <text x="468" y="518" fill="#c0caf5">pieces called components.</text>
67
+
68
+ <rect x="456" y="545" width="418" height="40" fill="#16161e" stroke="#1f2335"/>
69
+ <text x="468" y="570" fill="#565f89"> [r]eadme [d]eepdive [→] open [h]elp [q]uit</text>
65
70
  </g>
66
- </svg>
71
+ </svg>
@@ -15,8 +15,7 @@ function cacheDir() {
15
15
  var DEFAULTS = {
16
16
  defaultSort: "best-match",
17
17
  defaultLimit: 50,
18
- theme: "premium-dark",
19
- // New default: premium dark with sharp edges
18
+ theme: "tokyo-night",
20
19
  cacheTtlSeconds: 300,
21
20
  defaultTab: "search"
22
21
  };