TinyShip 2.3.0 Released
This release focuses on expanding TinyShip's payment capabilities by officially adding the sixth payment provider: DodoPayments. It uses a Merchant of Record model, so developers do not need to handle global taxes, compliance, and refunds by themselves. Connect once, then start collecting payments for global markets.
With this update, TinyShip's payment matrix now covers both domestic platforms, WeChat Pay and Alipay, and international platforms, Stripe, PayPal, Creem, and DodoPayments. It supports subscriptions, one-time payments, and credits across the full business model surface.
Core Additions
End-to-End DodoPayments Integration: Added the dodo payment provider with Hosted Checkout, Standard Webhooks with HMAC SHA256 signature verification, and Customer Portal support, unified across all three frameworks
Complete Support for Three Payment Modes: Recurring subscriptions, one-time payments, and credits are all implemented for DodoPayments and validated through E2E tests
Database Schema Extensions: Added dodoCustomerId to the users table and dodoSubscriptionId to the subscriptions table, with Drizzle migrations synced for both PG and SQLite dialects
Configuration and Engineering Improvements
Full Webhook Event Coverage: Handles payment.succeeded, payment.failed, and 7 subscription lifecycle events: active / renewed / cancelled / expired / on_hold / updated / plan_changed
Admin Dashboard Adaptation: The admin subscription list now supports filtering by the Dodo provider and searching by dodoSubscriptionId, with subscription sources correctly labeled as Dodo instead of falling back to other types
Payment Success Page Without Client Verification: DodoPayments uses Webhooks as the source of truth, so /payment-success?provider=dodo displays success directly without extra client-side verification
Customer Portal Button: Dashboard subscription cards show a "Manage Subscription" button for Dodo subscribers, linking to Dodo's built-in customer portal
Documentation and Configuration
New Dodo Chapter in User Guide: docs/user-guide/payment/dodo.md covers the application flow, environment variables, test mode, Webhook configuration, plan examples, and important notes
Payment Testing Guide Updated: Added Dodo test card numbers, including 4242..., tunneling setup, and local Webhook debugging instructions
Environment Variables Completed: env.example now includes DODO_PAYMENTS_API_KEY, DODO_PAYMENTS_WEBHOOK_KEY, and DODO_PAYMENTS_TEST_MODE
Testing and Stability
Full E2E Coverage: Added 537 lines of Playwright tests covering subscription payments, one-time payments, and credits, including Stripe Elements iframe card input and multilingual checkout pages
Three Frameworks × Two Databases Validation: Completed 6 rounds of Dodo-specific testing across Next.js / Nuxt / TanStack Start with PostgreSQL / SQLite, passing 30/30 tests
Full Regression Validation: Completed final full E2E runs across all three frameworks with PostgreSQL, passing 330/330 tests and confirming no regression