## Building and Managing Stripe Apps

This documentation set provides comprehensive guidance on developing, deploying, and managing applications within the Stripe ecosystem. It covers the entire lifecycle of a Stripe App, from initial setup and design to advanced features, distribution, and maintenance.

### Getting Started with Stripe Apps

*   **Overview of Stripe Apps:** Understand the core concepts and capabilities of Stripe Apps, which allow for extending Stripe with third-party services or embedding custom user interfaces directly into the Stripe Dashboard.
*   **Creating Your First App:** Learn the basics of app development by building a simple "Hello, world!" app with a UI extension. This includes setting up the Stripe CLI and creating a basic app structure.
*   **How Stripe Apps Work:** Delve into the architecture of Stripe Apps, understanding their frontend and backend components, and how they interact with the Stripe API.
*   **Common Use Cases:** Explore various scenarios and app types (backend, frontend, full-stack) that can be built using Stripe Apps.

### Developing Your Stripe App

*   **Building a User Interface (UI):** Learn how to create custom UIs within the Stripe Dashboard using TypeScript, React, and Stripe's UI Extensions SDK and UI toolkit.
    *   **UI Extension System:** Understand how UI extensions render within a secure, sandboxed iframe.
    *   **UI Components:** A comprehensive reference to all available UI components, including detailed explanations, props, and examples for each. This includes components for:
        *   Layout and Structure: `Box`, `Inline`, `ContextView`, `FocusView`, `FullPageView`, `OnboardingView`, `SettingsView`, `SignInView`, `FullPageTabs`, `OverviewPage`.
        *   Data Display: `Accordion`, `Badge`, `Banner`, `BarChart`, `Chip`, `DataTable`, `DateField`, `DetailPageModule`, `DetailPagePropertyList`, `DetailPageTable`, `Divider`, `Icon`, `Img`, `LineChart`, `List`, `Menu`, `PropertyList`, `Sparkline`, `Spinner`, `Table`, `Tabs`, `TaskList`, `TextArea`, `TextField`.
        *   User Input: `Button`, `ButtonGroup`, `Checkbox`, `FormFieldGroup`, `Radio`, `SearchField`, `Select`, `Switch`.
        *   Navigation and Actions: `Link`, `Tooltip`.
    *   **Component Hierarchy Constraints:** Understand the rules governing how UI components can be composed to ensure predictable rendering.
    *   **Next Generation UI Components:** Get early access to upcoming UI component updates.
*   **Adding Server-Side Logic:** Implement backend code to validate and process user actions, integrate with third-party systems, and handle webhook events.
*   **API Authentication Methods:** Choose and implement the appropriate authentication method for your app, including Platform Keys, OAuth 2.0, and Restricted API Keys (RAKs).
    *   **OAuth 2.0:** Detailed guide on implementing OAuth 2.0 for secure user authentication.
    *   **Restricted API Key (RAK):** Learn how to generate permissioned API keys for enhanced security.
    *   **Authorization Flows:** Implement PKCE OAuth workflows for secure authorization.
*   **Handling Different Modes:** Adapt your app to function correctly in both live and sandbox (testing) environments.
*   **Storing Secrets:** Securely persist sensitive data like authentication credentials using the Secret Store API.
*   **Deep Linking:** Create deep links to navigate users directly to specific pages within your Stripe app in the Dashboard.
*   **App Settings Page:** Design a page for users to configure their app settings within the Stripe Dashboard.
*   **UI Testing:** Learn how to test your app's UI using provided utilities and helpers.
*   **Developer Tools:** Utilize bundled tools for type checking, linting, and testing your UI extension code.
*   **Styling Your App:** Apply design tokens and custom styles to ensure visual consistency with the Stripe Dashboard.
*   **Design Your App:** Access design guidelines and philosophy to create a user-friendly and visually appealing app.
*   **Design Patterns:** Follow recommended patterns for common app functionalities like onboarding, sign-in, loading states, and more.

### Distributing and Managing Your App

*   **Distribution Options:** Understand the choices for sharing your Stripe Apps, including public availability on the App Marketplace or private sharing with team members.
*   **Uploading and Installing Your App:** Learn the steps to upload your app for testing and installation within your Stripe account.
*   **Publishing to the Stripe App Marketplace:** Guide on how to get your app approved and listed on the global Stripe App Marketplace.
    *   **App Review Requirements:** Understand the quality standards and criteria for app review.
*   **Testing Your App Externally:** Set up and distribute test versions of your app to a limited group of testers before public release.
*   **Managing App Versions and Releases:** Learn about app versioning and how to ship new versions and manage changes over time.
*   **Promoting Your App:** Discover how to partner with Stripe to accelerate your app's growth and gain visibility.
*   **Install Links:** Allow users to install public apps directly from your website or other external platforms.
*   **Post-Install Actions:** Configure additional steps users might need to complete after installing your app.
*   **Using Roles in UI Extensions:** Tailor app functionality based on user roles within the Stripe Dashboard.

### Migrating from Legacy Extensions

*   **Migrating to Stripe Apps:** Understand why and how to migrate existing legacy extensions to the newer Stripe Apps platform for better discoverability and features.
    *   **Migrate a Plugin to Stripe Apps or Stripe Connect:** Decide on the best migration path for your integration.
    *   **Migrate a Plugin to an OAuth 2.0 App:** Convert your plugin to use OAuth 2.0 authentication.
    *   **Migrate a Plugin to a RAK App:** Convert your plugin to use Restricted API Key (RAK) authentication.

### Reference and Tools

*   **App Manifest Reference:** A detailed guide to all fields, types, and descriptions for your `stripe-app.json` manifest file.
*   **Stripe Apps CLI Reference:** Learn how to use the command-line interface to create, develop, configure, and upload your Stripe app.
*   **Permissions Reference:** Understand available events and their required permissions for your app.
*   **Viewports Reference:** A list of available viewports within the Stripe Dashboard where your UI extensions can appear.
*   **Extension SDK API Reference:** Documentation for the Extension SDK, including context props and utility functions.
*   **Sample Apps:** Explore working examples of Stripe Apps to use as a starting point for your own development.
*   **Enable Local Network Access:** Configure your browser to allow local network access for app previewing.
*   **Enable Sandbox Support:** Make your public app available for installation in Stripe's testing environments.