Skip to content
Mobile Byte Sensei

PayCraft

Billing for Kotlin Multiplatform apps. One API across Android, iOS, web and desktop.

Status
Live
Category
Developer infrastructure
Platforms
  • Android
  • iOS
  • Web
  • Desktop
PayCraft Cloud landing page, presenting billing infrastructure for Kotlin Multiplatform apps

One API over whichever payment provider is underneath.

Subscriptions, trials and paywalls have to work on every platform an app ships to, and are usually written once per platform. PayCraft is a Kotlin Multiplatform library with a single shared API, so the same call site handles billing on Android, iOS, desktop and web.

Subscription state lives in the developer’s own Supabase project. Stripe or Razorpay keep it current through webhooks, the app never talks to a payment provider directly, and the library holds only the public Supabase key, never payment credentials.

An optional hosted dashboard configures products, pricing, paywall templates and providers. PayCraft handles billing in MBS’s own apps, including ReelsDownloader, Cappy and Hacker Keyboard, and the library is open source under the Apache 2.0 licence.

Android, iOS, web and desktop call one API; pricing comes from the dashboard, payment from the provider.

Who it is for.

  • Kotlin Multiplatform teams

    Adding subscriptions to an Android and iOS app without writing billing code for each platform.

  • Independent developers

    Self-hosted billing, with subscription data in their own database and no share of revenue taken by the library.

  • Agencies building for clients

    Provider-agnostic billing, with any additional checkout implemented against one interface.

  • Apps for the Indian market

    Razorpay checkout alongside Stripe, from the same API.

What it gives an engineering team.

Shipped capabilities only. Planned work is listed separately, under “On the roadmap.”

  • One API across platforms

    A single shared Kotlin API for Android, iOS, desktop and web. Platform code stays inside the library, so an app writes none.

  • Your database is the source of truth

    Subscription state lives in your Supabase project and payment providers update it through webhooks. The library stores only the public key.

  • Stripe, Razorpay or your own provider

    Stripe and Razorpay are built in. A PaymentProvider interface connects any other checkout.

  • Drop-in paywall components

    Paywall, banner, sheet and restore-purchase components for Compose Multiplatform, or observe the premium state and build your own.

  • Safe when offline

    The last known subscription state is used when the backend cannot be reached, so a paying user is not locked out by a network failure.

  • Guided setup

    A command-line tool applies the database migrations, deploys the webhook function, creates provider products and verifies the integration end to end.

  • Optional hosted dashboard

    Products and pricing, including trials, lifetime plans and per-country prices; a paywall designer; provider management; subscription analytics; team roles and an audit log.

  • Google Play Billing on Android

    Digital purchases on Android go through Google Play Billing, while web and desktop keep the provider checkout.

  • Self-hosting

    The backend can run on your own infrastructure, with a self-hosting guide, Docker Compose and a Helm chart.

How it works.

  1. Add the library

    Add the PayCraft dependency to the shared Kotlin Multiplatform module.

  2. Prepare the backend

    Apply the SQL migrations to your Supabase project and deploy the webhook function for your payment provider.

  3. Configure at start-up

    Configure Supabase, the provider and the plans in code, or initialise with an API key and manage them in the hosted dashboard.

  4. Add a paywall and sign the user in

    Place a paywall component and log the user in after authentication, so purchases attach to the right account.

  5. Verify

    Run the end-to-end check, which writes a test subscription and confirms the premium state resolves.

Screens.

Screens from the product design.

  • Dashboard home with MRR, active subscribers, churn and webhook success rate
  • Analytics with a monthly recurring revenue chart and churn
  • Products page listing subscription plans with their prices and status
  • Subscribers table showing each customer’s plan, status and revenue
  • Paywall designer for choosing and previewing the SDK’s paywall templates

Privacy and data.

PayCraft never stores payment credentials. Subscription data lives in the developer’s own Supabase project.

  • The library holds only the public Supabase key.
  • The app never communicates with the payment provider; providers update subscription state through webhooks.
  • Card details are handled by the payment provider, not by PayCraft or the app.

Availability and specification.

Status
Live
Availability
Category
Developer infrastructure
Business model

The library is open source under the Apache 2.0 licence and takes no share of revenue. The hosted dashboard is offered in Free, Pro and Enterprise tiers.

Built with
  • Kotlin Multiplatform
  • Compose Multiplatform
  • Ktor
  • Koin
  • Supabase
  • Stripe
  • Razorpay
  • Google Play Billing
  • Next.js

Questions about PayCraft.

Do I need a billing platform account such as RevenueCat?

No. Subscription state lives in your own Supabase project, and Stripe or Razorpay update it through webhooks.

Does PayCraft take a share of revenue?

No. The self-hosted library takes no share of revenue.

What happens when the device is offline?

The last cached subscription state is used, so a paying user is not locked out by a network failure.

Can I use a different payment provider?

Yes. Implement the PaymentProvider interface to connect your own checkout.

Can I build my own paywall?

Yes. Skip the supplied components and observe the premium state directly.

The engineering organisation behind PayCraft takes client engagements.

Client work ships under our clients’ names and is not listed here. Written response within one week.