✨ Improvements
- Added localized translations for the ‘SEPA instant credit transfer’ payment method button.
🚀 New features
- Manual payment approval (Backend-Driven CIT). Require explicit backend approval of each payment before it’s created. See the Manual payment approval guide, or the migration guide if you’re moving from the legacy manual flow.
- Added support for Bancontact Payconiq, Xfers PayNow, Omise PromptPay, and Rapyd PromptPay payment methods.
🚀 New features🔧 Fixes
- Payment methods are now re-evaluated when you call
primer.refreshSession(). Methods hidden by your Checkout Builder visibility rules are removed from the rendered list instead of staying visible, and a newonAvailablePaymentMethodsRefreshcallback notifies you whenever the available payment methods change.
refreshSession() is ignored (with a console warning) while a payment is in progress, so payment methods can’t change underneath the customer mid-payment.- Fixed false
primer:payment-failureevents being emitted for payments that were still processing and went on to succeed. When a resume response indicates the payment is still being authorized, the SDK now waits for it to settle before reporting an outcome — preventing customers from being asked to retry a payment that had already gone through. - Payment failure events now include the created payment’s
idand adiagnosticsId, making failures easier to reconcile against your Dashboard and the Payments API.
✨ Improvements
- Redirect APMs flow improvements.
- Fixed an issue where the card form could be submitted multiple times concurrently.
🚀 New features
- Content in the
mainslot now renders immediately, before the SDK finishes initializing. Combined with theloader-disabledattribute, this lets you show custom UI alongside<primer-main>before theprimer:readyevent fires.
🔧 Fixes
- Fixed a issue where aborting a payment in some scenarios wasn’t working correctly.
🔧 Fixes
- Fixed a CSP issue that was blocking the SDK from rendering.
🚀 New features
- Added Adyen Mbway and Pay NL Paypal payment methods
- Fixed cardholder name validations
- Fixed rendering of certain APM buttons
🔧 Fixes
- Fixed filter vaulted cards by orderedAllowedCardNetworks
- Fixed google pay disabled not working on safari
- Fixed a single card network icon on the card number input should not be interactive (accessibility)
- Fixed propagate options on the hosted inputs
🔧 Fixes
- Fixed initialization lifecycle not cleaning up previous state properly, causing issues when reinitializing (e.g. when changing the
clientToken)
🚀 New features
- Added Klarna and Adyen Klarna payment methods
- Fixed 3ds method timeout
🔧 Fixes
- Paying with vaulted methods now triggers
primer:payment-startcorrectly
🔧 Fixes
- When using Google Pay as a payment method, amount sent when creating client session will take presedence over calculated amount from line items
- Internal payment method processing improvements
🔧 Fixes
- Fixed a billing address component render issue when sdkCore was not explicitly set
- Fixed a country selector inconsistent behavior
🔧 Fixes
- Fixed an issue that prevented card fields from rendering on Angular (NgZone)
🚀 New features
- Added gift card payment methods support on
sdkCore: true(PAY_NL_KAARTDIRECT,MOLLIE_GIFTCARD) primer:payment-cancelevent now includes payment data when a payment method is already created before it’s unselected
- Fixed the order of the
primer:card-successevent being fired - Fixed dark mode styling issues on dialogs
- Fixed card network displaying an infinite loading spinner
🔧 Fixes
- Fixed a bug where third-party browser extensions could cause the checkout screen to become blank
🔧 Fixes
- Fixed a card form autofill bug where the expiry date field didn’t handle full-year formats correctly (e.g. on Chrome, autofilling
10/2026would populate10/20instead of10/26)
🔧 Fixes
- Fixed Apple Pay payment sheet closing when trying to pay with third-party desktop browsers
- EFTPOS co-badged cards now leave network selection up to the vendor without user interaction
🔧 Fixes
- Fixed an issue where checkout failures were triggered when the user cancelled a payment flow
🚀 New features
primer:payment-startevent is now preventable, providing control over payment creation flow withabortPaymentCreation()andcontinuePaymentCreation()methodsprimer:payment-startevent now includespaymentMethodType,timestamp, and optionalidempotencyKeysupport viacontinuePaymentCreation({ idempotencyKey })primer:vault-methods-updateevent now includescvvRecapturedata- Added new
primer:payment-cancelevent, dispatched when a payment is cancelled
-
Events API changes
primer:payment-success— renamedpaymentSummaryproperty topaymentprimer:payment-failure— renamedpaymentSummaryproperty topayment- Vault events no longer use the
vaultnamespace (e.g.primer:vault:methods-update→primer:vault-methods-update,primer:vault:selection-change→primer:vault-selection-change) primer:payment-startevent payload changed to{ paymentMethodType, abortPaymentCreation, continuePaymentCreation, timestamp }
-
Callbacks deprecated
- All callbacks (
onPaymentSuccess,onPaymentFailure,onPaymentStart,onPaymentPrepare,onVaultedMethodsUpdate) are now deprecated. Use events instead.
- All callbacks (
-
Simplified API
- Removed
.toArray()on vaulted payments — vaulted payments are now returned as an array directly - Removed
.toArray()on payment methods — payment methods are now returned as an array directly
- Removed
- Events Guide - Updated event system overview
- Events Reference - Full payload reference
- Prevent duplicate payments with idempotency keys - Recipe for using idempotency keys with the preventable
primer:payment-startevent
🚀 New features
- Added
primer:bin-data-availableevent, providing card network detection along with rich BIN data including issuer information, account funding type, and card attributes. - Added
primer:bin-data-loading-changeevent to indicate when BIN data is being fetched from Primer’s servers.
- Events Guide - Usage examples
- Events Reference - Full payload reference
🔧 Fixes
- Fixed a failed payment flow issue
🔧 Fixes
- Improved error handling and fixed circular errors
🔧 Fixes
- Fixed Google Pay vaulted item rendering
- Fixed PayPal button rendering issues within vault manager
✨ Improvements
- Enhanced error logging capabilities
🚀 New featuresSupport for redirect-based Alternative Payment Methods (APMs) with a popup-first approach. The SDK opens a popup overlay dialog for redirect payments, with automatic fallback to full-page redirect for WebViews and blocked popups.Key Changes:
-
Redirect Payment Methods
- Popup-first flow with overlay dialog
- Automatic fallback to full-page redirect for WebViews and blocked popups
- New
redirectconfiguration options:returnUrl,forceRedirect,resumePaymentOnPopupClosure
-
New Events
primer:dialog-open— dispatched when the redirect payment dialog opensprimer:dialog-close— dispatched when the redirect payment dialog closes
- SDK Options Reference - Redirect configuration details
- Events Reference - Dialog event documentation
🔧 Fixes
- Import regression bug fix that fixes PayPal button rendering on
sdkCore: false
🔧 Fixes
- Fixed dispatch of payment-start event
✨ ImprovementsNew design tokens added for error states in components:Check the documentation to learn more.
🔧 Fixes
- Fixed translations for en-US locale
- Fixed PayPal horizontal layout style
🚀 New featuresApple Pay and Google Pay are now available in SDK Core with early-stage support.Key Changes:Apple Pay and Google Pay changesPayPal changesDocumentation:
- Apple Pay payment method support in SDK Core
- Google Pay payment method support in SDK Core
- Apple Pay third-party browser payment using iPhone support is added
- Enhanced PayPal support with better defaults and per-funding source styling configuration
enabledPaymentMethods array:-
Apple Pay Payment Method
- Full Apple Pay integration with SDK Core
- Button customization (17 button types, 3 button styles)
- Billing address capture from Apple Wallet (
requiredBillingContactFields) - Shipping contact capture (address, name, email, phone) via
requiredShippingContactFields - Non-Safari browser support
-
Google Pay Payment Method
- Full Google Pay integration with SDK Core
- Button customization (type, color, size mode, radius, border, locale)
- Billing address capture from Google account (
captureBillingAddress) - Shipping address capture with country filtering (
captureShippingAddress) - Email capture (
emailRequired) - Locale support for 30+ languages
- Enhanced PayPal Support
- Per-funding source styling configuration
- Override styles for specific funding sources (e.g., PayPal, Pay Later, Venmo)
- Better defaults for button appearance
- Buyer country configuration support
- Apple Pay Options Reference - Complete configuration options and API reference
- Google Pay Options Reference - Complete configuration options and API reference
- PayPal Options Reference - Complete configuration options and API reference
The new payment methods are in early-stage support. Additional features and improvements will be added in future releases.
🚀 New featuresThis release introduces the Documentation:
primerJS.vault.* namespace for better API organization and adds programmatic vault deletion capability. Enhanced data exposure now provides parity between headless and non-headless vault flows.Key Changes:-
Vault API Namespace (Breaking Change)
- New
primerJS.vault.*namespace groups all vault operations vault.createCvvInput()replacesprimerJS.createCvvInput()vault.startPayment()replacesprimerJS.startVaultPayment()- Old methods deprecated with console warnings in development mode
- Old methods will be REMOVED in the next release
- New
-
New Vault Deletion Method
- Added
primerJS.vault.delete(paymentMethodId)for programmatic deletion - Enables custom vault management UIs without Primer UI components
- Added
-
Enhanced Data Exposure for Headless Vault
- Cards: Now exposes
cardholderName,expirationMonth,expirationYear - PayPal: Now exposes
email,firstName,lastName,externalPayerId - Klarna: Now exposes
email,firstName,lastName - Provides data parity between headless mode and non-headless vault UI
- Cards: Now exposes
- Headless Vault Implementation Guide - Complete implementation example
- Events & Callbacks Reference - VaultAPI documentation
✨ ImprovementsIntelligent change detection for SDK options prevents unnecessary re-initialization when object references change but content remains identical. Solves form flickering and data loss issues in React applications.Key Changes:Documentation:
-
Deep Comparison Implementation
- Added deep equality comparison for
optionsproperty changes - Prevents SDK re-initialization when new object references contain identical values
- Eliminates form flickering and data loss during React re-renders
- Added deep equality comparison for
-
React Integration Improvements
- Inline options objects now work correctly without causing re-initialization
- User-entered payment data preserved across component updates
useMemono longer required (though still recommended for optimal performance)
-
Backward Compatible
- No breaking changes or API modifications
- Existing code continues to work identically
- React Integration Guide - Updated with deep comparison behavior and best practices
- Options Guide - Comprehensive options configuration patterns
🚀 New featuresComplete headless vault implementation allowing full programmatic control over vaulted payment methods. Build custom vault UIs while retaining all vault functionality.Key Changes:
-
Headless Vault Mode
- Added
vault.headlessconfiguration option to hide vault UI components while maintaining full vault functionality - Enables custom vault UI implementation with complete control over layout and styling
- All vault features remain operational (payment method selection, CVV recapture, submission)
- Fully compatible with existing vault configuration options
- Added
-
CVV Recapture Support
- Added
cvvRecaptureflag inonVaultedMethodsUpdatecallback data - Indicates when CVV re-entry is required for a vaulted payment method
- Automatically set based on payment processor requirements
- Added
-
New PrimerJS Methods
- Added CVV input creation for custom vault UI
- Added vault payment initiation for programmatic control
- Type-safe integration with TypeScript support
- Changed
vault.showEmptyStatedefault fromtruetofalse - Aligns with common use cases where empty state is custom or hidden
- Explicit opt-in now required for empty state display
- Headless Vault Implementation Guide - Complete implementation example with code
- Vault Options Reference - Complete vault.headless API reference
- Events & Callbacks Reference - Method documentation
🚀 New features
- Added new event
primer:vault:selection-changedispatched when a payment method is selected or deselected
- Fixed slotted show other payment methods toggle button in the case when
Paybutton is of typebutton
✨ Improvements
- Added Adyen Cash App and Affirm payment instrument types
🚀 New featuresAdded new slots for vault submit button and slot for Show other payment methods toggle button. Refer to the
<primer-vault-manager> and <primer-show-other-payments> SDK reference documentation on how to use them.🔧 FixesFixed build failures caused by dynamic imports issue in the billing address component’s locale country data.Key Changes:
- Billing Address Component
- Fixed dynamic imports for locale country data
- Resolved build failures and bundle errors
- Component now builds correctly across all environments
- Merchants experiencing build failures should update immediately
- No API changes or migration required
🚀 New featuresPre-fill the cardholder name field with a default value using synchronous initialization. No race conditions, no blank field flash - the value appears immediately when the checkout loads.Key Changes:Technical Details:
- Cardholder Name Pre-filling
- Added
card.cardholderName.defaultValueoption for synchronous cardholder name pre-filling - Value applied during iframe initialization (before it becomes visible)
- Eliminates race conditions and blank field flash from async approaches
- User can edit or clear the pre-filled value
- Backward compatible - optional parameter
- Added
- Synchronous initialization via iframe URL hash
- Value visible immediately when iframe loads (T+4ms vs T+16ms for async)
- No timing issues or readiness checks required
- Works with SDK Core enabled (default)
- Pre-filling from user profiles during checkout initialization
- For runtime updates after initialization, use
primerJS.setCardholderName()(see v0.7.1)
- Card Options Reference - Complete API reference
- Options Guide - Configuration patterns and best practices
✨ ImprovementsThis release improves the accessibility and visual consistency of the Vault Manager component, along with fixing layout issues in the Show Other Payments component.Key Changes:
-
Vault Manager Enhancements
- Improved accessibility for better screen reader support and keyboard navigation
- Fixed icon rendering issues in dark mode for better visual consistency
-
Show Other Payments Component
- Fixed persistent padding issue when the component is collapsed
- Improved layout behavior for a cleaner collapsed state
🚀 New featuresAdded Documentation:
setCardholderName() method to PrimerJS instance for programmatically setting cardholder name values.Key Changes:- New PrimerJS Method
- Added
setCardholderName(name: string)- Programmatically set the cardholder name field value - Useful for pre-filling from user profiles or auto-completing checkout forms
- Must be called after
primer:readyevent and after card inputs are rendered - Graceful error handling with warnings if called before initialization
- Added
- Events & Callbacks Reference - Full API reference
- Events Guide - Practical usage examples
🚀 New featuresAdded comprehensive payment event system with PII-protected payment summaries and vault update notifications.Key Changes:After (v0.7.0):Documentation:
-
Callback Architecture Refactor (BREAKING)
- Removed
onPaymentCompleteunified callback - Added
onPaymentSuccess(data: PaymentSuccessData)- Handles successful payments with payment summary - Added
onPaymentFailure(data: PaymentFailureData)- Handles payment failures with error details - Added
onVaultedMethodsUpdate()- Notifies when vaulted payment methods change - Existing callbacks unchanged:
onPaymentStart,onPaymentPrepare
- Removed
-
State Field Renames (BREAKING)
error→primerJsError(SDK initialization/component errors)failure→paymentFailure(payment processing failures)failure.details→paymentFailure.diagnosticsId- Added
paymentFailure.datafor additional error metadata
-
New Payment Events
primer:payment-start- Dispatched when payment creation beginsprimer:payment-success- Dispatched on successful payment (includes PII-filtered PaymentSummary)primer:payment-failure- Dispatched on payment failure (includes error details)primer:vault:methods-update- Dispatched when vaulted payment methods update
-
PII Protection
- PaymentSummary type with whitelisted fields only (last4Digits, network, bankName)
- No cardholder names, full card numbers, or other PII exposed in events
- Compliant with GDPR Article 5(1)(c) and PCI DSS Requirement 3.4
-
Performance Improvements
- 40-60% reduction in redundant state-change events through deduplication
- Internal optimization with no API changes
- Events Guide - Complete event system overview
- Events & Callbacks Reference - Full API reference
🚀 New featuresPayPal is now available in SDK Core with early-stage support. PayPal provides button-based payment flows with comprehensive customization options for styling, funding source control, and vaulting.Key Changes:Documentation:
- PayPal payment method support in SDK Core
- Button style customization (layout, color, shape, height, label)
- Funding source control (enable/disable specific PayPal payment options)
- Vaulting support for saved PayPal accounts
- Sandbox testing options for development
enabledPaymentMethods array:- PayPal Options Reference - Complete PayPal configuration options
PayPal is in early-stage support. Additional features and improvements will be added in future releases.
🔧 FixesFixed critical bug where billing address was being set even when not required by checkout configuration, causing payment submission failures and validation errors.Key Changes:
- Fixed billing address validation logic to respect checkout configuration requirements
- Billing address no longer submitted when not required by merchant settings
- Eliminated unnecessary validation errors during payment submission
- Improved payment flow reliability
🔧 FixesFixed billing address rendering issue when
sdkCore option was omitted. The billing address component now correctly displays when relying on the default SDK Core setting introduced in v0.4.0.Key Changes:- Fixed SDK Core default detection for billing address component
- Billing address now renders correctly when
sdkCoreoption is not explicitly set - No impact on other SDK functionality
🚀 New featuresBLIK support is now available for the Polish market. BLIK is Poland’s leading mobile payment system that allows customers to authorize payments using a 6-digit code from their banking app.Key Changes:
- BLIK payment method for Polish market (6-digit code from banking app)
- Auto-submit with real-time status polling and timeout warnings
- Collapsible UI: button → form → loading → success/error states
- Full localization (40+ languages) and dark mode support
- TypeScript improvements: Enhanced JSDoc documentation for all
PrimerCheckoutOptionsproperties - Dependency updates across all packages
🚀 New featuresBilling address capture is now supported through Primer Dashboard checkout configuration.Key Changes:
- SDK Core enabled by default when
sdkCoreoption not specified - Billing address form support (SDK Core only)
- Automatic billing address display in drop-in mode
- Manual integration required for custom layouts
- Removed “experimental” terminology from SDK Core references
- Expanded test coverage for SDK selection scenarios
- Enable via Primer Dashboard checkout configuration
- Automatic display in drop-in mode
- Manual inclusion needed for slotted card forms (custom layouts)
- Requires SDK Core enabled (not available with
sdkCore: false) - Billing Address Documentation (coming soon)
🔧 Fixes
- Fixed Google Pay rendering issue in certain browser configurations
- Vault CVV recapture
- Billing address API improvements
Most changes in this release relate to SDK core development.
✨ ImprovementsThis release contains internal SDK improvements with no user-facing component changes.Internal Changes:
- Iframe lifecycle fixes
- Payment methods filter list
- Datadog logging integration
🔧 Fixes
- PayPal button height fix
- Native payment method CSS improvements
✨ ImprovementsThis release contains internal SDK improvements with no user-facing component changes.Internal Changes:
- Card form slot handling improvements
✨ ImprovementsThis release contains internal SDK improvements with no user-facing component changes.Internal Changes:
- Analytics URL from client token
- Vault management features
- Logger implementation
- Iframe RPC refactor
✨ ImprovementsThis release contains internal SDK improvements with no user-facing component changes.Internal Changes:
- Error standardization
- HTTP retry logic
- Locale support improvements
🚀 New features
- Added cardholder name toggle option for card form customization
- Cardholder name display toggle
- Fixed toggle implementation in primer-sdk-web
✨ Improvements
- Removed unnecessary peer dependencies and extended React version compatibility
🔧 Fixes
- Removed native
:focus-withinCSS selector and implemented alternative focus handling for Firefox compatibility
🔧 FixesFixed vault manager initialization preventing unnecessary API calls when vault is disabled. Components now handle missing customer ID gracefully.Changes:
- Lazy vault initialization (only when
vault.enabledis true) - Eliminated unnecessary API calls when vault disabled
- Graceful handling of missing customer ID
🚀 New featuresPayment Method Container enables declarative payment layouts using Documentation:
include and exclude attributes, eliminating verbose event listener code.Key Features:- Declarative filtering with HTML attributes
- Automatic updates when payment methods change
- Backward compatible with existing implementations
✨ Improvements
- Extended Payment type definitions to include
DLOCAL_PIX,ALMA, andPAY_NL_RIVERTY
🚀 New featuresComplete vault component redesign with new control system for disabling payment methods globally or individually.Vault Component:
- Visual overhaul with improved responsive layout
- Custom empty state slot:
<div slot="vault-empty-state"> - Control empty state visibility:
vault.showEmptyState: false - Enhanced accessibility
- Individual method disabling:
<primer-card-form disabled></primer-card-form> - Global disabling:
disabledPayments: truein SDK options - Consistent disabled styling across all methods
🚀 New featuresIntroduced type-safe
PrimerJS class replacing direct SDK access:refreshSession()- Refresh client sessiongetPaymentMethods()- Retrieve available methodsonPaymentStart- Payment initiation callbackonPaymentPrepare- Intercept payment creationonPaymentComplete- Unified payment result callback
✨ Improvements
- Improved icon display and alignment for card network selection
🔧 Fixes
- Fixed icon display next to card number input
🚀 New features
- Added
hide-labelsproperty to card form - Introduced
primer-oncheckout-completeandprimer-oncheckout-failureevents
✨ Improvements
- Enhanced vault component functionality
- Improved transitions
- Fixed custom style application
🚀 New features
- Introduced experimental Stripe ACH UI and configuration support
✨ Improvements
- Moved style injection logic into components for better reinitialization and stability
✨ Improvements
- Optimized NPM builds with improved bundling
- Faster loading
- Reduced CDN dependency
🔧 Fixes
- Fixed Safari styling issues by switching from Inter font to system fonts
🚀 New featuresIntroduced standalone vaulting component, Klarna integration, and significant UX improvements.Key Features:
- Klarna payment method with collapsible design
- Standalone vault component supporting all backend payment methods
- Enhanced error validation (triggers on blur instead of submit)
- Improved styling system with JavaScript-injected CSS tokens
- CSS-only loader with merchant customization support
🔧 Fixes
- Fixed TypeScript type bundling
- Apple Pay/Google Pay button height adjustments
🚀 New featuresFirst public beta introducing card form, Apple Pay, Google Pay, PayPal (beta), localization support, and comprehensive styling API.Core Components:
<primer-checkout>- Main container and SDK initialization<primer-card-form>- Card input with validation<primer-payment-method>- Payment method renderer- Card input components: number, expiry, CVV, cardholder name
- Form helpers: button, input, label, error, wrapper
✨ Improvements
- Initial NPM package setup and name reservation