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