NewApple secrets now rotate themselves

Sign in with anything.
Set up nothing.

Google, GitHub, Apple, passkeys and 20+ more providers in one install. No OAuth consoles, no redirect_uri_mismatch, no client secret that quietly expires on a Tuesday.

Start free

Free for 10,000 users. No credit card. Works with Next.js, React, Svelte, Vue, Node, iOS and Android.

Providers
app/login/page.tsx
import { SignIn } from "@justauth/next";

export default function Page() {
  return (
    <SignIn
      providers={[
        "google",
        "github",
        "apple",
      ]}
    />
  );
}
.env  JUSTAUTH_KEY=ja_live_••••••// That's the only secret. Ever.

Sign in to Acme

Welcome back. Pick a way in.

Secured by JustAuth

↑ live preview — click a button

GoogleGitHubAppleMicrosoftDiscordGitLabSlackXLinkedInTwitchSpotifyNotionFigmaLinearBitbucketFacebookDropboxZoomAtlassianRedditPasskeysMagic links

The setup ritual

Twelve chores. Three consoles. One weekend gone.

This is what “just add Google, GitHub and Apple login” actually means today. We did all of it, once, so you never have to.

Doing it yourself

≈ 1 week, mostly waiting
  1. 01Create a Google Cloud project~10 min
  2. 02Configure the OAuth consent screen, scopes, logo, privacy URL~25 min
  3. 03Add authorized redirect URIs (exact match, per environment)~10 min
  4. 04Submit for brand verification and wait3–5 days
  5. 05Register a GitHub OAuth App ×3 — dev, preview, prod~15 min
  6. 06Join the Apple Developer Program, create a Services ID~40 min
  7. 07Generate a .p8 key and sign a JWT client secret~30 min
  8. 08Set a calendar reminder: that secret dies in 6 monthsforever
  9. 09Copy 9 secrets into 3 environments~15 min
  10. 10Write the callback handler: state, PKCE, token exchange~2 hrs
  11. 11Debug redirect_uri_mismatch at 1am¯\_(ツ)_/¯
  12. 12Figure out account linking when emails collide~1 day

With JustAuth

≈ 90 seconds
  1. 1
    npx justauth init

    Detects your framework, writes one env var.

  2. 2
    <SignIn />

    Drop it anywhere. Pick providers with a prop.

  3. 3
    git push

    Preview and production URLs work on the first deploy.

“That’s it. That’s the whole list.”

from npx to first sign-in
90s
from npx to first sign-in
secret in your .env
1
secret in your .env
session verification
<1ms
session verification
OAuth consoles opened
0
OAuth consoles opened

Fits your stack

Feels like it was already there.

Idiomatic SDKs for every framework you use: server components, hooks, middleware, or a single script tag. Fully typed, tree-shaken, under 6kb on the client.

  • Typed session and user objects
  • Middleware that protects routes in one line
  • Webhooks for sign-up, sign-in and link events
  • Prebuilt UI or headless hooks, your choice
app/layout.tsx
import { JustAuthProvider } from "@justauth/next";

export default function RootLayout({ children }) {
  return <JustAuthProvider>{children}</JustAuthProvider>;
}

// app/dashboard/page.tsx — server component, verified locally
import { getSession } from "@justauth/next";

export default async function Dashboard() {
  const { user } = await getSession({ required: true });
  return <h1>Hey {user.name}</h1>;
}

Why it’s different

We fixed the parts the docs skip.

Everything that usually turns a 20-minute task into a sprint, handled by default.

01

Works on localhost. Instantly.

Shared development credentials for every provider. Run init, open localhost:3000, sign in with Google. No console tab required.

02

Every preview URL just works

Vercel, Netlify, Cloudflare previews with random subdomains? Our callback relay handles them. No more adding redirect URIs one by one.

03

We do the paperwork

When you go to production we register the OAuth apps under your brand, file Google's verification and rotate Apple's six-month secret for you.

04

Sessions verify in under 1ms

Signed, short-lived JWTs checked locally against cached keys. Your API never makes a network hop to ask “is this user real?”

05

Account linking, solved

Same email from Google and GitHub? Linked safely on verified emails, with a clean merge hook when you want control.

06

Your users, your data

Export every user and identity as JSON or SQL whenever you like. Bring your own OAuth apps at any time. No lock-in.

Pricing

Free until you’re a big deal.

Simple per-user pricing. Every plan gets every provider. No “contact sales” for Apple login.

Hobby

For side projects and launches.

$0forever

  • 10,000 monthly active users
  • Every provider + passkeys
  • Shared dev credentials
  • Preview URL relay
Start building
Most popular

Pro

For products with real users.

$25/ month

  • 50,000 MAU, then $0.01 each
  • Your brand on every consent screen
  • Managed verification + secret rotation
  • Custom auth domain
  • Webhooks & audit log
Go Pro

Scale

For teams with compliance asks.

Custom

  • SAML & OIDC enterprise SSO
  • SOC 2 report & DPA
  • 99.99% uptime SLA
  • Dedicated region
  • Slack channel with engineers
Talk to us

FAQ

Fair questions.

Anything else? Ask us on GitHub. Real engineers answer.

Isn't this just another auth library?+

Libraries give you the code and leave you alone with the Google Cloud console. JustAuth handles the part libraries can't: registering, verifying and maintaining the OAuth apps themselves.

Whose name do users see on the Google consent screen?+

In development, “JustAuth Dev”. In production on Pro, yours: your app name, logo and domain. We file the verification on your behalf.

What if JustAuth goes down?+

Existing sessions keep working because verification happens locally in your app. Only new sign-ins depend on us, and those run multi-region.

Can I leave?+

Yes. Export users and linked identities anytime, plug in your own client IDs, and your sign-in buttons keep working while you migrate.

Do you support mobile?+

iOS, Android, React Native and Flutter SDKs use the same key, with native Sign in with Apple and Google one-tap.

Close the console tab.
Ship the login.

Your next sign-in button is one command away.

Read the docs