raycast-extensions

Build Raycast extensions using React and Node.js. Use for creating commands, UI components (List, Form, Grid), hooks (useFetch), AI integration, and manifest configuration.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "raycast-extensions" with this command: npx skills add nweii/agent-stuff/nweii-agent-stuff-raycast-extensions

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

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Automation

suggest-lucide-icons

No summary provided by upstream source.

Repository SourceNeeds Review
-125
nweii
Automation

archive-conversation

No summary provided by upstream source.

Repository SourceNeeds Review
Automation

aid-finances

No summary provided by upstream source.

Repository SourceNeeds Review