## Stripe Apps Documentation

This documentation suite covers the development and management of Stripe Apps, a platform for extending Stripe's functionality and embedding custom user interfaces within the Stripe Dashboard.

### Core Concepts and Getting Started

*   **Stripe Apps Overview**: Provides a high-level introduction to Stripe Apps, their capabilities, and how they integrate with Stripe.
*   **Getting Started with Stripe Apps**: Guides users through the initial steps of building their first Stripe App, including setting up the development environment and creating a basic "Hello, world!" app.
*   **How Stripe Apps Work**: Explains the fundamental architecture and components of Stripe Apps, including frontend and backend interactions.
*   **Common Use Cases**: Illustrates various scenarios and business needs that can be addressed by building Stripe Apps, categorized by app type (backend, frontend, full-stack).

### Building Your Stripe App

*   **Build an App**: General guidance on app development.
*   **Create an App**: Details on initiating a new Stripe App project.
*   **Build a UI**: Instructions on creating custom user interfaces within the Stripe Dashboard using the UI Extensions SDK and React.
    *   **How UI extensions work**: Explains the system for rendering custom UIs within Stripe.
    *   **Next generation UI components**: Introduces upcoming UI component updates.
    *   **Component hierarchy constraints**: Outlines rules for composing UI components.
    *   **UI testing**: Provides guidance on testing your app's user interface.
    *   **Developer tools**: Details the bundled tools for development.
    *   **Style your app**: Guidance on applying consistent styling using design tokens.
    *   **Design your app**: General design principles and tools for app development.
*   **Add server-side logic**: Explains how to incorporate backend code for processing actions, handling webhooks, and executing long-lived logic.
*   **API Authentication Methods**: Details the different ways your app can authenticate requests to the Stripe API.
    *   **OAuth 2.0**: Explains the industry-standard OAuth 2.0 flow for authentication.
    *   **Restricted API key authentication**: Describes how to use permissioned API keys for secure access.
*   **Store secret credentials and tokens**: Guides on securely persisting sensitive data using the Secret Store API.
*   **Handle different modes**: How to adapt your app to work with both live and sandbox environments.
*   **Enable sandbox support**: Instructions for enabling your public app for sandbox installations.
*   **Enable local network access**: How to configure local network access for app previewing.

### App Distribution and Management

*   **Distribution options**: Explains the methods for sharing your Stripe Apps with users.
*   **Upload and install your Stripe App**: Steps for making your app available to team members.
*   **Publish your app to the Stripe App Marketplace**: A guide to the process of publishing your app for public access.
    *   **Stripe Apps quality requirements**: Outlines the criteria for app review.
*   **Test your app externally**: How to set up and distribute test versions of your app.
*   **Manage your app's versions and releases**: Information on app versioning and managing updates.
*   **Using install links**: How to allow users to install your app outside the Stripe App Marketplace.
*   **Add deep links**: Creating links that navigate users directly to your Stripe App within the Dashboard.
*   **App analytics**: How to access data on your app's performance.

### Migration and Legacy Integrations

*   **Migrate an extension to Stripe Apps**: Explains why and how to migrate from legacy extensions to Stripe Apps.
*   **Migrate a plugin to Stripe Apps or Stripe Connect**: Guidance on migrating third-party integrations.
    *   **Migrate a plugin to an OAuth 2.0 app**: Specific steps for OAuth migration.
    *   **Migrate a plugin to a RAK app**: Specific steps for Restricted API Key migration.
*   **Legacy extensions**: Information about the deprecated extensions integration pattern.

### App Components and Patterns

*   **UI components**: A reference to the available UI components for building your app's interface.
    *   **Accordion**: For collapsible content.
    *   **Badge**: To indicate state.
    *   **Banner**: For alerts and messages.
    *   **BarChart**: For visualizing data with bars.
    *   **Box**: For wrapping and styling components.
    *   **Button**: For user actions.
    *   **ButtonGroup**: For managing multiple buttons.
    *   **Checkbox**: For boolean selections.
    *   **Chip**: For displaying and manipulating values.
    *   **ContextView**: For rendering apps alongside Stripe content.
    *   **DateField**: For collecting date input.
    *   **DetailPageModule**: For rendering apps in Stripe dashboard pages.
    *   **DetailPagePropertyList**: For rendering data in Stripe dashboard pages.
    *   **DetailPageTable**: For rendering data in Stripe dashboard pages.
    *   **Divider**: For a horizontal rule.
    *   **FocusView**: For dedicated task completion.
    *   **FormFieldGroup**: For grouping form fields.
    *   **Icon**: For displaying icon graphics.
    *   **Img**: For displaying images.
    *   **Inline**: For styling inline content.
    *   **LineChart**: For visualizing data with lines.
    *   **Link**: For navigation and subtle actions.
    *   **List**: For displaying collections of information.
    *   **Menu**: For presenting a group of actions.
    *   **OnboardingView**: For implementing onboarding flows.
    *   **PropertyList**: For displaying data as key-value pairs.
    *   **Radio**: For mutually exclusive selections.
    *   **SearchField**: For searching and filtering content.
    *   **Select**: For dropdown selections.
    *   **SettingsView**: For user account settings.
    *   **SignInView**: For rendering sign-in screens.
    *   **Sparkline**: For succinct data visualization.
    *   **Spinner**: To indicate loading states.
    *   **Switch**: For boolean toggles.
    *   **Table**: For displaying tabular data.
    *   **Tabs**: For displaying sections of content.
    *   **TaskList**: For tracking user progress.
    *   **TextArea**: For multi-line text input.
    *   **TextField**: For single-line text input.
    *   **Toast**: For temporary status notifications.
    *   **Tooltip**: For additional contextual information.
*   **Design patterns**: Recommended patterns for building consistent and user-friendly apps.
    *   **Action buttons**: Placement and usage of action buttons.
    *   **Additional context**: Providing extra information during onboarding.
    *   **Back link**: Enabling navigation to previous pages.
    *   **Communicating state**: Guiding users with feedback and status updates.
    *   **Demo content**: Tips for showcasing app functionality.
    *   **Empty state**: Informing users when no data is available.
    *   **Filter controls**: Using chips for filtering table data.
    *   **Full page apps**: Building complete, multi-view interfaces within the Dashboard.
    *   **Loading**: Using spinners for data loading states.
    *   **Lists**: Displaying collections of information.
    *   **Onboarding flow**: Designing effortless and relevant onboarding experiences.
    *   **Progress stepping**: Guiding users through multi-step tasks.
    *   **Redirects**: Creating clear redirects for users.
    *   **Settings sign in**: Onboarding users via a settings page.
    *   **Sign in template**: Using the `SignInView` component.
    *   **Sign out**: Enabling users to sign out of the app.
    *   **Waiting screens**: Informing users about wait times and next steps.

### Reference

*   **App manifest reference**: Details of the `stripe-app.json` file.
*   **Stripe Apps CLI reference**: Commands for managing your Stripe App.
*   **Permissions reference**: Available events and their required permissions.
*   **Extension SDK API reference**: Documentation for the UI Extension SDK.
*   **Viewports reference**: Available viewports for placing UI extensions.
*   **Route descriptors**: Navigating within the Dashboard using route descriptors.

### Examples and Resources

*   **Sample apps**: Working examples of Stripe Apps from design to code.
*   **Back-end app example**: A guide to building a backend-only Stripe App.
*   **Front-end app example**: A guide to building a Stripe App with a UI.
*   **Full-stack app example**: A guide to building a Stripe App with both UI and backend functionality.