
Post to Threads, jump straight to any feed, download media from a post, check your analytics, and draw giveaway winners, all from Raycast.
Features • Requirements • Quick Start • Usage • Development
threads.com/share/… short link. A post Threads won't show to a signed-out visitor can't be downloaded..jpg.name (1).ext, and a download's content is written to a .part file that takes its real name only once it finishes.threads_basic, threads_manage_insights, and threads_read_replies permissions. Follow the token guide, then paste the token into Threads Access Token in the extension preferences. Tokens expire after 60 days./share/ link someone sent you.If "Finding Media" is slow: Threads sometimes takes 10–30 seconds to answer a request it hasn't seen from you recently. Open the post in a browser where you're signed in to Threads, Instagram, or Facebook, then run the download. It is usually much faster after that.
| Command | Mode | Description |
|---|---|---|
| Download Threads Media | no-view | Download images, videos, and voice posts from a post URL |
| Start a New Thread | view | Compose a post in a form, with an optional link |
| Quick Post | no-view | Post straight from the Raycast bar |
| Quick Follow | no-view | Follow an account by username |
| View Profile | no-view | Open a profile |
| Search | no-view | Search Threads by keyword or hashtag, sorted by top or recent |
| My Feeds | no-view | Open For You, Following, Liked, or Saved |
| Activity | no-view | Open any activity tab — replies, mentions, quotes, reposts, and more |
| Insights | no-view | View account insights over 7, 14, 30, or 90 days |
| Analytics | view | Raw account and post metrics from the Threads API |
| Analytics Menu Bar | menu-bar | A Threads metric in the menu bar, refreshed every 30 minutes |
| Giveaway | view | Draw winners from the replies to one of your posts |
| Action | Shortcut | Description |
|---|---|---|
| Show in Finder | ⌘ O | Reveal a completed download |
| Copy Path | ⌘ ⇧ C | Copy the saved file's path |
| Copy Error | — | Copy the details of a failure, for a bug report (⌘ ⇧ C in the Analytics and Giveaway error views) |
| Preference | Values | Default |
|---|---|---|
| Threads Access Token | a token | — |
| Debug Logging | on / off | off |
| Strict Redaction | on / off | off |
| Media Download Path | a folder | ~/Downloads |
| Image Format | Original / JPEG / PNG | Original |
Media Download Path and Image Format are preferences of the Download Threads Media command — expand it in the extension's settings to find them. Analytics Menu Bar has its own Menu Bar Title (follower count by default, or views, likes, replies, your latest post, or icon only) and Period (last 7 days by default).
raycast-threads/
├── src/
│ ├── download-thread-media.tsx # downloads a post's media
│ ├── analytics*.tsx, giveaway.tsx # Threads API commands (need a token)
│ ├── new-thread.tsx # compose form
│ ├── *.tsx # URL-builder commands
│ └── lib/
│ ├── threads-post.ts # resolves a link to its media
│ ├── threads-api.ts # Threads Graph API client
│ ├── media-files.ts # paths, conversion, extensions
│ ├── download-media.ts # streams a download to disk
│ └── *.test.ts # vitest, colocated
├── assets/ # extension icon (runtime)
├── media/ # README images
├── metadata/ # Store screenshots
├── package.json
└── tsconfig.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 test | Run the test suite — no network |
npm run test:live | Resolve real posts against threads.com |
npm run publish | Publish to the Raycast Store |
git clone https://github.com/chrismessina/raycast-threads.git
cd raycast-threads
npm install
npm run dev
See AGENTS.md for how media resolution works and why it is shaped the way it is.
| Package | Role |
|---|---|
@raycast/api | Raycast extension primitives |
@chrismessina/raycast-kit | Failure toasts with a Copy Error action, byte formatting, plurals |
@chrismessina/raycast-logger | Structured logging; Debug Logging adds detail, errors always log |
MIT © Chris Messina
Go To Threads Feed
View Threads Activity
Quickly create a new post on Threads.
Search Threads
Create a new post on Threads.
Quickly follow an account on Threads
View a Threads user profile
View account insights
Download images, videos, and voice posts from a Threads post URL
View raw account and post metrics from the Threads API.
Show your follower count and recent post metrics in the menu bar.
Draw giveaway winners from a post's replies.
Download Threads Media leaving its progress toast stuck partway (e.g. "Downloading
Media 1 of 2 — 66%") after every file had already saved. The toast now always ends on the
final result.Download Threads Media, which had stopped working for every post. Both third-party
services it relied on are gone — api.threadsphotodownloader.com no longer resolves in
DNS, and DolphinRadar returns "Post not found" for public posts — and the resulting
failure was reported as the misleading "No images or videos found in this Threads post".
Media is now read from Threads directly.threads.com/share/… short links, which are resolved to the canonical
post URL before downloading.DdCYkFvlDvi.mp4) instead of a truncated CDN path..jpg in the URL, so downloads were landing as .jpg files that were really
WebP, which several macOS apps refuse to open.sips, and the original is kept if it fails).@chrismessina/raycast-logger..m4a
rather than the .mp4 the server's content type claims, because the bytes are AAC audio
with no video track.name (1).ext.@raycast/api 2.x and drop the unused cheerio, node-fetch, and axios
dependencies.View Profile command to quickly view any user's profileInsights command to view account insightsDownload Threads Media command.Download Threads Media command to download media from Threads.Download Threads Media command to download medias from Threads.