How the Raycast API and extensions work
Blog post from Raycast
Raycast, a native macOS app, has developed an extension API to allow developers to customize the platform and create shareable extensions without making them feel secondary. Initially, Raycast used TypeScript and JavaScriptCore to run extensions but faced limitations with library compatibility and user experience. To overcome these, the team pivoted to using React on Node.js, allowing for a more familiar development environment and broader library access. Extensions run in isolated processes using Node's worker threads to maintain stability and security, while communication with Raycast is facilitated through JSON-RPC. The development experience is enhanced through a command line interface, enabling seamless testing and deployment of extensions. Raycast's API evolves based on user feedback, with new features added to enable more complex extensions, including menu bar commands and AI functionalities. The extensions are reviewed and open-sourced to ensure quality and transparency, fostering a thriving community and enabling the development of hundreds of extensions so far.