## Stripe Apps: Building and Managing Integrations

This documentation section provides a comprehensive guide to developing and managing applications (Stripe Apps) that extend the functionality of the Stripe Dashboard and integrate with the Stripe API. It covers the entire app development lifecycle, from initial setup and authentication to UI design, deployment, and ongoing maintenance.

### Core Concepts and Getting Started

*   **Overview of Stripe Apps:** Understand the fundamental purpose and capabilities of Stripe Apps, which allow for custom user interfaces within the Stripe Dashboard and orchestration of the Stripe API. (Page 30)
*   **Getting Started with Stripe Apps:** Learn the basics of app development, including building, previewing, and updating a sample "Hello, world!" app. (Page 18)
*   **How Stripe Apps Work:** Gain insights into the architecture of Stripe Apps, including frontend (UI extensions) and backend components, and how to manage app permissions. (Page 21)
*   **App Manifest Reference:** Understand the `stripe-app.json` file, which describes how your app integrates with the Stripe platform, including fields, types, and descriptions. (Page 35)
*   **Stripe Apps CLI Reference:** Learn how to install and use the command-line interface to create, develop, configure, and upload your Stripe app. (Page 36)

### Building Your Stripe App

*   **Common Use Cases:** Explore various scenarios for building Stripe Apps, categorized by app type (backend, frontend, full-stack). (Page 14)
*   **Backend App Example:** Learn how to build a Stripe app that performs background processing without a user interface. (Page 13)
*   **Frontend App Example:** Discover how to create a Stripe app that renders a user interface within the Stripe Dashboard. (Page 15)
*   **Full-Stack App Example:** Understand how to build a Stripe app that combines both a user interface and backend functionality. (Page 16)
*   **Server-Side Logic:** Implement backend code to validate and process user actions and data, integrate with third-party systems, and handle webhook events. (Page 6)
*   **Building a UI:** Develop custom user interfaces for your Stripe App using TypeScript, React, and Stripe's UI Extensions SDK and UI toolkit. (Page 17)
*   **UI Extensions:** Learn how UI extensions work, enabling you to render your own UI within Stripe's products using TypeScript and React. (Page 22)
*   **Next Generation UI Components:** Get early access to updated UI components that will be part of future SDK releases. (Page 28)
*   **UI Components Reference:** Explore the library of prebuilt UI components for building your app's user interface, including Accordion, Badge, Banner, Button, and many more. (Page 49)
*   **Design Patterns:** Follow recommended design patterns to expedite your Stripe app review and ensure a consistent, clear, and scalable user experience. (Page 95)
*   **Styling Your App:** Learn how to style UI components using provided design tokens to match the Dashboard's visual style. (Page 113)
*   **Designing Your App:** Get started with design tools, guidelines, and philosophy for creating effective Stripe Apps. (Page 114)

### Authentication and Authorization

*   **API Authentication Methods:** Select the most suitable API authentication method for your app's use case, including Platform key, OAuth 2.0, and Restricted API keys. (Page 2)
*   **OAuth 2.0:** Implement industry-standard OAuth 2.0 for secure API authentication. (Page 3)
*   **Restricted API Key Authentication:** Utilize Restricted API Keys (RAKs) for secure API access with specific permissions. (Page 4)
*   **Authorization Flows:** Implement PKCE OAuth workflows for secure authorization. (Page 39)
*   **Storing Secrets:** Securely store sensitive data like authentication credentials and tokens using the Secret Store API. (Page 46)

### Distribution and Deployment

*   **Distribution Options:** Understand the two primary ways to distribute your apps: publicly on the Stripe App Marketplace or privately within your team. (Page 20)
*   **Uploading and Installing Your App:** Make your app available to team members by uploading it to your Stripe account. (Page 115)
*   **Publishing to the Stripe App Marketplace:** Learn the process of getting your app approved and listed on the global Stripe App Marketplace. (Page 24)
*   **App Review Requirements:** Familiarize yourself with the quality requirements for apps to be listed on the App Marketplace. (Page 25)
*   **Testing Your App Externally:** Set up and distribute test versions of your app to a limited group of testers before public release. (Page 26)
*   **Managing App Versions and Releases:** Learn about app versioning and releases to effectively manage changes and ship new versions of your app. (Page 117)

### Advanced Features and Considerations

*   **App Analytics:** Access analytics to understand how your apps are used and how your marketplace listings perform. (Page 5)
*   **Deep Links:** Create deep links to navigate users directly to specific sections of your Stripe app within the Dashboard. (Page 8)
*   **Embedded Stripe Apps:** Utilize embedded components to allow customers to manage payments data within third-party applications. (Page 9)
*   **Marketing Software Integrations:** Integrate marketing software like Mailchimp to automate customer email workflows. (Page 10)
*   **Enabling Local Network Access:** Configure local network access for app previewing. (Page 11)
*   **Enabling Sandbox Support:** Allow users to install your public app in sandboxes for evaluation and testing. (Page 12)
*   **Handling Different Modes:** Adapt your app to function correctly in both live mode and sandbox environments. (Page 19)
*   **Post-Install Actions:** Support additional configurations that occur after app installation, such as supplying external credentials. (Page 40)
*   **Using Roles in UI Extensions:** Tailor app functionality based on different user roles within the Stripe Dashboard. (Page 116)
*   **Migrating Extensions:** Understand why and how to migrate legacy extensions to the modern Stripe Apps platform. (Page 27)
*   **Migrating Plugins:** Learn about your options for migrating plugins that require secret API key authentication to Stripe Apps or Stripe Connect. (Page 32)
    *   **Migrate a Plugin to an OAuth 2.0 App:** Transition your plugin to use OAuth 2.0 for authentication. (Page 31)
    *   **Migrate a Plugin to a RAK App:** Migrate your plugin to use Restricted API Keys (RAKs) for authentication. (Page 33)
*   **App Settings Page:** Create a page that allows users to configure their app settings within the Stripe Dashboard. (Page 45)
*   **UI Testing:** Test your Stripe app's UI using provided utilities and helpers. (Page 41)
*   **Developer Tools:** Utilize bundled developer tools for type checking, linting, and testing your app's code. (Page 47)
*   **Viewports Reference:** Understand the available viewports for Stripe Apps and where your UI extensions can be displayed within the Dashboard. (Page 42)
*   **Route Descriptors:** Implement soft, context-preserving navigation between Dashboard pages from your Stripe App. (Page 43)
*   **Sample Apps:** Explore working examples of Stripe Apps to use as a starting point for your own development. (Page 44)

### Design Patterns and UI Elements

*   **Design Patterns Overview:** A guide to using recommended design patterns for consistent and scalable app design. (Page 95)
    *   **Action Buttons:** Learn best practices for placing and using action buttons within your app. (Page 111)
    *   **Additional Context:** Provide supplementary information during onboarding to enhance user understanding. (Page 99)
    *   **Back Link:** Implement clear navigation for users to return to previous pages. (Page 112)
    *   **Communicating State:** Guide users on required actions and provide feedback using Toast and Banner components. (Page 106)
    *   **Demo Content:** Display brief, focused demonstrations of your app's core functionality. (Page 100)
    *   **Empty State:** Clearly inform users when no data is available to load. (Page 107)
    *   **Filter Controls:** Enable users to filter table rows using Chip components. (Page 96)
    *   **Full Page Apps:** Design custom Stripe Dashboard pages with complex layouts and multi-view interfaces. (Page 97)
    *   **Lists:** Display collections of information effectively using the List component. (Page 75, Page 98)
    *   **Loading:** Use the Spinner component to indicate when data is being loaded. (Page 85, Page 108)
    *   **Onboarding Flow:** Create effortless, customizable, and relevant onboarding experiences for your users. (Page 29, Page 101)
    *   **Progress Stepping:** Guide users through multi-step tasks using FocusView components to prevent abandonment. (Page 109)
    *   **Redirects:** Create clear and consistent redirects for user navigation. (Page 102)
    *   **Settings Sign In:** Onboard users directly on a settings page for backend-only apps. (Page 103)
    *   **Sign In Template:** Implement secure and focused sign-in experiences using the SignInView component. (Page 104)
    *   **Sign Out:** Provide a clear mechanism for users to sign out of your app. (Page 105)
    *   **Waiting Screens:** Inform users about wait times and next steps during onboarding. (Page 110)
*   **UI Components:** A comprehensive reference for all available UI components, including Accordion, Badge, Banner, Button, Checkbox, Chip, DateField, and many more. (Page 49)
    *   **Accordion:** Split long content into collapsible chunks. (Page 50)
    *   **Badge:** Indicate the state of an item or object. (Page 51)
    *   **Banner:** Display alerts or important messages. (Page 52)
    *   **BarChart:** Visualize data using bars. (Page 53)
    *   **Box:** Wrap components and apply custom styles and layouts. (Page 54)
    *   **Button:** Allow users to take actions. (Page 55)
    *   **ButtonGroup:** Handle layout for multiple buttons. (Page 56)
    *   **Checkbox:** Indicate or control boolean values. (Page 57)
    *   **Chip:** Display and manipulate values. (Page 58)
    *   **ContextView:** Render apps alongside Stripe content for shared context. (Page 59)
    *   **DataTable:** Display tabular data. (Page 60)
    *   **DateField:** Collect date information from users. (Page 61)
    *   **DetailPageModule:** Render apps within Stripe dashboard detail pages. (Page 62)
    *   **DetailPagePropertyList:** Render data as property lists on dashboard pages. (Page 63)
    *   **DetailPageTable:** Render data in tables on dashboard pages. (Page 64)
    *   **Divider:** Render a simple horizontal rule. (Page 65)
    *   **FocusView:** Open a dedicated space for users to complete specific tasks. (Page 66)
    *   **FormFieldGroup:** Group form fields together. (Page 67)
    *   **FullPageTabs:** Display sections of content in a tabbed interface. (Page 68)
    *   **FullPageView:** Implement full-page layouts in Stripe Apps. (Page 69)
    *   **Icon:** Display icon graphics. (Page 70)
    *   **Img:** Display images. (Page 71)
    *   **Inline:** Style inline content like text. (Page 72)
    *   **LineChart:** Visualize data as a connected line. (Page 73)
    *   **Link:** Navigate users between pages or for subtle actions. (Page 74)
    *   **Menu:** Present a group of actions for user selection. (Page 76)
    *   **OnboardingView:** Implement an onboarding flow for your app. (Page 77)
    *   **OverviewPage:** Implement overview-style layouts. (Page 78)
    *   **PropertyList:** Display data as key-value pairs. (Page 79)
    *   **Radio:** Make selections from mutually exclusive options. (Page 80)
    *   **SearchField:** Allow users to search and filter content. (Page 81)
    *   **Select:** Pick options from a dropdown. (Page 82)
    *   **SettingsView:** Allow users to change app settings. (Page 83)
    *   **SignInView:** Render a sign-in screen for your app. (Page 84)
    *   **Sparkline:** Display data succinctly as a simple line. (Page 85)
    *   **Spinner:** Indicate that something is loading. (Page 86)
    *   **Switch:** Indicate or control boolean values. (Page 87)
    *   **Table:** Display data in a table format. (Page 88)
    *   **Tabs:** Display sections of content in a tabbed interface. (Page 89)
    *   **TaskList:** Help users track progress through a list of tasks. (Page 90)
    *   **TextArea:** Create an input field for multiple lines of text. (Page 91)
    *   **TextField:** Create a single-line text input field. (Page 92)
    *   **Toast:** Inform users of temporary status updates. (Page 93)
    *   **Tooltip:** Provide additional contextual information about an element. (Page 94)