Radon/SDKs/Auth
@radonsdk/auth50 providers

Authentication you actually own.

Email codes, magic links, passwords, and 50 OAuth providers — over any database, wired into your framework in a few lines. Stateless JWT sessions you verify in your own middleware, or DB-backed sessions you can revoke. No hosted service, no per-MAU pricing.

$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 },
  },
});
01what you get
01

Passwordless & password

Email one-time codes, magic links, and email + password with reset — secrets are hashed before they touch your database.

02

50 OAuth providers

GitHub to Shopify, all on one OAuth2/OIDC engine. Each provider is a one-liner; custom presets need no fork.

03

Passkeys, 2FA & phone OTP

WebAuthn passkeys, TOTP with recovery codes, and SMS OTP — the modern second factors, Pro-gated.

04

Bring your own database

Seven adapters — Postgres, MySQL, SQLite, MongoDB, Supabase, Firebase — plus a clean adapter contract for anything else.

05

Ten framework integrations

Next.js, Express, Fastify, Hono free; Koa, NestJS, SvelteKit, Nuxt, Remix, Astro on Pro. One handler, mounted your way.

06

Orgs, API keys & GDPR

Teams with roles, hashed API keys, impersonation, and one-call data export/delete — the surface real apps need.

02providers

1 free, 49 on Pro — same call for every one.

1 freeproduction-grade, no license
GoogleGoogle
49 Proone key unlocks all
GitHubGitHubGitLabGitLabBitbucketBitbucketDiscordDiscordFacebookFacebookTwitterTwitterLinkedInLinkedInSlackSlackSpotifySpotifyTwitchTwitchRedditRedditTikTokTikTokSnapchatSnapchatDropboxDropboxBoxBoxZoomZoomNotionNotionFigmaFigmaSalesforceSalesforceHubSpotHubSpotPayPalPayPalAmazonAmazonYahooYahooEpic GamesEpic GamesBattle.netBattle.netRobloxRobloxPatreonPatreonStravaStravaFitbitFitbitCoinbaseCoinbaseLINELINEWeChatWeChatKakaoKakaoNaverNaverVKVKInstagramInstagramPinterestPinterestDribbbleDribbbleBehanceBehanceZohoZohoDigitalOceanDigitalOceanMicrosoftMicrosoftAzure ADAzure ADAppleAppleWordPressWordPressOktaOktaAuth0Auth0ShopifyShopifySteamSteam
03the API

A small, typed surface.

  • new Radon(config)

    Construct with an adapter, a session secret, and the providers you use.

  • auth.magicLink.sendLink({ email }): Promise<{ url; expiresAt }>

    Send a signed magic link; verify() on the callback returns the user.

  • auth.emailCode.verify({ email, code }): Promise<{ user; created }>

    Verify a one-time code and resolve (or create) the user.

  • auth.oauth("github").getAuthUrl(): { url; state }PRO

    Start any of the 50 OAuth flows on the shared engine.

  • auth.createSessionToken(userId): { token; expiresAt }

    Mint a stateless HS256 session you verify anywhere with verifyToken().

  • auth.getSessionUser(token): Promise<RadonUser>

    Resolve the current user from a session token.

04Mount on Next.js
auth-example.ts
import { radonNextHandler } from "@radonsdk/auth/integrations/next";
import { auth } from "@/lib/auth";

// app/api/auth/[...radon]/route.ts
export const POST = radonNextHandler(auth);
export const GET = radonNextHandler(auth);

Pro verifies once, and fails closed

Configure any Pro provider and you must call await auth.init() — it verifies your license key once per process and throws if it can't. Free-tier auth (codes, links, password, Google) needs no init() at all.