Tinycast
Extensions

What works

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

How well it works

We tested Tinycast against the 37 extensions installed in Raycast on the development Mac:

32 of 37 extensions, and 114 of 147 view commands, open and render.

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. HTTP over a Unix socket works too, which is how Docker's extension reaches its daemon. Streams are fully implemented, so pipelines like fetch → file work from start to finish. child_process.spawn streams the command's output as it runs.

WebSockets. The WebSocket global and the bundled ws package both connect, so extensions like Home Assistant get live updates. Names ending in .local, like homeassistant.local, resolve through macOS.

Bundled packages. Extensions that ship their own node_modules load those packages, and createRequire, WebAssembly and SharedArrayBuffer work.

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. menu-bar commands show native menu items and refresh on their manifest interval, without keeping JavaScript in memory between runs; see Menu bar commands.

raycast:// links are handled inside Tinycast. Tinycast 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, launchType and context applied. tinycast:// links work the same way. A Raycast Store Install link opens Search extensions on that extension. Any other link reopens the palette, since passing it on would open Raycast itself.

Not supported yet

GapWhy
AI, BrowserExtension, WindowManagementThese are Raycast services with no local equivalent. Using one fails with a clear message
A WebSocket to a server macOS doesn't trustCertificate checks can't be turned off, so the connection fails
Canceling a fetch in progressThe caller gets its AbortError, but the request still finishes in the background
Writing to a running child_process.spawnInput is sent once, when the command starts. Later writes are dropped
Streaming HTTPResponses arrive all at once, so server-sent events and download progress don't work
net and tlsLoad without errors, but fail when used
AI tools (tools/)Not shown

If an extension needs something that's missing, it tells you when you run it instead of failing silently or showing a broken screen.

On this page