Self-host

Run your own purchase backend in three commands

This page is for teams whose rules require their own server. One Docker image serves the RevenueCat-compatible API and the dashboard, next to your own Postgres.

Startterminal
git clone https://github.com/revenuedot/revenuedot && cd revenuedot
cp .env.example .env        # set POSTGRES_PASSWORD
docker compose up -d        # API, dashboard and Postgres on http://localhost:8787

Open http://localhost:8787, create your account and project, and add your App Store and Google Play credentials. Then install the RevenueDot SDK in your app and set its proxy URL to your server before configure:

Your appSwift
Purchases.proxyURL = URL(string: "https://iap.example.com")!

Set entitlement verification to disabled on iOS and Android, because a self-hosted server signs responses with its own key. An app that already ships the RevenueCat SDK sets the same line. Set REVENUEDOT_PORT to change the host port. The line for every SDK.

What you run

One image, one database, one config file

The server

A TypeScript (Hono) API that answers every endpoint the RevenueDot and RevenueCat SDKs call, the REST API and store notifications.

The dashboard

Customers, catalog, apps, API keys, webhooks with a delivery log, and setup health, served by the same image.

Postgres

Every purchase, customer and receipt, in tables you can query with SQL. Migrations run on start.

Cloud or your own server

Cloud runs it for you, the same code runs on your server

RevenueDot Cloud and a self-hosted server share the code, API and schema, so a project moves either way with an export and import.

RevenueDot CloudYour own server
LicenseNot needed: RevenueDot runs itAGPL-3.0 for the open-source server; enterprise features need an Enterprise license
Who runs itRevenueDotYou: server, Postgres, backups, upgrades
Data locationThe US, on Cloudflare's networkAny cloud and region you choose
ExtrasPoint-in-time recovery, edge caching, monitoring, supportEverything in the open-source server
Enterprise featuresOrganizations, custom roles and SSO with Pro; SCIM and compliance exports with EnterpriseOrganizations, custom roles, SSO, SCIM and compliance exports with an Enterprise license
Project settings, Export and move, in RevenueDot: Export project (every table as JSON Lines plus a manifest, optionally with secrets encrypted with a passphrase) and Move this project to RevenueDot Cloud or another RevenueDot server with an import token.
Captured from the real RevenueDot dashboard with example data.

Export and move: read the guide →

Before production

A short checklist

01

Serve it over HTTPS

Put the server behind a load balancer or reverse proxy with TLS. The SDKs and the stores need an HTTPS URL.

02

Use managed Postgres with backups

Point DATABASE_URL at a managed Postgres 16 with point-in-time recovery, and keep a strong password.

03

Connect the stores

Add your App Store In-App Purchase key and Google Play service account, then set the notification URLs the dashboard shows.

04

Watch setup health

The dashboard shows when each app last received a store notification and flags missing keys before purchases fail.

Self-host runs as one Docker image next to your Postgres, and upgrades apply database migrations on start. Source on GitHub.

FAQ

Self-hosting questions

Can I self-host RevenueCat?

No. RevenueCat itself is closed source and runs only in RevenueCat's cloud. The open-source option that works with the RevenueCat SDK is RevenueDot. RevenueDot Cloud runs it for you and is free until your apps make $10,000 a month. Its server is open source under AGPL-3.0, so you can also run it with Docker and Postgres.

What do I need to self-host RevenueDot?

A machine that runs Docker, plus Postgres 16, which docker compose starts for you. For production, use a managed Postgres with backups and put the server behind HTTPS.

Does self-hosted RevenueDot send data to RevenueDot?

No. The self-hosted server has no telemetry and never calls RevenueDot's servers. It talks only to Apple, Google, your webhook endpoints and any forwarding URL you set.

How do upgrades work?

Pull the new image and restart. Database migrations run automatically when the server starts, and there is one config file.

Where does my purchase data live?

RevenueDot Cloud runs on Cloudflare's network and stores your data in the US. Enterprise adds data location settings and a license to run RevenueDot in your own cloud. You can export everything a project owns at any time.

What license is RevenueDot under?

The server and dashboard are AGPL-3.0. The SDK forks, CLI, MCP server and agent skills are MIT. The ee/ folder (enterprise features such as organizations, custom roles, single sign-on, SCIM and compliance exports) is under the RevenueDot Enterprise License. On RevenueDot Cloud, Pro includes organizations, custom roles and single sign-on.

How is RevenueDot tested?

A real App Store sandbox purchase has run end to end on an iPhone, from Apple's purchase sheet to the webhook. The RevenueDot web, Flutter web and React Native web SDKs, installed from their registries, bought Test Store subscriptions against RevenueDot, and the unmodified RevenueCat iOS and Android SDKs pass a Test Store purchase on a simulator and an emulator. Webhooks are delivered live to 23 example backends. Moving from RevenueCat, you can run both side by side, because RevenueDot forwards every store notification to RevenueCat.

Get started

Moving from RevenueCat?

Start for free on RevenueDot Cloud and import your RevenueCat project with one command. There are no servers to run.

Already have an account? Sign in · Switching from RevenueCat? Change one line