github-search-cli 0.7.0 → 0.8.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
@@ -1,183 +1,163 @@
1
- # search-cli
2
-
3
- > Browse, search, and trend GitHub repos from your terminal. No browser needed.
4
-
5
- <p align="center">
6
- <img src="https://raw.githubusercontent.com/codersdfs/search-cli/main/demo.svg" alt="search-cli demo" width="100%">
7
- </p>
8
-
9
- ---
10
-
11
- ## Quick start
12
-
13
- ```bash
14
- # Requires Bun (https://bun.sh)
15
- npm install -g github-search-cli
16
-
17
- # Launch the interactive TUI browser
18
- search-cli
19
-
20
- # Non-interactive search (pipe to jq, csvkit, etc.)
21
- search-cli "language:Rust stars:>10000" --json | jq '.[].fullName'
22
- search-cli "language:Zig" --count
23
- search-cli --trending --json --since weekly
24
- ```
25
-
26
- ## CLI modes
27
-
28
- ```bash
29
- search-cli "query" --json # JSON array
30
- search-cli "query" --csv # CSV
31
- search-cli "query" --markdown # Markdown table
32
- search-cli "query" --count # Just the number
33
- search-cli "query" --format urls # One URL per line
34
- search-cli "query" --pipe open # Open each in browser
35
- search-cli "query" --pipe clone # Print clone commands
36
- search-cli --trending --json # Trending as JSON
37
- search-cli --watch "query" # Poll every 300s
38
- ```
39
-
40
- ### Shell completions
41
-
42
- ```bash
43
- source <(search-cli --completion bash) # Bash
44
- source <(search-cli --completion zsh) # Zsh
45
- search-cli --completion fish | source # Fish
46
- ```
47
-
48
- ### `gh` extension
49
-
50
- ```bash
51
- gh extension install ./gh-search-cli
52
- gh search-cli "language:Rust"
53
- ```
54
-
55
- ---
56
-
57
- ## Features
58
-
59
- | Category | What you get |
60
- |----------|-------------|
61
- | **Search** | Free-text + qualifiers (`language:`, `stars:`, `topic:`), sort by stars/updated/forks, Tab auto-complete |
62
- | **Trending** | Browse GitHub trending by day/week/month/year, filter by language |
63
- | **Memory** | Persistent history (`Ctrl+R`), bookmarks (`b`/`B`), saved searches (`Ctrl+S`/`Ctrl+O`), session restore |
64
- | **Deep-dive** | Per-repo detail: languages, top contributors, README preview (`d`) |
65
- | **Compare** | Select 2+ repos and compare side-by-side (`c`/`C`) |
66
- | **Explore** | Browse popular GitHub topics (`E`) |
67
- | **Export** | JSON, CSV, Markdown, plain text (`Ctrl+E`) |
68
- | **Shell** | Pipe-friendly output, `--watch` mode, shell completions, Docker |
69
- | **Delight** | 3 themes (Tokyo Night, Dracula, Monokai), animated status bar, clipboard share, startup tips |
70
-
71
- <details>
72
- <summary><b>⌨️ Full keybindings</b></summary>
73
-
74
- ### Main view
75
-
76
- | Key | Action |
77
- |-----|--------|
78
- | `/` | Focus search input |
79
- | `Enter` | Execute search / open repo |
80
- | `↑`/`↓` / `j`/`k` | Navigate results |
81
- | `t` | Toggle search / trending |
82
- | `s` | Cycle sort |
83
- | `l` | Cycle limit |
84
- | `r` | Refresh |
85
- | `g` | Toggle activity graph |
86
- | `d` | Toggle repo deep-dive |
87
- | `o` | Open repo in browser |
88
- | `b` / `B` | Toggle bookmark / open bookmarks |
89
- | `c` / `C` | Toggle compare list / show comparison |
90
- | `E` | Open topic explorer |
91
- | `Tab` | Auto-complete qualifier |
92
- | `?` / `Ctrl+H` | Help overlay |
93
- | `q` | Quit |
94
-
95
- ### Overlays
96
-
97
- | Key | Action |
98
- |-----|--------|
99
- | `Ctrl+R` | Search history |
100
- | `Ctrl+S` | Save current search |
101
- | `Ctrl+O` | Saved searches panel |
102
- | `Ctrl+E` | Export results |
103
- | `Ctrl+N` | Notifications |
104
- | `Ctrl+P` | Share repo (copy to clipboard) |
105
- | `PageDown` / `Ctrl+F` | Next page |
106
- | `Esc` | Close overlay |
107
-
108
- ### Trending mode
109
-
110
- | Key | Action |
111
- |-----|--------|
112
- | `1`–`5` | Switch tab (Today → Week → Month → Year → All) |
113
- | `←`/`→` / `h`/`l` | Navigate tabs |
114
- </details>
115
-
116
- ---
117
-
118
- ## Search syntax
119
-
120
- ```text
121
- language:Rust stars:>1000 topic:cli
122
- "machine learning" language:Python stars:>5000
123
- topic:cli -language:JavaScript
124
- org:rust-lang language:Rust
125
- ```
126
-
127
- Supported qualifiers: `language:`, `stars:`, `fork:`, `archived:`, `topic:`, `user:`, `org:`, `repo:`, `updated:`, `pushed:`, `visibility:`, `license:`, `created:`, `size:`, `in:`. Prefix with `-` to exclude.
128
-
129
- ---
130
-
131
- ## Configuration
132
-
133
- `~/.config/search-cli/config.json` (created automatically):
134
-
135
- ```json
136
- {
137
- "defaultSort": "stars",
138
- "defaultLimit": 50,
139
- "theme": "tokyo-night",
140
- "githubToken": "ghp_..."
141
- }
142
- ```
143
-
144
- Or run `search-cli init` for the interactive setup wizard.
145
-
146
- Environment variables: `GITHUB_TOKEN`, `SEARCH_CLI_CONFIG`, `XDG_CONFIG_HOME`, `XDG_STATE_HOME`.
147
-
148
- ---
149
-
150
- ## Install from source
151
-
152
- ```bash
153
- git clone https://github.com/codersdfs/search-cli.git
154
- cd search-cli
155
- bun install
156
- bun start # Launch TUI
157
- bun test # 104 tests
158
- bun run build # Compile binary → dist/
159
- ```
160
-
161
- ---
162
-
163
- ## Design
164
-
165
- ```
166
- CLI → QueryBuilder → Provider → Normalizer → Ranking → TUI / stdout
167
- ```
168
-
169
- | Layer | File | Job |
170
- |-------|------|-----|
171
- | Entry | `src/cli.ts` | Arg parsing, routes to TUI or stdout |
172
- | TUI | `src/tui.ts` | Interactive browser (OpenTUI) |
173
- | Query | `src/query.ts` | Parse keywords/qualifiers |
174
- | Provider | `src/provider.ts` | GitHub REST API with caching + token rotation |
175
- | Types | `src/types.ts` | Shared interfaces |
176
-
177
- The `SearchProvider` interface is the extension point for alternative backends (GitLab, local index, AI retriever).
178
-
179
- ---
180
-
181
- ## License
182
-
183
- MIT
1
+ # ghfind
2
+
3
+ > Search GitHub repos from your terminal. No browser needed.
4
+
5
+ <p align="center">
6
+ <img src="https://raw.githubusercontent.com/codersdfs/search-cli/main/demo.svg" alt="ghfind demo" width="100%">
7
+ </p>
8
+
9
+ ---
10
+
11
+ ## Install
12
+
13
+ ```bash
14
+ npm install -g github-search-cli
15
+ ```
16
+
17
+ > **No separate runtime needed!** The package bundles a Bun binary, so the TUI
18
+ > works out of the box on Windows, macOS, and Linux — no Node FFI, no `--experimental-ffi`.
19
+ >
20
+ > | Runtime | TUI | CLI modes |
21
+ > |---------|-----|-----------|
22
+ > | Bundled Bun | ✅ | ✅ |
23
+ > | System Bun | ✅ | ✅ |
24
+ > | Node 20–22 | ✅ | ✅ |
25
+ > | Node 23+ | ❌ | ✅ |
26
+
27
+ ## Use
28
+
29
+ ```bash
30
+ # TUI
31
+ ghfind
32
+
33
+ # pipe
34
+ ghfind "language:Rust stars:>1000" --json | jq '.[].fullName'
35
+ ghfind "language:Zig" --count
36
+ ghfind --trending --json --since weekly
37
+ ```
38
+
39
+ ### Non-interactive
40
+
41
+ ```bash
42
+ ghfind "query" --json # JSON
43
+ ghfind "query" --csv # CSV
44
+ ghfind "query" --markdown # Markdown
45
+ ghfind "query" --count # count only
46
+ ghfind "query" --format urls # one URL per line
47
+ ghfind "query" --pipe open # open in browser
48
+ ghfind "query" --pipe clone # clone commands
49
+ ghfind --trending --json # trending as JSON
50
+ ghfind --watch "query" # poll every 300s
51
+ ```
52
+
53
+ ### Completions
54
+
55
+ ```bash
56
+ source <(ghfind --completion bash)
57
+ source <(ghfind --completion zsh)
58
+ ghfind --completion fish | source
59
+ ```
60
+
61
+ ---
62
+
63
+ ## Features
64
+
65
+ <table>
66
+ <tr><td><b>Search</b></td><td>Free-text + qualifiers (<code>language:</code>, <code>stars:</code>, <code>topic:</code>), sort by stars/updated/forks</td></tr>
67
+ <tr><td><b>Trending</b></td><td>Today, week, month, year — filter by language</td></tr>
68
+ <tr><td><b>Bookmarks</b></td><td><code>b</code> / <code>B</code> — save repos, tag them</td></tr>
69
+ <tr><td><b>Deep-dive</b></td><td><code>d</code> — languages, contributors, README, activity chart</td></tr>
70
+ <tr><td><b>Compare</b></td><td><code>c</code> / <code>C</code> — side-by-side, select 2+ repos</td></tr>
71
+ <tr><td><b>Explore</b></td><td><code>E</code> — browse popular topics</td></tr>
72
+ <tr><td><b>History</b></td><td><code>Ctrl+R</code> — recall past searches</td></tr>
73
+ <tr><td><b>Export</b></td><td><code>Ctrl+E</code> — JSON, CSV, Markdown to file</td></tr>
74
+ <tr><td><b>Share</b></td><td><code>Ctrl+P</code> — copy to clipboard (markdown, plain, gh-cli)</td></tr>
75
+ <tr><td><b>Watch</b></td><td><code>--watch</code> — poll for new results</td></tr>
76
+ </table>
77
+
78
+ <details>
79
+ <summary>Keybindings</summary>
80
+
81
+ | Key | Action |
82
+ |-----|--------|
83
+ | `/` | Focus search |
84
+ | `Enter` | Search / open repo |
85
+ | `↑`/`↓` / `j`/`k` | Navigate |
86
+ | `t` | Toggle search / trending |
87
+ | `s` | Cycle sort |
88
+ | `l` | Cycle limit |
89
+ | `r` | Refresh |
90
+ | `d` | Deep-dive |
91
+ | `o` | Open in browser |
92
+ | `b` / `B` | Bookmark / bookmarks panel |
93
+ | `c` / `C` | Compare select / view |
94
+ | `E` | Topic explorer |
95
+ | `Tab` | Auto-complete qualifier |
96
+ | `?` / `Ctrl+H` | Help |
97
+ | `Ctrl+R` | History |
98
+ | `Ctrl+S` / `Ctrl+O` | Save / open searches |
99
+ | `Ctrl+E` | Export |
100
+ | `Ctrl+N` | Notifications |
101
+ | `Ctrl+P` | Share |
102
+ | `Esc` | Close overlay |
103
+ | `q` | Quit |
104
+
105
+ Trending tabs: `1`–`5` (Today → All) or `←`/`→` / `h`/`l`
106
+ </details>
107
+
108
+ ---
109
+
110
+ ## Search syntax
111
+
112
+ ```
113
+ language:Rust stars:>1000 topic:cli
114
+ "machine learning" language:Python stars:>5000
115
+ topic:cli -language:JavaScript
116
+ org:rust-lang language:Rust
117
+ ```
118
+
119
+ Prefix with `-` to exclude. Supported: `language`, `stars`, `fork`, `archived`, `topic`, `user`, `org`, `repo`, `updated`, `pushed`, `visibility`, `license`, `created`, `size`, `in`.
120
+
121
+ ---
122
+
123
+ ## Config
124
+
125
+ `~/.config/ghfind/config.json` (auto-created, or run `ghfind init`):
126
+
127
+ ```json
128
+ {
129
+ "defaultSort": "stars",
130
+ "defaultLimit": 50,
131
+ "theme": "tokyo-night",
132
+ "githubToken": "ghp_..."
133
+ }
134
+ ```
135
+
136
+ Env: `GITHUB_TOKEN`, `GHFIND_CONFIG`, `XDG_CONFIG_HOME`, `XDG_STATE_HOME`
137
+
138
+ ---
139
+
140
+ ## From source
141
+
142
+ ```bash
143
+ git clone https://github.com/codersdfs/search-cli.git
144
+ cd ghfind
145
+
146
+ # With Bun (recommended for TUI)
147
+ bun install
148
+ bun start # TUI
149
+ bun test # 102 tests
150
+ bun run build # build dist/
151
+
152
+ # Or with npm
153
+ npm install
154
+ npm start # TUI (requires Node 20-22 for native FFI)
155
+ npm test # vitest (TUI render test needs Bun)
156
+ npm run build # build dist/
157
+ ```
158
+
159
+ ---
160
+
161
+ ## License
162
+
163
+ MIT
package/bin/ghfind.js ADDED
@@ -0,0 +1,55 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * ghfind — npm bin entry point.
4
+ * Requires Node.js >= 20 or Bun.
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.
9
+ */
10
+ import { existsSync } from "fs";
11
+ import { spawnSync } from "child_process";
12
+ import { join, dirname } from "path";
13
+ import { fileURLToPath } from "url";
14
+ import { platform } from "os";
15
+
16
+ const __dirname = dirname(fileURLToPath(import.meta.url));
17
+ const PKG_DIR = join(__dirname, "..");
18
+
19
+ // Path to bundled Bun binary
20
+ const BUN_BIN = join(PKG_DIR, "vendor", platform() === "win32" ? "bun.exe" : "bun");
21
+
22
+ // Path to bundled dist
23
+ const distCli = join(PKG_DIR, "dist", "cli.js");
24
+
25
+ // Path to source
26
+ const srcCli = join(PKG_DIR, "src", "cli.ts");
27
+
28
+ // Strategy 1: Use bundled Bun to run source directly (always works, no Node FFI needed)
29
+ if (existsSync(BUN_BIN) && existsSync(srcCli)) {
30
+ const result = spawnSync(BUN_BIN, ["run", srcCli, ...process.argv.slice(2)], {
31
+ stdio: "inherit",
32
+ env: { ...process.env, GHFIND_BUNDLED: "1" },
33
+ });
34
+ process.exit(result.status ?? 0);
35
+ }
36
+
37
+ // Strategy 2: Use bundled dist/cli.js with Node (non-interactive only on Node 23+)
38
+ if (existsSync(distCli)) {
39
+ try {
40
+ await import(distCli);
41
+ } catch (err) {
42
+ console.error("Failed to start ghfind. Node.js >= 20 or Bun required.");
43
+ console.error(err instanceof Error ? err.message : String(err));
44
+ process.exit(1);
45
+ }
46
+ } else {
47
+ // Strategy 3: Fallback to system Bun/Node running source
48
+ try {
49
+ await import("../src/cli.ts");
50
+ } catch (err) {
51
+ console.error("Failed to start ghfind. Node.js >= 20 or Bun required.");
52
+ console.error(err instanceof Error ? err.message : String(err));
53
+ process.exit(1);
54
+ }
55
+ }
@@ -1,7 +1,7 @@
1
- # search-cli bash completion
2
- # Source: source <(search-cli --completion bash)
1
+ # ghfind bash completion
2
+ # Source: source <(ghfind --completion bash)
3
3
 
4
- _search_cli() {
4
+ _ghfind() {
5
5
  local cur prev opts
6
6
  COMPREPLY=()
7
7
  cur="${COMP_WORDS[COMP_CWORD]}"
@@ -40,4 +40,4 @@ _search_cli() {
40
40
  COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
41
41
  return 0
42
42
  }
43
- complete -F _search_cli search-cli
43
+ complete -F _ghfind ghfind
@@ -0,0 +1,19 @@
1
+ # ghfind fish completion
2
+ # Source: source (ghfind --completion fish | psub)
3
+
4
+ complete -c ghfind -l json -d "JSON output"
5
+ complete -c ghfind -l csv -d "CSV output"
6
+ complete -c ghfind -l markdown -d "Markdown table output"
7
+ complete -c ghfind -l count -d "Only result count"
8
+ complete -c ghfind -l limit -d "Max results" -r
9
+ complete -c ghfind -l sort -d "Sort strategy" -r -f -a "best-match stars updated forks"
10
+ complete -c ghfind -l token -d "GitHub token" -r
11
+ complete -c ghfind -l trending -d "Trending mode"
12
+ complete -c ghfind -l since -d "Trending period" -r -f -a "daily weekly monthly"
13
+ complete -c ghfind -l pipe -d "Pipe target" -r -f -a "clone open"
14
+ complete -c ghfind -l format -d "Output format" -r -f -a "urls names ssh-urls clone-commands ids"
15
+ complete -c ghfind -l watch -d "Watch mode"
16
+ complete -c ghfind -l interval -d "Watch interval seconds" -r
17
+ complete -c ghfind -l version -d "Print version"
18
+ complete -c ghfind -l help -d "Print help"
19
+ complete -c ghfind -l completion -d "Shell" -r -f -a "bash zsh fish"
@@ -1,7 +1,7 @@
1
- # search-cli zsh completion
2
- # Source: source <(search-cli --completion zsh)
1
+ # ghfind zsh completion
2
+ # Source: source <(ghfind --completion zsh)
3
3
 
4
- _search_cli() {
4
+ _ghfind() {
5
5
  local -a opts
6
6
  opts=(
7
7
  '--json[JSON output]'
@@ -24,4 +24,4 @@ _search_cli() {
24
24
  _arguments "${opts[@]}" '*:query:'
25
25
  }
26
26
 
27
- compdef _search_cli search-cli
27
+ compdef _ghfind ghfind
package/demo.svg CHANGED
@@ -1,66 +1,66 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 900 803" width="900" height="803">
3
- <defs>
4
- <style>
5
- @import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;700&amp;display=swap');
6
- </style>
7
- <filter id="shadow" x="-5%" y="-5%" width="115%" height="115%">
8
- <feDropShadow dx="0" dy="4" stdDeviation="8" flood-color="#000" flood-opacity="0.4"/>
9
- </filter>
10
- </defs>
11
-
12
- <rect width="100%" height="100%" fill="#0d0d1a"/>
13
-
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"/>
18
-
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>
24
-
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>
64
-
65
- </g>
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 900 803" width="900" height="803">
3
+ <defs>
4
+ <style>
5
+ @import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;700&amp;display=swap');
6
+ </style>
7
+ <filter id="shadow" x="-5%" y="-5%" width="115%" height="115%">
8
+ <feDropShadow dx="0" dy="4" stdDeviation="8" flood-color="#000" flood-opacity="0.4"/>
9
+ </filter>
10
+ </defs>
11
+
12
+ <rect width="100%" height="100%" fill="#0d0d1a"/>
13
+
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"/>
18
+
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>
24
+
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>
64
+
65
+ </g>
66
66
  </svg>