Skip to content

A categorized catalog of Raycast extensions

Terminal window - an after-hours dev project

TL;DR

Diagnosis

Raycast’s extension store has over 1,700 entries and no sensible way to browse them: no categories, 10 results per page. I could have worked around it by pulling data straight from the website (web scraping). But I didn’t want to break the terms of service or rely on something that would fall apart with the next change to the site’s layout. So I found the official GitHub repository where Raycast keeps data for all extensions. I forked it and wrote a script around it that pulls the data, categorizes it with GPT and publishes a ready catalog as a README.

flowchart TD
    subgraph Before["Before"]
        A1["Looking for an extension<br/>in the Raycast store"] --> A2["No categories,<br/>10 results per page"]
        A2 --> A3["Scroll through pages<br/>or guess the name"]
    end
    subgraph After["After"]
        B1["Fork of raycast/extensions<br/>+ a script merging the data"] --> B2["Categorization<br/>via the OpenAI API"]
        B2 --> B3["Catalog on GitHub,<br/>18 categories"]
    end

    classDef good    fill:#e6f2ea,stroke:none,color:#1f4d33,rx:14,ry:14
    classDef bad     fill:#faeaea,stroke:none,color:#5f2626,rx:14,ry:14
    classDef accent  fill:#27272a,stroke:#3f3f46,stroke-width:1px,color:#fafafa,rx:14,ry:14
    class A1,A2,A3 bad
    class B1,B2 good
    class B3 accent
    style Before fill:#fdf5f5,stroke:#e0c3c3,stroke-width:1px,color:#5f2626,rx:14,ry:14
    style After fill:#f2f8f3,stroke:#c2dcc8,stroke-width:1px,color:#1f4d33,rx:14,ry:14
    linkStyle default stroke:#a8a8b3,stroke-width:1.5px

What I did

Results

MetricValue
Extensions categorized1,716
Categories18
GitHub stars600
Forks12
Active maintenance~5 months (May–September 2024)

The problem

Why is the Raycast extension catalog hard to browse?

The store has no proper categories and shows only 10 extensions per screen. With over 1,700 entries, you have to scroll through dozens of pages or type the exact name into search. And if you don’t know what you’re looking for (which is often the case, because you’re only just discovering what Raycast can do), you have no sensible way to browse the store.

Why not web scraping?

Because it’s a fragile solution and borderline against the terms of service. The site can change at any moment and the scraper stops working. I also didn’t want to pull data from someone else’s website when the company publishes it itself. The official GitHub repository, where Raycast keeps the package.json of every extension, gave me the same data, and I could rely on it.

My role / scope

Process

Key decisions & trade-offs

ApproachRiskDecision
Scraping the Raycast websitebreaks the terms of service, fragile when the layout changesrejected
Forking the official GitHub repodepends on the package.json structure in the repochosen

How it turned out

The repo has 600 stars and 12 forks, but the last commit is from September 2024. Today it’s archived. Raycast’s official store still has no real browsing by category, only search and a few links in the footer, so the problem I was solving still exists. I didn’t continue, because maintaining the categorization next to a full-time job stopped being worth it. I ended this project deliberately.

What I took away