raycast-extensions

v2026.09.24

Build Raycast extensions — commands, List/Form/Grid views, hooks like useFetch, AI integration, manifest. Use when the user says 'raycast extension', 'add a raycast command', or is working in a project with @raycast/api and a Raycast manifest.

GitHub
Install command
npx skhub add nweii/raycast-extensions
Markdown
SKILL.md

Raycast Extension Development

Build Raycast extensions using React, TypeScript, and Node.js.

Quick Start

  1. Create extension: Run "Create Extension" command in Raycast
  2. Install & develop: npm install && npm run dev
  3. Edit: Modify src/index.tsx, changes hot-reload automatically
  4. Test: Extension appears at top of Raycast root search

Choosing a UI Primitive

NeedComponent
Searchable list of itemsList
Image gallery/gridGrid
User input collectionForm
Rich content displayDetail
Status bar presenceMenuBarExtra

Decision Tree

  1. Displaying items the user searches/filters?

    • Text-focused → List
    • Image-focused → Grid
  2. Collecting user input? → Form

  3. Showing detailed content? → Detail (supports markdown + metadata)

  4. Always-visible status bar? → MenuBarExtra

Core Patterns

List with ActionPanel

import { ActionPanel, Action, List } from "@raycast/api";

export default function Command() {
  return (
    <List>
      <List.Item
        title="Item"
        actions={
          <ActionPanel>
            <Action.CopyToClipboard content="Copied!" />
            <Action.OpenInBrowser url="https://raycast.com" />
          </ActionPanel>
        }
      />
    </List>
  );
}

Data Fetching

import { List } from "@raycast/api";
import { useFetch } from "@raycast/utils";

export default function Command() {
  const { data, isLoading } = useFetch<Item[]>("https://api.example.com/items");
  
  return (
    <List isLoading={isLoading}>
      {data?.map((item) => <List.Item key={item.id} title={item.name} />)}
    </List>
  );
}

AI Integration

import { AI, Clipboard } from "@raycast/api";

export default async function Command() {
  const answer = await AI.ask("Summarize this text");
  await Clipboard.copy(answer);
}

[!NOTE] AI requires Raycast Pro. Check access with environment.canAccess(AI).

References

For detailed documentation, see:

Examples

Runnable examples in examples/:

FilePattern
list-with-actions.tsxList + ActionPanel basics
list-with-detail.tsxList with detail panel
form-with-validation.tsxForm + useForm validation
detail-with-metadata.tsxDetail markdown + metadata
grid-with-images.tsxGrid layout
data-fetching.tsxuseFetch patterns
ai-integration.tsxAI.ask with streaming
menubar-extra.tsxMenuBarExtra interactions
Discovery
Tags

No tags published for this skill.

Version
Latest version metadata

Version

v2026.09.24

Published

Sep 24, 2026

Category

Uncategorized

License

MIT

Source path

skills/raycast-extensions

Default branch

master

Latest commit

5854362

Tree SHA

a823989