## Stripe Apps Documentation

This documentation set provides comprehensive guidance on building, developing, and managing applications within the Stripe ecosystem. It covers everything from the foundational concepts of Stripe Apps to detailed API references and design patterns.

### Core Concepts and Getting Started

*   **Stripe Apps Overview (`/stripe-apps`)**: Introduces Stripe Apps, their capabilities for extending Stripe with third-party services or custom UIs, and provides entry points to get started.
*   **Getting Started with Stripe Apps (`/stripe-apps/create-app`)**: Guides users through building their first Stripe App, including setting up the Stripe CLI and creating a basic "Hello, world!" app.
*   **How Stripe Apps Work (`/stripe-apps/how-stripe-apps-work`)**: Explains the fundamental architecture of Stripe Apps, including frontend (UI extensions) and backend components.
*   **Common Use Cases (`/stripe-apps/common-use-cases`)**: Outlines typical scenarios for building Stripe Apps, categorized into backend, frontend, and full-stack applications.
*   **Sample Apps (`/stripe-apps/sample-apps`)**: Provides links to example applications on GitHub to help developers understand implementation details and design patterns.

### Building Your App

*   **Build a UI (`/stripe-apps/build-ui`)**: Details how to create custom user interfaces within the Stripe Dashboard using TypeScript, React, and Stripe's UI Extensions SDK.
*   **How UI Extensions Work (`/stripe-apps/how-ui-extensions-work`)**: Explains the sandboxed iframe environment for UI extensions and their interaction with Stripe's UI toolkit.
*   **Add Server-Side Logic (`/stripe-apps/build-backend`)**: Covers integrating self-hosted backend services for secure third-party system integration, webhook handling, and long-lived app logic.
*   **App Settings Page (`/stripe-apps/app-settings`)**: Guides on creating a configurable settings page for users within the Stripe Dashboard.
*   **Onboarding (`/stripe-apps/onboarding`)**: Provides best practices and tools for designing intuitive onboarding flows for new users.

### Authentication and Security

*   **API Authentication Methods (`/stripe-apps/api-authentication`)**: Describes the different methods for authenticating requests to the Stripe API: Platform key, OAuth 2.0, and Restricted API Keys.
*   **OAuth 2.0 (`/stripe-apps/api-authentication/oauth`)**: Details the process of using OAuth 2.0 for API authentication.
*   **Restricted API Key Authentication (`/stripe-apps/api-authentication/rak`)**: Explains how to use Restricted API Keys (RAKs) for secure, permissioned access.
*   **Store Secret Credentials and Tokens (`/stripe-apps/store-secrets`)**: Covers the use of the Secret Store API for securely persisting sensitive data.

### Development and Testing

*   **Enable Sandbox Support (`/stripe-apps/enable-sandbox-support`)**: Instructions on enabling sandbox installation for public apps to allow user evaluation.
*   **Enable Local Network Access (`/stripe-apps/enable-local-network-access`)**: Explains how to enable local network access for app previewing during development.
*   **Handle Different Modes (`/stripe-apps/handling-modes`)**: Guides on adapting apps to work seamlessly in both live mode and sandbox environments.
*   **UI Testing (`/stripe-apps/ui-testing`)**: Details utilities and helpers for testing the user interface of Stripe Apps.
*   **UI Extension Developer Tools (`/stripe-apps/ui-extension-developer-tools`)**: Introduces bundled tools for type checking, linting, and testing UI extension code.
*   **Upgrade Stripe's UI Extension SDK (`/stripe-apps/upgrade-stripes-ui-extension-sdk`)**: Provides guidance on upgrading to the latest versions of the UI extension SDK and managing breaking changes.

### Distribution and Publishing

*   **Distribution Options (`/stripe-apps/distribution-options`)**: Outlines the methods for sharing Stripe Apps, including public distribution via the App Marketplace and private sharing.
*   **Upload and Install Your Stripe App (`/stripe-apps/upload-install-app`)**: Describes the process of uploading and installing apps for team members.
*   **Test Your App Externally (`/stripe-apps/test-app`)**: Explains how to set up and distribute test versions of your app to external testers before publication.
*   **How to Publish an App to the Stripe App Marketplace (`/stripe-apps/publish-app`)**: Details the steps involved in getting an app approved and listed on the Stripe App Marketplace.
*   **Stripe Apps Quality Requirements (`/stripe-apps/review-requirements`)**: Outlines the qualitative requirements for apps to be accepted on the App Marketplace.
*   **Promote Your App (`/stripe-apps/promote-app`)**: Information on partnering with Stripe to grow app visibility and reach.

### Migration

*   **Migrate an Extension to Stripe Apps (`/stripe-apps/migrate-extension`)**: Explains why and how to migrate legacy extensions to the newer Stripe Apps platform.
*   **Migrate a Plugin to Stripe Apps or Stripe Connect (`/stripe-apps/plugins/decide-migration`)**: Helps developers choose the right migration path for their existing plugins.
*   **Migrate a Plugin to an OAuth 2.0 App (`/stripe-apps/plugins/oauth`)**: Guides on migrating plugins to use OAuth 2.0 authentication within Stripe Apps.
*   **Migrate a Plugin to a RAK App (`/stripe-apps/plugins/rak`)**: Details the process of migrating plugins to use Restricted API Key (RAK) authentication.

### Reference and Components

*   **App Manifest Reference (`/stripe-apps/reference/app-manifest`)**: A comprehensive guide to the fields, types, and descriptions for the `stripe-app.json` manifest file.
*   **Stripe Apps CLI Reference (`/stripe-apps/reference/cli`)**: Documentation for the command-line interface used to manage Stripe Apps.
*   **Permissions Reference (`/stripe-apps/reference/permissions`)**: Lists available events and their required permissions for Stripe Apps.
*   **Extension SDK API Reference (`/stripe-apps/reference/extensions-sdk-api`)**: Documents the context props and utility functions available in the Extension SDK.
*   **Viewports Reference (`/stripe-apps/reference/viewports`)**: Lists available viewports within the Stripe Dashboard where UI extensions can be rendered.
*   **UI Components (`/stripe-apps/components`)**: An index of all available UI components for building user interfaces in Stripe Apps.
    *   **Accordion (`/stripe-apps/components/accordion`)**: For collapsible content sections.
    *   **Badge (`/stripe-apps/components/badge`)**: To indicate the state of an item or object.
    *   **Banner (`/stripe-apps/components/banner`)**: For alerts and important messages.
    *   **BarChart (`/stripe-apps/components/barchart`)**: To visualize data using bars.
    *   **Box (`/stripe-apps/components/box`)**: A versatile container for styling and layout.
    *   **Button (`/stripe-apps/components/button`)**: For user actions.
    *   **ButtonGroup (`/stripe-apps/components/buttongroup`)**: For managing the layout of multiple buttons.
    *   **Checkbox (`/stripe-apps/components/checkbox`)**: For indicating or controlling boolean values.
    *   **Chip (`/stripe-apps/components/chip`)**: To display and manipulate values.
    *   **ContextView (`/stripe-apps/components/contextview`)**: For rendering apps alongside Stripe content in a drawer.
    *   **DateField (`/stripe-apps/components/datefield`)**: To collect date information.
    *   **DetailPageModule (`/stripe-apps/components/detailpagemodule`)**: For rendering apps in Stripe dashboard detail pages.
    *   **DetailPagePropertyList (`/stripe-apps/components/detailpagepropertylist`)**: For rendering data as key-value pairs on detail pages.
    *   **DetailPageTable (`/stripe-apps/components/detailpagetable`)**: For displaying tabular data on detail pages.
    *   **Divider (`/stripe-apps/components/divider`)**: To render a horizontal rule.
    *   **FocusView (`/stripe-apps/components/focusview`)**: For dedicated task completion spaces.
    *   **FormFieldGroup (`/stripe-apps/components/formfieldgroup`)**: To group form fields.
    *   **Icon (`/stripe-apps/components/icon`)**: To display icon graphics.
    *   **Img (`/stripe-apps/components/img`)**: To display images.
    *   **Inline (`/stripe-apps/components/inline`)**: For styling inline content like text.
    *   **LineChart (`/stripe-apps/components/linechart`)**: To visualize data as a line.
    *   **Link (`/stripe-apps/components/link`)**: For navigation and subtle actions.
    *   **List (`/stripe-apps/components/list`)**: To display collections of information.
    *   **Menu (`/stripe-apps/components/menu`)**: To present a group of actions.
    *   **OnboardingView (`/stripe-apps/components/onboardingview`)**: For implementing onboarding flows.
    *   **PropertyList (`/stripe-apps/components/propertylist`)**: To display data as key-value pairs.
    *   **Radio (`/stripe-apps/components/radio`)**: For making selections from a set of options.
    *   **SearchField (`/stripe-apps/components/searchfield`)**: For searching and filtering content.
    *   **Select (`/stripe-apps/components/select`)**: To pick from dropdown options.
    *   **SettingsView (`/stripe-apps/components/settingsview`)**: To allow users to change app settings.
    *   **SignInView (`/stripe-apps/components/signinview`)**: To render a sign-in screen.
    *   **Sparkline (`/stripe-apps/components/sparkline`)**: A concise line chart for succinct data display.
    *   **Spinner (`/stripe-apps/components/spinner`)**: To indicate loading states.
    *   **Switch (`/stripe-apps/components/switch`)**: To indicate or control boolean values.
    *   **Table (`/stripe-apps/components/table`)**: To display tabular data.
    *   **Tabs (`/stripe-apps/components/tabs`)**: To display sections of content.
    *   **TaskList (`/stripe-apps/components/tasklist`)**: To help users track task progress.
    *   **TextArea (`/stripe-apps/components/textarea`)**: For multi-line text input.
    *   **TextField (`/stripe-apps/components/textfield`)**: For single-line text input.
    *   **Toast (`/stripe-apps/components/toast`)**: To inform users of temporary status.
    *   **Tooltip (`/stripe-apps/components/tooltip`)**: To provide additional contextual information.

### Design and Patterns

*   **Design Your App (`/stripe-apps/design`)**: Provides guidelines and philosophy for designing Stripe Apps.
*   **Style Your App (`/stripe-apps/style`)**: Explains how to style UI components using provided design tokens for consistency.
*   **Design Patterns (`/stripe-apps/patterns`)**: A collection of recommended design patterns for building consistent and user-friendly Stripe Apps.
    *   **Action Buttons (`/stripe-apps/patterns/action-buttons`)**: Guidance on placing and using action buttons.
    *   **Additional Context (`/stripe-apps/patterns/additional-context`)**: Tips for providing extra information during onboarding.
    *   **Back Link (`/stripe-apps/patterns/back-link`)**: How to implement navigation to previous pages.
    *   **Communicating State (`/stripe-apps/patterns/communicating-state`)**: Strategies for informing users about actions and status.
    *   **Demo Content (`/stripe-apps/patterns/demo`)**: Best practices for showcasing app functionality.
    *   **Empty State (`/stripe-apps/patterns/empty-state`)**: How to inform users when no data is available.
    *   **Filter Controls (`/stripe-apps/patterns/filter-controls`)**: Using chips to filter table rows.
    *   **Full Page Apps (`/stripe-apps/patterns/full-page-apps`)**: Building custom, multi-view pages within the Dashboard.
    *   **Loading (`/stripe-apps/patterns/loading`)**: Using spinners to indicate data loading.
    *   **Onboarding Flow (`/stripe-apps/patterns/onboarding-experience`)**: Designing effortless and relevant onboarding experiences.
    *   **Progress Stepping (`/stripe-apps/patterns/progress-stepping`)**: Guiding users through multi-step tasks.
    *   **Redirects (`/stripe-apps/patterns/redirects`)**: Creating clear redirects for users.
    *   **Settings Sign In (`/stripe-apps/patterns/settings-signin`)**: Onboarding users via a settings page.
    *   **Sign In Template (`/stripe-apps/patterns/sign-in`)**: Using the `SignInView` component for authentication.
    *   **Sign Out (`/stripe-apps/patterns/sign-out`)**: Implementing user sign-out functionality.
    *   **Waiting Screens (`/stripe-apps/patterns/waiting-screens`)**: Informing users about wait times and next steps.

### Advanced Topics

*   **Add Authorization Flows (`/stripe-apps/pkce-oauth-flow`)**: Implementing PKCE OAuth workflows for integrating with third-party OAuth providers.
*   **Add Deep Links (`/stripe-apps/deep-links`)**: Creating deep links to navigate users directly to specific sections of your app within the Dashboard.
*   **Component Hierarchy Constraints (`/stripe-apps/component-hierarchy-constraints`)**: Understanding rules for composing UI components to ensure predictable rendering.
*   **Embed Third-Party Stripe Apps (`/stripe-apps/embedded-apps`)**: Integrating Stripe Apps using embedded components into your own platform.
*   **Marketing Software Integrations (`/stripe-apps/embedded-apps/marketing-integrations`)**: Specific examples of embedding marketing integrations like Mailchimp.
*   **Navigate within the Dashboard using Route Descriptors (`/stripe-apps/route-descriptors`)**: Enabling soft, context-preserving navigation between Dashboard pages.
*   **Enable Post-Install Actions (`/stripe-apps/post-install-actions`)**: Supporting configurations that occur after an app is installed.
*   **Using Roles in UI Extensions (`/stripe-apps/using-roles-in-ui-extensions`)**: Tailoring app functionality based on user roles within the Dashboard.
*   **Manage Your App's Versions and Releases (`/stripe-apps/versions-and-releases`)**: Guidance on app versioning and managing releases.
*   **Legacy Extensions (`/building-extensions`)**: Information on the deprecated extensions integration pattern and migration to Stripe Apps.