Download a link, a list of links, or a whole numbered sequence — without leaving Raycast or waiting on a browser window.
Features • Requirements • Quick Start • Usage • Development
download.bin — the name comes from the server's Content-Disposition header when it sends one, falling back to the URL path, and gains the right extension from the content type when the URL has none.https://example.com/file[001-025].zip expands into 25 downloads. Zero-padding is inferred from the start value, descending ranges work, and the batch form previews the expansion before you commit to it. (1) suffix unless you opt into overwriting, and concurrent downloads reserve their names up front so two files in the same batch can never collide.curl, which ships with macOS — there is nothing to install~/Downloads (or wherever you point Output Directory), and the completion toast offers Show in Finder and Open File| Command | Mode | Description |
|---|---|---|
| Download | no-view | Downloads a single URL taken from the argument or the clipboard. A range pattern hands off to Download Batch automatically. |
| Download Batch | view | Downloads many URLs at once with a live progress list. Pre-fills from the clipboard. |
| Download History | view | The last 100 downloads, with actions for each. |
| Action | Shortcut | Description |
|---|---|---|
| Show in Finder | ⌘ ⏎ | Reveals the finished file |
| Open File | ⌘ O | Opens it in the default application |
| Import URLs from Browser Tabs | ⌘ ⇧ B | Appends every open tab to the batch form |
| Retry | ⌘ R | Re-runs a failed download |
| Cancel / Cancel All | ⌃ X / ⌘ ⇧ . | Stops one download, or every running download |
| Copy Error | ⌘ ⇧ E | Copies the failure message |
| Delete Entry | ⌃ X | Removes a history entry — the downloaded file is left alone |
| Preference | Values | Default |
|---|---|---|
| Output Directory | any folder | ~/Downloads |
| Overwrite Existing | on / off | off |
| Follow Redirects | on / off | on |
| Stall Timeout | seconds | 300 |
| Max Parallel Downloads | 1–10 | 3 |
| Debug Logging | on / off | off |
| Strict Redaction | on / off | off |
Strict Redaction also masks every URL query string and fragment in the logs, not just values it recognizes as secrets by name. Turn it on before reproducing a problem you plan to share a log of.
Stall Timeout is an idle limit, not a time limit. It is the number of seconds a transfer may go without receiving any data before it is abandoned. A large file downloading slowly is left alone for as long as it keeps making progress.
The batch form's output directory overrides the preference for that batch only.
raycast-fetch/
├── src/
│ ├── download.ts # Single download (no-view)
│ ├── download-batch.tsx # Batch form + progress list
│ ├── download-history.tsx # History list
│ ├── lib/ # Downloader adapter, URLs, history, toasts, prefs
│ ├── views/ # List views
│ └── actions/ # Action panels
├── scripts/sync-runner.mjs # Copies the downloader runner into assets/
├── assets/ # Extension icon + runner bundle (runtime)
├── media/ # README images
└── package.json
| Script | Description |
|---|---|
npm run dev | Start in development mode with hot reload |
npm run build | Build for production |
npm run lint | Run Raycast ESLint config |
npm run fix-lint | Auto-fix lint issues |
npm run publish | Publish to the Raycast Store |
ray build bundles with esbuild and does not typecheck — run npx tsc --noEmit separately.
git clone https://github.com/chrismessina/raycast-fetch.git
cd raycast-fetch
npm install
npm run dev
| Package | Role |
|---|---|
@raycast/api | Raycast extension primitives |
@chrismessina/raycast-downloader | Detached download runner, resume, failure classification |
@chrismessina/raycast-kit | Failure toasts with a Copy Error action, count formatting |
@chrismessina/raycast-logger | Logging gated on the Debug Logging preference |
MIT © Chris Messina