# What works

> What Redcast supports from the Raycast API, how well it works in practice, and the known gaps.

## How well it works

The inherited development fixture measured 37 installed extensions:

**32 of 37 extensions and 114 of 147 view commands opened and rendered in that fixture.** This is a historical sample, not a current guarantee for every Store version.

## Supported

**Components.** `List` and `Grid` with sections, empty views, item details and search bar dropdowns.
`Detail` with `Metadata`. `Form` with every field type: text, password, text area, checkbox,
dropdown, tag picker, date picker, file picker, separator and description. `ActionPanel` with
sections and submenus, and `Action` with all its built-in variants. Older names still used by
published extensions also work.

**APIs.** `Clipboard`, `LocalStorage`, `Cache`, `environment`, `getPreferenceValues`, `showToast`,
`showHUD`, `confirmAlert`, `closeMainWindow`, `popToRoot`, `clearSearchBar`, `open`, `trash`,
`showInFinder`, `getApplications`, `getDefaultApplication`, `getFrontmostApplication`,
`getSelectedText`, `getSelectedFinderItems`, `launchCommand`, `updateCommandMetadata`,
`openExtensionPreferences`, `OAuth`, `useNavigation`, `Icon`, `Color`, `Image.Mask`,
`Keyboard.Shortcut.Common`, `LaunchType`.

**Sign-in with OAuth.** Extensions like GitHub sign you in through your browser, and the palette
comes back when you finish. Sign in from one of the extension's commands first: a background
refresh or menu bar item can't start a sign-in on its own.

**Node built-ins.** `path`, `fs` and `fs/promises`, `os`, `child_process`, `crypto`, `zlib`,
`http` and `https`, `stream`, `util`, `events`, `buffer`, `url`, `querystring`, `punycode`,
`assert`, `string_decoder` and `timers`. Other built-ins load without errors and only fail when
they're actually used.

`http` and `https` requests use the same code as `fetch`, so libraries like axios and node-fetch
work. Streams are fully implemented, so pipelines like `fetch` → file work from start to finish.

**Bundled Swift helpers**, like Color Picker's, run normally.

**Command modes.** `view` commands appear in the palette. `no-view` commands run in the background
with the palette closed. A `no-view` command with an `interval` can refresh on a schedule; see
[Background refresh](/docs/extensions/customising#background-refresh). `menu-bar` commands show
native menu items and refresh on their manifest interval, without keeping JavaScript in memory
between runs; see [Menu bar commands](/docs/extensions#menu-bar-commands).

**`raycast://` links** are handled inside Redcast. Redcast registers this link type; if Raycast is
also installed, macOS decides which app receives those links. A link to an installed extension command
runs that command, whether it comes from another app, the browser or an extension, with its `arguments`,
`fallbackText` and `launchType` applied. `tinycast://` links work the same way. Any other link
reopens the palette, since passing it on would open Raycast itself.

## Supported in the current runtime

The runtime also supports **WebSocket**, streamed child-process stdout/stderr, and the [extension AI bridge](/docs/extensions/ai). These additions do not make it a complete Node.js process.

## Known limitations

| Gap | Behavior |
| --- | --- |
| BrowserExtension and WindowManagement services | Imports can resolve, but unsupported calls report a reason |
| Extension-provided model catalogs and tools/ entry points | Not surfaced |
| Automatic AI from a timer or menu render | Cannot spend tokens; AI is tied to an allowed user-started command or clicked menu item |
| WebSockets with untrusted TLS certificates | macOS still validates certificates; rejectUnauthorized: false does not bypass it |
| Aborting an in-flight fetch | The caller receives AbortError, but the underlying network task can finish |
| Interactive spawn stdin | Initial input is sent when starting; later writes are not an interactive terminal |
| Streaming HTTP and server-sent events | The network body arrives as a whole, so there is no true socket-level stream or download progress |
| Raw net and tls sockets | Not bridged as general raw sockets |

If a command depends on a missing API, report the extension and command name with the displayed error. A successful install or rendered first screen does not establish that every action works.
