The backend, provider-agnostic

Stop gluing
vendor SDKs
together.

Radon is one unified API across auth, payments, storage, email, and AI — 126+ providers, swappable by config, self-hosted, no lock-in.

$npm i @radonsdk/auth
// one API, five SDKsswap ↺ by config
import { RadonAI } from "@radonsdk/ai";

const ai = new RadonAI({
  providers: { openai: {} },
  defaultProvider: "openai",
});

const res = await ai.chat({
  messages: [{ role: "user", content: "Say hello in one word." }],
});

console.log(res.content); // "Hello"
import { Radon } from "@radonsdk/auth";
import { postgresAdapter } from "@radonsdk/auth/adapters/postgres";

const auth = new Radon({
  adapter: postgresAdapter(pool),
  session: { secret: process.env.RADON_SECRET! },
  providers: {
    magicLink: { sender, baseUrl: "https://app.com/verify" },
    google: { clientId, clientSecret },
  },
});
import { RadonPayments, money } from "@radonsdk/payments";

const payments = new RadonPayments({
  providers: { stripe: {} },
  defaultProvider: "stripe",
});

const charge = await payments.charge({
  amount: money(1999, "USD"),
  customer: { email: "ada@example.com" },
});
import { RadonStorage } from "@radonsdk/storage";

const storage = new RadonStorage({
  providers: { s3: { bucket: "uploads", region: "us-east-1" } },
  defaultProvider: "s3",
});

const { url } = await storage.upload({
  key: "avatars/ada.png",
  path: "./ada.png",
});
import { RadonEmail } from "@radonsdk/email";

const email = new RadonEmail({
  providers: { resend: {} },
  defaultFrom: "Acme <hello@acme.com>",
});

await email.send({
  to: "ada@example.com",
  subject: "Welcome, {{name}}!",
  html: "<p>Hi {{name}}, thanks for joining.</p>",
  variables: { name: "Ada" },
});
import { RadonAI } from "@radonsdk/ai";

const ai = new RadonAI({
  providers: { openai: {} },
  defaultProvider: "openai",
});

const res = await ai.chat({
  messages: [{ role: "user", content: "Say hello in one word." }],
});

console.log(res.content); // "Hello"
import { Radon } from "@radonsdk/auth";
import { postgresAdapter } from "@radonsdk/auth/adapters/postgres";

const auth = new Radon({
  adapter: postgresAdapter(pool),
  session: { secret: process.env.RADON_SECRET! },
  providers: {
    magicLink: { sender, baseUrl: "https://app.com/verify" },
    google: { clientId, clientSecret },
  },
});

Every product ends up wiring five vendor SDKs — each with its own auth scheme, its own quirks, its own webhook shape.

Radon collapses them into one typed interface. Provider differences are absorbed inside each adapter and never leak into your code — so switching Stripe for Paystack, or S3 for R2, is a config change, not a rewrite.

01the suite

Five SDKs. One API. One license.

Each pillar ships today — provider-agnostic and production-complete. They share one interface shape and one lifetime license, and the suite keeps growing.

01

Radon Auth

new Radon()

Authentication you actually own. Email codes, magic links, passwords, and 50 OAuth providers — over any database, wired into your framework in a few lines.

4free50Pro50 providers
GoogleGitHubGitLabBitbucketDiscordFacebookTwitterLinkedInSlack+41 more
$npm i @radonsdk/auth
auth.ts
import { Radon } from "@radonsdk/auth";
import { postgresAdapter } from "@radonsdk/auth/adapters/postgres";

const auth = new Radon({
  adapter: postgresAdapter(pool),
  session: { secret: process.env.RADON_SECRET! },
  providers: {
    magicLink: { sender, baseUrl: "https://app.com/verify" },
    google: { clientId, clientSecret },
  },
});
02

Radon Payments

payments.charge()

One typed charge() across 24 payment providers — global, African, and crypto. Normalized webhooks, a coupon engine, and bring-your-own-provider.

5free19Pro24 providers
StripePaystackPayPalOPayBachsBraintreeAdyenCheckout.comSquare+15 more
$npm i @radonsdk/payments
payments.ts
import { RadonPayments, money } from "@radonsdk/payments";

const payments = new RadonPayments({
  providers: { stripe: {} },
  defaultProvider: "stripe",
});

const charge = await payments.charge({
  amount: money(1999, "USD"),
  customer: { email: "ada@example.com" },
});
03

Radon Storage

storage.upload()

One upload() across 26 storage providers — object storage, CDN/media, self-hosted, and local. Signed URLs, resumable uploads, multi-provider failover.

3free23Pro26 providers
Amazon S3Cloudflare R2LocalSupabaseBackblaze B2DigitalOcean SpacesMinIOWasabiLinode+17 more
$npm i @radonsdk/storage
storage.ts
import { RadonStorage } from "@radonsdk/storage";

const storage = new RadonStorage({
  providers: { s3: { bucket: "uploads", region: "us-east-1" } },
  defaultProvider: "s3",
});

const { url } = await storage.upload({
  key: "avatars/ada.png",
  path: "./ada.png",
});
04

Radon Email

email.send()

One send() across 16 email providers — Western, African, and raw cloud. Batch sends, template interpolation, and normalized delivery webhooks.

3free13Pro16 providers
ResendSendGridSMTPPostmarkAmazon SESMailgunBrevoLoopsMailjet+7 more
$npm i @radonsdk/email
email.ts
import { RadonEmail } from "@radonsdk/email";

const email = new RadonEmail({
  providers: { resend: {} },
  defaultFrom: "Acme <hello@acme.com>",
});

await email.send({
  to: "ada@example.com",
  subject: "Welcome, {{name}}!",
  html: "<p>Hi {{name}}, thanks for joining.</p>",
  variables: { name: "Ada" },
});
05

Radon AI

ai.chat()

One chat() across 10 model providers. Normalized streaming, one tool schema that works everywhere, and a raw-client escape hatch.

3free7Pro10 providers
OpenAIAnthropicGroqGoogle GeminiMistralDeepSeekOpenRouterxAI (Grok)Together AI+1 more
$npm i @radonsdk/ai
ai.ts
import { RadonAI } from "@radonsdk/ai";

const ai = new RadonAI({
  providers: { openai: {} },
  defaultProvider: "openai",
});

const res = await ai.chat({
  messages: [{ role: "user", content: "Say hello in one word." }],
});

console.log(res.content); // "Hello"
//integrations

126+ providers. One API to reach them all.

Payment processors, object stores, email services, model providers, and 50 OAuth identities — each behind the same typed call. Add a provider, not an integration project.

  • Stripe
  • Paystack
  • PayPal
  • OPay
  • Bachs
  • Braintree
  • Adyen
  • Checkout.com
  • Square
  • Authorize.Net
  • Razorpay
  • Mollie
  • GoCardless
  • Klarna
  • Skrill
  • Flutterwave
  • Korapay
  • Fincra
  • Coinbase
  • NOWPayments
  • OpenNode
  • Afterpay
  • Mercado Pago
  • PayU
  • Amazon S3
  • Cloudflare R2
  • Local
  • Supabase
  • Backblaze B2
  • DigitalOcean Spaces
  • MinIO
  • Wasabi
  • Linode
  • Vultr
  • IBM COS
  • Oracle Cloud
  • Scaleway
  • Alibaba OSS
  • Ceph
  • Storj
  • Filebase
  • Tigris
  • SeaweedFS
  • Google Cloud Storage
  • Azure Blob
  • Vercel Blob
  • UploadThing
  • Bunny
  • ImageKit
  • Cloudinary
  • Resend
  • SendGrid
  • SMTP
  • Postmark
  • Amazon SES
  • Mailgun
  • Brevo
  • Loops
  • Mailjet
  • SparkPost
  • Elastic Email
  • MailerSend
  • SMTP2GO
  • Amazon Pinpoint
  • ZeptoMail
  • Termii
  • OpenAI
  • Anthropic
  • Groq
  • Google Gemini
  • Mistral
  • DeepSeek
  • OpenRouter
  • xAI (Grok)
  • Together AI
  • Ollama
  • GitHub
  • GitLab
  • Bitbucket
  • Discord
  • Facebook
  • Twitter
  • LinkedIn
  • Slack
  • Spotify
  • Twitch
  • Reddit
  • TikTok
  • Snapchat
  • Dropbox
  • Box
  • Zoom
  • Notion
  • Figma
  • Salesforce
  • HubSpot
  • Amazon
  • Yahoo
  • Epic Games
  • Battle.net
  • Roblox
  • Patreon
  • Strava
  • Fitbit
  • LINE
  • WeChat
  • Kakao
  • Naver
  • VK
  • Instagram
  • Pinterest
  • Dribbble
  • Behance
  • Zoho
  • Microsoft
  • Apple
  • WordPress
  • Okta
  • Auth0
  • Shopify
  • Steam
  • Google
  • PostgreSQL
  • MySQL
  • SQLite
  • MongoDB
  • Firebase
  • Next.js
  • Express
  • Fastify
  • Hono
  • Koa
  • NestJS
  • SvelteKit
  • Nuxt
  • Remix
  • Astro

137 unique marks · rendered monochrome · more added every release

//the radon way

Built on a few strong opinions.

The same principles run through every SDK. They're why swapping a provider is a config change, and why you never get boxed in.

Swap by config, never by code

One typed interface every provider implements. Provider quirks — auth schemes, minor vs major units, webhook shapes — are absorbed inside each adapter and never leak into your code.

Own your data. No lock-in.

No hosted service, no per-MAU pricing. Everything runs in your infrastructure, against your database and your provider keys. Radon never stores your secrets.

Escape hatches, first-class

The unified API handles the 80% case. For the other 20%, drop to the provider's own client with native() or rawClient() — without leaving your Radon config.

Free is complete, not crippled

Free tiers are production-grade, not trials. Pro adapters are built to the exact same completeness bar — gating is a licensing concern, never a quality one.

Zero deps, lazy-loaded

Strict TypeScript, ESM + CJS, Node ≥ 18, zero required dependencies. Adapters load on demand — an OpenAI + Anthropic app never bundles the other eight.

One key, every project, forever

A single lifetime license unlocks Pro across every SDK in the suite. Not a subscription, not tied to a domain — use the same key across all your apps.

5
SDKs, one API
126+
provider integrations
0
runtime dependencies
$7.99
once · unlocks every SDK
//pricing

One payment. Every SDK. For life.

Free is a complete, production-grade backend — not a trial. Pro unlocks every provider across all five SDKs: one payment, unlimited projects, no renewal.

Free

$0/ forever

Open source, MIT. A genuinely complete backend stack — not a trial.

  • All 5 SDKs — MIT-licensed, zero-dependency core
  • Payments: Stripe, Paystack, PayPal, OPay, Bachs
  • Storage: Amazon S3, Cloudflare R2, local
  • Email: Resend, SendGrid, SMTP
  • AI: OpenAI, Anthropic, Groq
  • Auth: email codes, magic links, passwords, Google + 7 DB adapters
  • Normalized webhooks, escape hatches, framework integrations
Read the docs

Pro

one-time · lifetime
$7.99once · for life

One payment unlocks Pro across all five SDKs. No subscription, no per-MAU pricing, no renewal — unlimited projects, forever.

  • Everything in Free — across every SDK
  • Auth: 50 OAuth providers, passkeys, 2FA/TOTP, phone OTP, orgs
  • Payments: +19 providers — Adyen, Razorpay, Flutterwave, crypto
  • Storage: +23 providers, resumable uploads, multi-provider failover
  • Email: +13 providers, batch sends, templates, delivery webhooks
  • AI: +7 providers, embeddings, vision, structured output, fallback
  • One key, unlimited projects, forever
Get Pro — $7.99

Built by

Nexia

An independent studio building the tools we wished existed in the open. Radon is made by developers who got tired of re-integrating the same logic on every project.

One API. Every provider. Yours to run.

Install a package, write one call, ship. No account to create, no service to depend on — it's just code you run.

$npm i @radonsdk/auth
Read the docs