Extension Icon

Fetch

Download one or many files with curl: batch downloads, URL range patterns, and download history.
Overview
Fetch

Fetch

Raycast Store Licence MIT Follow @chrismessina Stars

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


Features

  • Downloads keep running after you close Raycast — each transfer is handed to a background process that outlives the command, so dismissing the window does not kill a download in progress.
  • Real filenames, not 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.
  • Batch downloads from messy input — paste one URL per line, a wall of prose with links in it, or markdown links. Duplicates are removed. A live list shows per-file status, percentage, and speed.
  • Curl-style range patterns — 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.
  • Nothing silently overwrites — a colliding filename gets a (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.
  • Interrupted transfers can resume — a partial file is kept and continued with an HTTP range request, validated against the server's ETag so a changed file restarts instead of corrupting.
  • History with the actions you actually want — the last 100 downloads, with open, reveal in Finder, copy URL, copy path, and re-download. Failed entries keep their error message.
  • Import every open browser tab with ⌘⇧B, via the Raycast browser extension.

Requirements


Quick Start

  1. Copy a URL to your clipboard
  2. Open Raycast and search for "Download" — the clipboard URL is used automatically if you do not type one
  3. The file lands in ~/Downloads (or wherever you point Output Directory), and the completion toast offers Show in Finder and Open File

Usage

Commands

CommandModeDescription
Downloadno-viewDownloads a single URL taken from the argument or the clipboard. A range pattern hands off to Download Batch automatically.
Download BatchviewDownloads many URLs at once with a live progress list. Pre-fills from the clipboard.
Download HistoryviewThe last 100 downloads, with actions for each.

Actions

ActionShortcutDescription
Show in Finder⌘ ⏎Reveals the finished file
Open File⌘ OOpens it in the default application
Import URLs from Browser Tabs⌘ ⇧ BAppends every open tab to the batch form
Retry⌘ RRe-runs a failed download
Cancel / Cancel All⌃ X / ⌘ ⇧ .Stops one download, or every running download
Copy Error⌘ ⇧ ECopies the failure message
Delete Entry⌃ XRemoves a history entry — the downloaded file is left alone

Preferences

PreferenceValuesDefault
Output Directoryany folder~/Downloads
Overwrite Existingon / offoff
Follow Redirectson / offon
Stall Timeoutseconds300
Max Parallel Downloads1–103
Debug Loggingon / offoff
Strict Redactionon / offoff

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.


Development

Project Structure

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

Scripts

ScriptDescription
npm run devStart in development mode with hot reload
npm run buildBuild for production
npm run lintRun Raycast ESLint config
npm run fix-lintAuto-fix lint issues
npm run publishPublish to the Raycast Store

ray build bundles with esbuild and does not typecheck — run npx tsc --noEmit separately.

Clone & Run

git clone https://github.com/chrismessina/raycast-fetch.git
cd raycast-fetch
npm install
npm run dev

Tech Stack

PackageRole
@raycast/apiRaycast extension primitives
@chrismessina/raycast-downloaderDetached download runner, resume, failure classification
@chrismessina/raycast-kitFailure toasts with a Copy Error action, count formatting
@chrismessina/raycast-loggerLogging gated on the Debug Logging preference

MIT © Chris Messina