Stripe Apps
StripeOfficialPublished by Stripe
- Skill
- Tool integration
- Software development
- MIT
- No issues found
AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
This skill provides a structured approach to developing and maintaining Stripe Apps. It guides users through selecting the correct extension architecture, implementing authentication, building UI components, and managing backend services or webhooks. By leveraging bundled reference files and canonical documentation, it ensures that app development follows Stripe's best practices for security, configuration, and lifecycle management.
What it does
- Provides guidance on selecting the appropriate Stripe extension interface.
- Assists in building and modifying Stripe Dashboard UI components.
- Supports the implementation of backend services, webhooks, and secret storage.
- Helps determine the correct authentication method for Stripe API access.
- Offers instructions for testing, debugging, and publishing Stripe Apps.
- Clarifies the applicability of extensions for specific billing or workflow requirements.
When to use it
- When you need to build a custom UI extension for the Stripe Dashboard.
- When deciding between Restricted API keys, Platform keys, or OAuth for your app.
- When implementing backend logic or handling Stripe events via webhooks.
- When you need to store sensitive credentials securely using the Secret Store API.
- When troubleshooting or modifying an existing Stripe App's manifest or configuration.
Advantages
- Ensures alignment with official Stripe development patterns and security standards.
- Reduces development time by providing clear paths to relevant documentation.
- Helps prevent common architectural errors in app authentication and event handling.
- Provides a consistent workflow for the entire app lifecycle from scaffolding to release.
Usage examples
- “How do I determine if my Stripe App needs a backend?”
- The agent will reference the backend documentation to explain that a backend is required for long-term data storage, server-side secrets, or handling webhooks, while suggesting the Secret Store API for simpler needs.
- “Help me choose the right authentication type for a private Stripe App.”
- The agent will compare Restricted API keys, Platform keys, and OAuth, recommending Restricted API keys as the simplest and most secure choice for private integrations.
Install
Download the skill as a ZIP:
https://mp-staging.autogineer.com/agent-skills/stripe/stripe-apps/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip stripe-apps.zip -d .agents/skills
Documentation by Stripe
Stripe Apps
Select and read the existing guidance for the user’s task. Product documentation describes what an extension can do; implementation guides describe how to build it. Before recommending an extension or writing code, load the applicable bundled reference files as well as the relevant product documentation. A link or filename in this skill isn’t a substitute for reading its contents.
For a capability question, check native Stripe features and the documented applicability and limitations of the extension. For an implementation request, create or modify working files using the selected guide. For an existing app, inspect its manifest, packages, installed SDK, and local agent instructions before deciding what to change.
Choose the relevant documentation
Use information already supplied by the user or existing app. Read <references/discovery.md> when you need to clarify the app’s requirements, and <references/extension-types.md> for an overview of app architectures. Ask only for missing information that affects the task.
Product capabilities
Use these existing product documents to determine which capability fits and whether the account has the required access. Don’t infer support from an extension’s name or the existence of a scaffold.
| Task | Read |
|---|---|
| Select an extension interface and its supported implementation types | Extension points and how extensions work |
| Change how items are included on subscription invoices | Item handling extensions |
| Customize prorations | Native proration behavior and prorations extensions |
| Apply customer balances | Customer balance extensions |
| Calculate discount amounts | Discount calculation extensions |
| Add an action to Stripe Workflows | Existing workflow actions, existing custom actions, and how custom actions work |
| Customize another product’s behavior | Follow the selected interface’s product documentation from the extension-point catalog |
Implementation guidance
The references/*.md files are bundled with this skill. After selecting the capability, load the applicable files before following their links to supporting documentation. Combine rows when an app needs multiple types. Follow the selected guide’s prerequisites, scaffolding, testing, and debugging instructions.
| Task | Read |
|---|---|
| Build or modify any Dashboard UI, including drawers and full-page apps | <references/ui-extensions.md>, then each selected component’s current API documentation |
| Author, test, or debug a script extension | <references/script-extensions.md>, then the selected extension point’s implementation guide |
| Build a custom-action script | <references/script-extensions.md> and build a custom action with a script |
| Build a custom-action remote function | Build a custom action with a remote function |
| Build a self-hosted UI back-end or webhook service | <references/backend.md> and <references/authentication.md>; also load <references/webhooks.md> when receiving Stripe events |
| Store app credentials with the Secret Store API | The Secret Store API section in <references/backend.md> and store secrets, including for apps without a self-hosted back-end |
| Look up APIs, SDK patterns, configuration, or additional extension documentation | <references/canonical-docs.md> |
Use the UI reference for layout and composition, and current component documentation for import paths, props, and styling APIs. For scripts and remote functions, follow the selected extension’s documentation; UI and self-hosted back-end instructions don’t define their runtime capabilities.
Shared app lifecycle
Read these references when the corresponding task is needed. Reuse existing apps and packages; scaffold only what is missing.
| Task | Read |
|---|---|
| Scaffold, build, test, preview, or upload an app | <references/workflow.md>, together with the selected implementation guide |
| Choose authentication for access to Stripe APIs | <references/authentication.md> |
| Receive Stripe events | <references/webhooks.md> |
| Build a first-run setup experience | <references/onboarding-ux.md> and the UI reference |
| Release versions, change installed permissions, or publish to the marketplace | <references/publishing.md> |
| Submit feedback after running app toolchain commands | <references/feedback.md> |
Load bundled reference files
Use the task tables to select every applicable bundled reference under
references/, then open those files with a file-reading tool before starting the corresponding work. For example, UI with a self-hosted back-end needs both UI and back-end guidance; onboarding also needs the UI reference.Follow relevant pointers to other bundled references inside the files you load, including filenames written as code rather than links. For example, back-end guidance can require authentication guidance, and changing permissions can require publishing guidance. Use this skill’s direct links to locate those files.
Read the canonical documentation required by those references. External documentation supplements the bundled guidance on workflow, layout, and other task-specific decisions.
Resolve
references/paths relative to this skill’s directory and bare reference filenames relative to itsreferences/directory. When reading the hosted skill, fetch the corresponding reference URLs relative to the skill URL.Load only references relevant to the task, and reuse contents already read during the session unless they have changed. A full-stack app doesn’t require every document in the skill.
Read canonical pages using the available documentation tools. Prefer
stripe docswhen available, including for pages that require account access.Use current product documentation and the installed SDK’s types for API contracts and limitations. If an example in a reference disagrees, check the version and follow the applicable canonical documentation.
Read any interface-specific agent instructions supplied with an existing or newly generated extension. If none are present, use the linked product and implementation guides.
If the documentation doesn’t establish that an extension meets a requirement, state what is unknown or unsupported before proceeding.
Keep the work within the user’s request. Report the changes, validation results, and remaining steps relevant to that app.
Files
- ATTRIBUTION.mdAdded by AutoGineer819 B
- LICENSELicence file added by AutoGineer1.1 KiB
- SKILL.md7.6 KiB
- references/authentication.md4.6 KiB
- references/backend.md4.4 KiB
- references/canonical-docs.md4.4 KiB
- references/discovery.md9.2 KiB
- references/extension-types.md5.1 KiB
- references/feedback.md1.9 KiB
- references/onboarding-ux.md2.7 KiB
- references/publishing.md5.7 KiB
- references/script-extensions.md7.3 KiB
- references/ui-extensions.md20.7 KiB
- references/webhooks.md3.4 KiB
- references/workflow.md8.3 KiB
references/workflow.md
Workflow — end-to-end build order
MANDATORY — Full development loop (quick reference)
Follow this exact sequence for every new app. Do NOT skip or reorder steps.
1. stripe plugin install apps ← one-time CLI setup
2. stripe generate app <name> && cd <name> ← scaffold (NOT `stripe apps create`)
3. pnpm install ← install deps
4. [modify scaffolded files + create missing ones] ← implement (only add what scaffold doesn't provide)
5. pnpm build ← compile UI and scripts (skip for backend-only apps)
6. pnpm test ← run tests
7. stripe apps start ← local preview for Dashboard UI extensions
8. stripe apps upload ← publish version (REQUIRED before Secret Store or fetchStripeSignature work)
9. Install in a sandbox using the private or public flow below ← test the installed app
10. Dashboard → Apps → Submit for review ← marketplace publishing (optional)
11. stripe feedback ← one report per build session (see references/feedback.md)BLOCKED: Do NOT use stripe apps create — it does not scaffold correctly. Always use stripe generate app.
MANDATORY: Do NOT create files manually when stripe generate app provides them. The scaffold creates a V2 workspace: stripe-app.yaml, package.json, pnpm-workspace.yaml, and ui/src/views/App.tsx with the correct structure. Only create files that the scaffold doesn’t provide (for example, server.js for your backend). Modify scaffolded files as needed — don’t rewrite them from scratch.
End-to-end build order (detailed)
Follow this sequence exactly. Deviating from it is the #1 source of confusion when building Stripe Apps.
Step 1 — Prerequisites (one-time setup)
Install the Stripe CLI, then install the Apps plugin:
stripe plugin install appsPlain-language: “This tool lets the Stripe CLI create and manage apps. You only need to do this once.”
Verify your CLI version is 1.52.0 or newer:
stripe versionStep 2 — Create the app
stripe generate app <your-app-name>
cd <your-app-name>This creates a new V2 workspace with the correct directory structure, stripe-app.yaml manifest, and example UI extension.
What gets created:
<your-app-name>/
├── stripe-app.yaml # V2 app manifest (YAML) — name, permissions, viewports
├── package.json # workspace root
├── pnpm-workspace.yaml # declares workspace packages
├── ui/
│ ├── package.json
│ └── src/
│ └── views/
│ └── App.tsx # main UI component
├── extensions/ # script extensions (one subdir per extension)
└── README.mdStep 3 — Install dependencies
pnpm installStep 4 — Build and test
For apps with a UI extension, compile TypeScript and run tests:
pnpm build
pnpm testBackend-only apps without TypeScript can skip this step.
Step 5 — Develop UI extensions locally
stripe apps startPlain-language: “This opens your app live in your Stripe Dashboard while you build it. Changes you save show up immediately — you don’t need to upload anything yet.”
What this does:
Opens a browser to your Stripe Dashboard with your app running live
Watches for file changes and hot-reloads
Works against your live Stripe account or a sandbox
Notes:
stripe apps startrequires browser access; Safari isn’t supported — use Chrome or FirefoxThis does not persist — your app is only visible while the command is running
The app isn’t installed on your account yet; it’s only previewed locally
Step 6 — Upload a version (when ready to share or test permissions and secrets)
Before uploading, run stripe login and log in to the account for your app’s distribution type:
For a private app, log in to the sandbox where you want to test it.
For a public app, log in to your live account.
For a public app that you want to test in a general sandbox, update its manifest to support sandbox installs before uploading.
stripe apps uploadWhat this does:
Creates a new version of your app in the Stripe Dashboard
Generates the signing secret needed for
fetchStripeSignatureand the Secret Store APIMakes the version available to install
After uploading a private app:
Open Created apps in the sandbox where you uploaded the app
Select your app and open the Versions tab
Click Install, or click Change version if a version is already installed
After uploading a public app:
Complete the remaining steps to enable general sandbox support
Create an external test link for the uploaded version
Open a general sandbox, then visit the external test link to install the app
When you need to upload before stripe apps start:
Using the Secret Store API
Using
fetchStripeSignatureto authenticate the UI to a backendTesting permissions that require the app to be installed
Step 7 — Install a private app in live mode (when ready to use with real data)
Skip this step for public apps. Before installing a private app in live mode, log in to your live account and run stripe apps upload again.
Go to the Dashboard → Apps page
Select your app
Choose “Private to your account”
Select the version to install
Click Install
Plain-language: “A sandbox uses test data so you can try things safely. Live mode uses real customer data. Always test in a sandbox first.”
Step 8 — Ship a new version
Bump
versioninstripe-app.yaml(use semantic versioning:1.0.0,1.0.1,2.0.0)Upload:
stripe apps uploadGo to Dashboard → Apps → your app → version history → install the new version
Important: Versions must be uploaded in order. If you upload 2.0.0 before 1.0.0, 2.0.0 won’t be available for release.
Step 9 — Publish to the marketplace (optional)
To submit your app for marketplace review:
Go to Dashboard → Apps
Select your app
Click Submit for review
Requirements:
Verified email address on your Stripe account
Business details filled in
App passes review requirements
Final step — Submit feedback (after a build session)
If you weren’t able to accomplish the user’s goal on the first try and the build process wasn’t clear, send feedback. See references/feedback.md for details on how to share feedback with Stripe.
Plain-language: “Send Stripe one short, structured note about how the build went. It’s not support, and it never blocks your work.”
Key gotchas
stripe apps start vs stripe apps upload
stripe apps start | stripe apps upload | |
|---|---|---|
| Purpose | Local development | Publish a version |
| Persistence | Not persistent — only while command runs | Persists in Stripe Dashboard |
| Secret Store | Not available | Available after upload |
fetchStripeSignature | Only works after at least one upload | Works after upload |
After updating permissions:
Users must re-authorize the app
The “Review Permissions” button only appears on the Apps workload page — not on the app itself
The app returns an invalid-request error for undeclared permissions until the user re-authorizes
Always warn users about this step when you change permissions
Sandboxes for app development:
Use sandboxes for safe testing — they provide isolated environments where you can test without affecting live data
Each sandbox has its own app installation and signing secrets
Useful for testing destructive operations or onboarding flows
Requirements and compatibility
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Security
No issues found by our static scan· No issues found
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Published by
- Stripe
- Publisher
- Stripe (Official)
- Source
- stripe/ai · skills/stripe-apps · commit 38fa045
- Licence
- MIT License (redistribution allowed)
- LICENSE (added by AutoGineer from LICENSE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
- Also distributed in
- stripe/ai, stripe/ai, stripe/ai, stripe/ai, stripe/ai
AutoGineer is not affiliated with or endorsed by Stripe.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download stripe-apps.zip