npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

raycast-scaffold

v1.0.4

Published

CLI to scaffold Raycast extensions

Readme

Raycast Scaffold CLI

Raycast is an incredible software for Mac find out more here

They have a great way of building extensions to further extend their software but it involves having to write a lot of files and boilerplate code.

What if there was a simpler way?

This is why I built this simple npx command called Raycast Scaffold, it allows you to write out your basic extension in a YAML file!

Getting started

To get started you need to create a new Raycast Extension using either their CLI or via their launcher.

Then the next step is to open up a new terminal in that folder and run the following command:

npx raycast-scaffold@latest init .

This will then create a new file called extension.yml in the root directory, this is where you'll be crafting your extension.

Here is an example of what the YAML file might look like:

name: test
types:
	project:
		type: local
		title: name
		properties:
			id:
				type: string
				hidden: true
    		name:
				type: string
    		description:
				type: string

As you can see there is a types array, think of types as models or classes, so for example if you're wanting to create an extension for a basic todo tracker then you'll have likely have two types:

  • List
  • Todo

Each type will have the type property which tells the script where to retrieve and update the data from, this can be set to the following option(s):

"local"

This means it'll be using Raycast's LocalStorage system to store this type locally on your machine.

"api"

This is coming soon but will eventually allow you to use API CRUD endpoints.

You'll also need to specify the title property which should be mapped to the name of one of the properties, this is used when generating the list in the Raycast extension and will be used to display the type's property value.

You can also optionally add the subtitle property which should be mapped to the name of one of the properties, this is used when generating the list in the Raycast extension and will be used as the subtitle of the list itam and display the type's property value.

Then you can add the properties key with a value of object, this is where you assign all the properties for the type.

Here's an example:

properties:
    id:
		type: string
    name:
		type: string
    description:
		type: string

This tells the script you want to use id, name and description for your type.

You can also add in hidden: true for each property if you don't want it visible when using the Create New type commands

Relationships

You can also use relationships, here's an example:

types:
app:
	type: local
	title: name
	properties:
	id:
		type: string
		hidden: true
	name:
		type: string
project:
	type: local
	title: name
	subtitle: appID
	properties:
	id:
		type: string
		hidden: true
	appID:
		type: app
		title: Select App
		display: name
		value: id
	name:
		type: string

See the property appID, I have the type set to app, which tells the script I'm referencing the app type, then I have the title, this is what is displayed for the dropdown in the create new type form.

Then finally there's the display and value properties, the value is set to the property name "id" of the app type which is used as the value to be stored in the project type, the display property is what is shown in the dropdown as a visual cue for the end user to choose between the options, in this example it's set to the property name "name" of the app type.

How to build

To generate all the files for your extension after you've crafted the YAML file, you need to run the following command in the root directory of the extension:

npx raycast-scaffold@latest build . 

This will then build the extension files for you including the A.I tools as well!

Then the last step is to run the following command for Raycast to compile and then start running the extension locally on your machine:

npm run dev