|
3 | 3 | Pulldash |
4 | 4 | </h1> |
5 | 5 |
|
6 | | -Review pull requests in a high-performance UI, driven by keybinds. |
| 6 | +Fast, filterable PR review. Entirely client-side. |
7 | 7 |
|
8 | 8 | > [!WARNING] |
9 | 9 | > Pulldash is in alpha. Please report bugs. |
10 | 10 |
|
11 | 11 | [](https://pulldash.com) |
12 | 12 |
|
13 | | -## Try |
| 13 | +## Why |
14 | 14 |
|
15 | | -**Browser**: on [pulldash.com](https://pulldash.com) [no auth required] |
| 15 | +- GitHub's review UI is slow |
| 16 | +- No way to filter PRs by repo or query |
| 17 | +- AI tooling means more PRs than ever |
16 | 18 |
|
17 | | -> [!NOTE] |
18 | | -> GitHub tokens are stored in your browser, never on the Pulldash server post-authentication. |
| 19 | +## Try It |
19 | 20 |
|
20 | | -**Desktop**: download the [latest release](https://github.com/coder/pulldash/releases) available for Linux, macOS, and Windows. |
| 21 | +**Browser**: [pulldash.com](https://pulldash.com). Replace `github.com` with `pulldash.com` in any PR URL. |
21 | 22 |
|
| 23 | +**Desktop**: [Latest release](https://github.com/coder/pulldash/releases) for Linux, macOS, Windows. |
22 | 24 |
|
23 | 25 | ## Features |
24 | 26 |
|
25 | | -- Customize your PR list with search queries: |
| 27 | +- **Custom filters**: Save queries like `repo:org/frontend is:open`. Focus on what matters. |
26 | 28 |
|
27 | 29 |  |
28 | 30 |
|
29 | | -- Use keybinds to add/remove comments, select line ranges, switch files, and submit reviews: |
| 31 | +- **Keyboard-driven**: `j`/`k` to navigate files, arrows for lines, `c` to comment, `s` to submit. |
30 | 32 |
|
31 | 33 |  |
32 | 34 |
|
33 | | -- Instantly search across files: |
| 35 | +- **Fast file search**: `Ctrl+K` to fuzzy-find across hundreds of changed files. |
34 | 36 |
|
35 | 37 |  |
36 | 38 |
|
37 | | -## Why not GitHub's UI? |
| 39 | +## How It Works |
38 | 40 |
|
39 | | -GitHub supports [CORS](https://docs.github.com/en/rest/using-the-rest-api/using-cors-and-jsonp-to-make-cross-origin-requests) for their API, making Pulldash a simple UI wrapper with some nicities: |
| 41 | +GitHub's API supports [CORS](https://docs.github.com/en/rest/using-the-rest-api/using-cors-and-jsonp-to-make-cross-origin-requests), so Pulldash runs entirely client-side. No backend proxying your requests. |
40 | 42 |
|
41 | | -- Filtering on repositories you care about. |
42 | | -- Opening large files in GitHub is slow (Pulldash performs all diff parsing and syntax highlighting in worker threads). |
43 | | -- GitHub lacks comprehensive keybinds that allow you to be fully keyboard-driven. |
| 43 | +- **Web Worker pool**: Diff parsing and syntax highlighting run in workers sized to `navigator.hardwareConcurrency`. The main thread stays free for scrolling. |
| 44 | + |
| 45 | +- **Pre-computed navigation**: When a diff loads, we index all navigable lines. Arrow keys are O(1)—no DOM queries. |
| 46 | + |
| 47 | +- **External store**: State lives outside React ([`useSyncExternalStore`](https://react.dev/reference/react/useSyncExternalStore)). Focusing line 5000 doesn't re-render the file tree. |
| 48 | + |
| 49 | +- **Virtualized rendering**: Diffs, file lists, and the command palette only render visible rows. |
| 50 | + |
| 51 | +## Development |
| 52 | + |
| 53 | +```bash |
| 54 | +bun install |
| 55 | +bun dev |
| 56 | +``` |
44 | 57 |
|
45 | 58 | ## License |
46 | 59 |
|
|
0 commit comments