Every product ends up gluing together five separate vendor SDKs for auth, payments, storage, email, and AI — each with its own auth scheme, quirks, and webhook shape. Switching providers later (Stripe to Paystack, S3 to R2) usually means a rewrite, not a config change. Most existing solutions solve this by becoming a hosted service with per-user pricing and full data lock-in.
Built Radon as five SDKs sharing one interface shape: auth, payments, storage, email, and AI, each normalizing 10-50+ providers behind a single typed call (auth(), charge(), upload(), send(), chat()). Provider-specific quirks are absorbed inside each adapter and never leak into calling code. Everything runs against the developer's own infrastructure and provider keys — no hosted service, no stored secrets, no per-MAU pricing. Escape hatches (native()/rawClient()) cover the 20% of cases the unified API doesn't.
One typed interface per domain (auth, payments, storage, email, AI) across 10-50 providers each
Provider swap by config change, never a code rewrite
Self-hosted — no account, no hosted service, runs against your own DB and provider keys
Escape hatches to the native provider client for edge cases
Zero required runtime dependencies, ESM + CJS, strict TypeScript
Single lifetime license unlocks Pro across the entire suite