# Developers 2 > ![](https://2922539984-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Me_8A39tFhZg3UaVoSN%2Fuploads%2Fgit-blob-25a03b5271959426230e724a733f30e7597dd1bf%2Faction-panel.webp?alt=me ## Pages - [Action Panel](action-panel.md): Exposes a list of [actions](https://developers.raycast.com/api-reference/user-interface/actions) that can be performe... - [Actions](actions.md): Our API includes a few built-in actions that can be used for common interactions, such as opening a link or copying s... - [AI](ai.md): The AI API provides developers with seamless access to AI functionality without requiring API keys, configuration, or... - [Alert](alert.md): When the user takes an important action (for example when irreversibly deleting something), you can ask for confirmat... - [Arguments](arguments.md): Raycast supports arguments for your commands so that users can enter values right from Root Search before opening the... - [Background Refresh](background-refresh.md): Commands of an extension can be configured to be automatically run in the background, without the user manually openi... - [Best Practices](best-practices.md): Network requests can fail, permissions to files can be missing… More generally, errors happen. By default, we handle ... - [Browser Extension](browser-extension.md): The Browser Extension API provides developers with deeper integration into the user's Browser *via* a [Browser Extens... - [Cache](cache.md): Caching abstraction that stores data on disk and supports LRU (least recently used) access. Since extensions can only... - [Changelog](changelog.md): Over the past few releases, we've made some additions to the API to better support it: - [CLI](cli.md): The CLI is part of the`@raycast/api`package and is automatically installed in your extension directory during setup... - [Clipboard](clipboard.md): Use the Clipboard APIs to work with content from your clipboard. You can write contents to the clipboard through [`Cl... - [Collaborate on Private Extensions](collaborate-on-private-extensions.md): Isn't it more fun to work with your colleagues together on your extension? For this, we recommend to share all your e... - [Colors](colors.md): Anywhere you can pass a color in a component prop, you can pass either: - [Command](command.md): This set of utilities to work with Raycast commands. - [Contribute to an Extension](contribute-to-an-extension.md): All published extensions are open-source and can be found in [this repository](https://github.com/raycast/extensions)... - [Create an AI Extension](create-an-ai-extension.md): To turn your regular extension into an AI-powered one, you need to add a set of tools that allow Raycast AI to intera... - [Create Your First Extension](create-your-first-extension.md): Open the Create Extension command, name your extension "Hello World" and select the "Detail" template. Pick a parent ... - [createDeeplink](createdeeplink.md): Function that creates a deeplink for an extension or script command. - [Debug an Extension](debug-an-extension.md): Bugs are unavoidable. Therefore it's important to have an easy way to discover and fix them. This guide shows you how... - [Deeplinks](deeplinks.md): Deeplinks are Raycast-specific URLs you can use to launch any command, as long as it's installed and enabled in Raycast. - [Detail](detail.md): Renders a markdown ([CommonMark](https://commonmark.org)) string with an optional metadata panel. - [Developer Tools](developer-tools.md): Raycast provides several tools to smoothen your experience when building extensions: - [Doppler Share Secrets](doppler.md): {% hint style="info" %} - [Environment](environment.md): The Environment APIs are useful to get context about the setup in which your command runs. You can get information ab... - [ESLint](eslint.md): Raycast makes it easy to lint your extensions using the CLI's lint command (`ray lint`). - [executeSQL](executesql.md): A function that executes a SQL query on a local SQLite database and returns the query result in JSON format. - [FAQ](faq.md): Script commands were the first way to extend Raycast. They are a simple way to execute a shell script and show some l... - [Feedback](feedback.md): Raycast has several ways to provide feedback to the user: - [File Structure](file-structure.md): An extension consists of at least an entry point file (e.g.`src/index.ts`) and a`package.json`manifest file. We ad... - [Follow Best Practices for AI Extensions](follow-best-practices-for-ai-extensions.md): Working with LLMs can be tricky. Here are some best practices to make the most out of your AI Extension. - [Forked Extensions (community tool)](forked-extensions.md): This extension leverages the [Git sparse-checkout](https://git-scm.com/docs/git-sparse-checkout) feature to efficient... - [Form](form.md): Our`Form`component provides great user experience to collect some data from a user and submit it for extensions needs. - [Functions](functions.md): - [createDeeplink](/utilities/functions/createdeeplink.md) - [getAccessToken](getaccesstoken.md): Utility function designed for retrieving authorization tokens within a component. It ensures that your React componen... - [getAvatarIcon](getavataricon.md): Icon to represent an avatar when you don't have one. The generated avatar will be generated from the initials of the ... - [getFavicon](getfavicon.md): Icon showing the favicon of a website. - [getProgressIcon](getprogressicon.md): Icon to represent the progress of a task, a project, *something*. - [Getting a Google client ID](getting-google-client-id.md): Follow these steps to get a Google client ID: - [Getting Started](getting-started.md): Before you can create your first extension, make sure you have the following prerequisites. - [Grid](grid.md): The`Grid`component is provided as an alternative to the [List](https://developers.raycast.com/api-reference/list#li... - [Hacker News](hacker-news.md): {% hint style="info" %} - [HUD](hud.md): When the user takes an action that has the side effect of closing Raycast (for example when copying something in the ... - [Icons & Images](icons-and-images.md): List of built-in icons that can be used for actions or list items. - [Icons](icons.md): - [getAvatarIcon](/utilities/icons/getavataricon.md) - [Install an Extension](install-an-extension.md): All published extensions are discoverable in the Raycast Store. Use the [web interface](https://raycast.com/store) or... - [Keyboard](keyboard.md): The Keyboard APIs are useful to make your actions accessible via the keyboard shortcuts. Shortcuts help users to use ... - [Learn Core Concepts of AI Extensions](learn-core-concepts-of-ai-extensions.md): AI Extensions rely on three core concepts: Tools, Instructions, and Evals. Each of these concepts plays a crucial rol... - [Lifecycle](lifecycle.md): A command is typically launched, runs for a while, and then is unloaded. - [List](list.md): Our`List`component provides great user experience out of the box: - [Manage Extensions Command](manage-extensions-command.md): Raycast provides a built-in command to manage your extensions. - [Manifest](manifest.md): The`package.json`manifest file is a superset of npm's`package.json`file. This way, you only need one file to conf... - [Menu Bar Commands](menu-bar-commands.md): The`MenuBarExtra`component can be used to create commands which populate the [extras](https://developer.apple.com/d... - [Migration](migration.md): This section contains guides to help migrate your extension to a newer version of the API. - [Navigation](navigation.md): A hook that lets you push and pop view components in the navigation stack. - [OAuth](oauth.md): A Raycast extension can use OAuth for authorizing access to a provider's resources on the user's behalf. Since Raycas... - [OAuthService](oauthservice.md): The`OAuthService`class is designed to abstract the OAuth authorization process using the PKCE (Proof Key for Code E... - [Preferences](preferences.md): Use the Preferences API to make your extension configurable. - [Prepare an Extension for Store](prepare-an-extension-for-store.md): Here you will find requirements and guidelines that you'll need to follow in order to get through the review before y... - [Publish a Private Extension](publish-a-private-extension.md): To publish an extension, run`npm run publish`in the extension directory. The command verifies, builds and publishes... - [Publish an Extension](publish-an-extension.md): Before you publish your extension, take a look at [how to prepare your extension](https://developers.raycast.com/basi... - [React hooks](react-hooks.md): - [useCachedState](/utilities/react-hooks/usecachedstate.md) - [Introduction](readme.md): Welcome, developers! Our docs cover guides, examples, references, and more to help you build extensions and share the... - [Review an Extension in a Pull Request](review-pullrequest.md): All updates to an extension are made through a [Pull Request](https://github.com/raycast/extensions/pulls) - if you n... - [runAppleScript](runapplescript.md): Function that executes an AppleScript script. - [runPowerShellScript](runpowershellscript.md): Function that executes an PowerShell script. - [Security](security.md): {% hint style="info" %} - [showFailureToast](showfailuretoast.md): Function that shows a failure [Toast](https://developers.raycast.com/api-reference/feedback/toast) for a given Error. - [Spotify Controls](spotify-controls.md): {% hint style="info" %} - [Storage](storage.md): The storage APIs can be used to store data in Raycast's [local encrypted database](https://developers.raycast.com/inf... - [Templates](templates.md): Raycast provides a variety of templates to kickstart your extension. - [Terminology](terminology.md): Actions are accessible via the Action Panel in a command. They are little functionality ... - [Toast](toast.md): When an asynchronous operation is happening or when an error is thrown, it's usually a good idea to keep the user inf... - [Todo List](todo-list.md): {% hint style="info" %} - [Tool](tool.md): Tools are a type of entry point for an extension. As opposed to a [command](https://developers.raycast.com/informatio... - [useAI](useai.md): Hook which asks the AI to answer a prompt and returns the AsyncState corresponding to the execution of... - [useCachedPromise](usecachedpromise.md): Hook which wraps an asynchronous function or a function that returns a Promise and returns the [AsyncState](#asyncsta... - [useCachedState](usecachedstate.md): Hook which returns a stateful value, and a function to update it. It is similar to React's`useState`but the value w... - [useExec](useexec.md): Hook that executes a command and returns the AsyncState corresponding to the execution of the command. - [useFetch](usefetch.md): Hook which fetches the URL and returns the AsyncState corresponding to the execution of the fetch. - [useForm](useform.md): Hook that provides a high-level interface to work with Forms, and more particularly, with Form validations. It incorp... - [useFrecencySorting](usefrecencysorting.md): Hook to sort an array by its frecency and provide methods to update the frecency of its items. - [useLocalStorage](uselocalstorage.md): A hook to manage a value in the local storage. - [usePromise](usepromise.md): Hook which wraps an asynchronous function or a function that returns a Promise and returns the [AsyncState](#asyncsta... - [User Interface](user-interface.md): Raycast uses React for its user interface declaration and renders the supported elements to our native UI. The API co... - [useSQL](usesql.md): Hook which executes a query on a local SQL database and returns the AsyncState corresponding to the ex... - [useStreamJSON](usestreamjson.md): Hook which takes a``or`file:///`URL pointing to a JSON resource, caches it to the command's su... - [System Utilities](utilities.md): This set of utilities exposes some of Raycast's native functionality to allow deep integration into the user's setup.... - [v1.28.0](v1280.md): This version contains an overhaul of the API surface to improve its discoverability and its usage in a code editor. T... - [v1.31.0](v1310.md): This version introduces support for multiple``accessories via a new [`accessories`prop](https://develop... - [v1.37.0](v1370.md): This version now depends on [React 18](https://reactjs.org/blog/2022/03/29/react-v18.html). As part of this change, t... - [v1.42.0](v1420.md): This version changed the`enableFiltering`option of`Grid`to`filtering`. - [v1.48.8](v1488.md): This version introduces a new ESLint configuration file when creating new extensions with the`Create Extension`comm... - [v1.50.0](v1500.md): This version introduces an automated generation of typescript definitions for the preferences and arguments of your e... - [v1.51.0](v1510.md): This version changed`environment.theme`to`environment.appearance`. - [v1.59.0](v1590.md): This version changed the`transient`option of`Clipboard`to`concealed`. - [Versioning](versioning.md): Versioning your extensions is straightforward since we've designed the system in a way that **frees you from having t... - [VS Code (community tool)](vscode.md): You can enhance your VS Code development experience by installing the [Raycast extension in the marketplace](https://... - [Raycast Window & Search Bar](window-and-search-bar.md): Clear the text in the search bar. - [Window Management](window-management.md): The Window Management API provides developers with some functions to create commands with some advanced logic to move... - [withAccessToken](withaccesstoken.md): Higher-order function fetching an authorization token to then access it. This makes it easier to handle OAuth in your... - [withCache](withcache.md): Higher-order function which wraps a function with caching functionality using Raycast's Cache API. Allows for caching... - [Write Evals for Your AI Extension](write-evals-for-your-ai-extension.md): We all know that AI is not always reliable. This is why it's important to write evals for your AI Extension. Evals al...