## Stripe Apps Development Documentation

This documentation suite covers the development of Stripe Apps, a platform that allows developers to extend Stripe's functionality by embedding custom user interfaces within the Stripe Dashboard and orchestrating the Stripe API.

### Core Concepts and Getting Started

*   **Overview of Stripe Apps** (`/stripe-apps`): Understand the fundamental capabilities of Stripe Apps, including creating custom UIs, authenticating users, listening for events, and automating workflows.
*   **Getting Started with Stripe Apps** (`/stripe-apps/create-app`): Learn the basics of app development by building, previewing, and updating a simple "Hello, world!" Stripe App.
*   **How Stripe Apps Work** (`/stripe-apps/how-stripe-apps-work`): Delve into the architecture of Stripe Apps, understanding the frontend (UI extensions) and backend components.
*   **Common Use Cases** (`/stripe-apps/common-use-cases`): Explore different app types (backend, frontend, full-stack) and their typical applications.

### Building Your Stripe App

*   **Building a UI** (`/stripe-apps/build-ui`): Learn 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`): Understand the principles behind UI extensions, including their sandboxed nature and reliance on Stripe's UI component library.
    *   **UI Components** (`/stripe-apps/components`): A comprehensive reference to all available UI components, including:
        *   Layout and Structure: `Box`, `Inline`, `Stack`, `Grid`, `FullPageView`, `OverviewPage`, `DetailPageModule`, `DetailPagePropertyList`, `DetailPageTable`
        *   Navigation and Interaction: `Link`, `Button`, `ButtonGroup`, `Menu`, `Tabs`, `Tab`, `TabList`, `TabPanel`, `TabPanels`
        *   Input Controls: `Checkbox`, `Radio`, `Select`, `Switch`, `TextField`, `TextArea`, `DateField`, `SearchField`
        *   Information Display: `Accordion`, `Badge`, `Banner`, `Chip`, `Divider`, `Icon`, `Img`, `List`, `Sparkline`, `LineChart`, `BarChart`, `Table`, `DataTable`, `PropertyList`, `TaskList`
        *   Feedback and Status: `Spinner`, `Toast`, `Tooltip`
        *   Specialized Views: `ContextView`, `FocusView`, `OnboardingView`, `SettingsView`, `SignInView`
    *   **Next Generation UI Components** (`/stripe-apps/next-ui-components`): Get early access to upcoming UI component updates.
    *   **Component Hierarchy Constraints** (`/stripe-apps/component-hierarchy-constraints`): Understand the rules governing how UI components can be composed.
    *   **UI Testing** (`/stripe-apps/ui-testing`): Learn how to test your app's UI using provided utilities and helpers.
    *   **Styling Your App** (`/stripe-apps/style`): Discover how to style your app using design tokens and custom CSS to match the Stripe Dashboard's look and feel.
    *   **Design Your App** (`/stripe-apps/design`): Access design guidelines and philosophy for creating effective Stripe Apps.
*   **Adding Server-Side Logic** (`/stripe-apps/build-backend`): Implement backend code for validating user actions, processing data, integrating with third-party systems, and handling webhooks.
*   **API Authentication Methods** (`/stripe-apps/api-authentication`): Choose and implement the appropriate method for authenticating requests to the Stripe API:
    *   **Platform Key**: The default method using your account's secret API key.
    *   **OAuth 2.0** (`/stripe-apps/api-authentication/oauth`): Utilize the industry-standard OAuth 2.0 for user authentication.
    *   **Restricted API Key (RAK)** (`/stripe-apps/api-authentication/rak`): Generate permissioned API keys for enhanced security.
*   **Authorization Flows** (`/stripe-apps/pkce-oauth-flow`): Implement PKCE OAuth workflows for secure authorization.
*   **Storing Secrets** (`/stripe-apps/store-secrets`): Securely persist sensitive data like authentication credentials using the Secret Store API.

### App Management and Distribution

*   **App Settings Page** (`/stripe-apps/app-settings`): Create a dedicated page for users to configure their app settings.
*   **Handling Different Modes** (`/stripe-apps/handling-modes`): Adapt your app to work seamlessly in both live and sandbox environments.
*   **Enabling Sandbox Support** (`/stripe-apps/enable-sandbox-support`): Configure your public app for installation in Stripe's testing environments.
*   **Enabling Local Network Access** (`/stripe-apps/enable-local-network-access`): Grant permission for your app to access local network resources during development.
*   **Distribution Options** (`/stripe-apps/distribution-options`): Learn about the two primary ways to distribute your Stripe Apps: publicly on the App Marketplace or privately within your team.
*   **Uploading and Installing Your App** (`/stripe-apps/upload-install-app`): Make your app available to team members by uploading it to your Stripe account.
*   **Testing Your App Externally** (`/stripe-apps/test-app`): Set up and distribute test versions of your app before public release.
*   **Publishing Your App** (`/stripe-apps/publish-app`): Follow the steps to get your app approved and listed on the Stripe App Marketplace.
*   **App Review Requirements** (`/stripe-apps/review-requirements`): Understand the quality standards and criteria for app review.
*   **Managing App Versions and Releases** (`/stripe-apps/versions-and-releases`): Learn about app versioning and how to ship new versions and manage changes over time.
*   **Promoting Your App** (`/stripe-apps/promote-app`): Discover how to partner with Stripe to accelerate your app's growth.
*   **Using Install Links** (`/stripe-apps/install-links`): Allow users to install your public app outside of the Stripe App Marketplace.
*   **Post-Install Actions** (`/stripe-apps/post-install-actions`): Enable additional configurations or actions that occur after a user installs your app.

### Migration and Legacy Information

*   **Migrating to Stripe Apps** (`/stripe-apps/migrate-extension`): Understand why and how to migrate legacy extensions to the new Stripe Apps platform.
    *   **Migrate a Plugin to Stripe Apps or Stripe Connect** (`/stripe-apps/plugins/decide-migration`): Decide on your migration path for plugins.
    *   **Migrate a Plugin to an OAuth 2.0 App** (`/stripe-apps/plugins/oauth`): Specific guidance for migrating to OAuth 2.0.
    *   **Migrate a Plugin to a RAK App** (`/stripe-apps/plugins/rak`): Specific guidance for migrating to Restricted API Keys (RAKs).
*   **Legacy Extensions** (`/building-extensions`): Information about the deprecated extensions integration pattern.

### Reference and Tools

*   **App Manifest Reference** (`/stripe-apps/reference/app-manifest`): A detailed guide to all fields, types, and descriptions for your app manifest file.
*   **Stripe Apps CLI Reference** (`/stripe-apps/reference/cli`): Learn to use the command-line interface to manage your Stripe App.
*   **Permissions Reference** (`/stripe-apps/reference/permissions`): A list of available events and their required permissions.
*   **Extension SDK API Reference** (`/stripe-apps/reference/extensions-sdk-api`): Documentation for the Extension SDK API, including context props and utility functions.
*   **Viewports Reference** (`/stripe-apps/reference/viewports`): A list of available viewports for Stripe Apps and how they are displayed to users.
*   **Route Descriptors** (`/stripe-apps/route-descriptors`): Navigate within the Dashboard using route descriptors for soft, context-preserving navigation.
*   **Sample Apps** (`/stripe-apps/sample-apps`): Explore working examples of Stripe Apps to use as a starting point for your own development.

### Design Patterns

*   **Design Patterns for Stripe Apps** (`/stripe-apps/patterns`): Follow recommended design patterns for a consistent and scalable app experience.
    *   **Full Page Apps** (`/stripe-apps/patterns/full-page-apps`): Build custom Stripe Dashboard pages with complex layouts.
    *   **Action Buttons** (`/stripe-apps/patterns/action-buttons`): Learn where to place action buttons for optimal user visibility.
    *   **Onboarding Flow** (`/stripe-apps/patterns/onboarding-experience`): Design effortless, customizable, and relevant onboarding experiences.
    *   **Additional Context** (`/stripe-apps/patterns/additional-context`): Provide necessary context to users before they sign in.
    *   **Back Link** (`/stripe-apps/patterns/back-link`): Implement navigation to previous pages.
    *   **Communicating State** (`/stripe-apps/patterns/communicating-state`): Inform users about temporary statuses and required actions using Toasts and Banners.
    *   **Demo Content** (`/stripe-apps/patterns/demo`): Display concise and functional demonstrations of your app's capabilities.
    *   **Empty State** (`/stripe-apps/patterns/empty-state`): Clearly indicate when no data is available to load.
    *   **Filter Controls** (`/stripe-apps/patterns/filter-controls`): Use Chip components to allow users to filter table rows.
    *   **Lists** (`/stripe-apps/patterns/lists`): Display collections of information effectively.
    *   **Loading** (`/stripe-apps/patterns/loading`): Use Spinner components to indicate data loading.
    *   **Progress Stepping** (`/stripe-apps/patterns/progress-stepping`): Guide users through multi-step tasks to prevent abandonment.
    *   **Redirects** (`/stripe-apps/patterns/redirects`): Create clear and consistent redirects for users.
    *   **Settings Sign In** (`/stripe-apps/patterns/settings-signin`): Onboard users through a settings page for backend-only apps.
    *   **Sign In Template** (`/stripe-apps/patterns/sign-in`): Implement a secure and focused sign-in experience.
    *   **Sign Out** (`/stripe-apps/patterns/sign-out`): Provide a clear way for users to sign out of your app.
    *   **Waiting Screens** (`/stripe-apps/patterns/waiting-screens`): Inform users about wait times and next steps during onboarding.