Self-host

Run your own purchase backend in three commands

One Docker image serves the RevenueCat-compatible API and the dashboard, next to your own Postgres. Free forever under AGPL-3.0, with no limits and no share of your revenue.

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 point your app's SDK at your server:

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

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 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.

Self-host or cloud

Same code, your choice of who runs it

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

Self-hostRevenueDot Cloud
PriceFree, AGPL-3.0Free up to $10K monthly tracked revenue; paid plans coming
Who runs itYou: server, Postgres, backups, upgradesRevenueDot
Data locationAny cloud and region you chooseCloudflare's network; EU and US regions with Enterprise
ExtrasEverything in the open-source serverFailover, point-in-time recovery, edge caching, monitoring, support
Enterprise featuresSSO, audit logs and high availability with an Enterprise licenseWith Enterprise

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?

RevenueCat itself is closed source and runs only in RevenueCat's cloud. RevenueDot is a self-hostable server that works with the RevenueCat SDK, so self-hosting means running RevenueDot with Docker and Postgres on your own servers, in the region you choose.

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?

When you self-host, every purchase, customer and receipt lives in your own Postgres database, in the cloud and region you choose, and nothing is sent to RevenueDot. In RevenueDot Cloud it runs on Cloudflare's network; EU and US data regions are part of Enterprise.

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 SSO and audit logs) is under the RevenueDot Enterprise License.

How is RevenueDot tested?

Every endpoint is checked against real RevenueCat responses, the unmodified RevenueCat iOS SDK runs a full purchase against it on the iPhone simulator, and webhooks are delivered live to 17 example backends. For a switch with no risk, run RevenueDot side by side with RevenueCat: it forwards every store notification to RevenueCat, so you can compare both before you cut over.

Get started

Moving from RevenueCat?

Self-host RevenueDot, import your project with one command, and run both side by side until the numbers match.