Sign in with JustAuth.
Store nothing.
JustAuth is the identity provider for your app. Users sign in with a passkey or an email link, approve your app once, and you get back a verified profile. No passwords, no user table, no redirect_uri_mismatch.
Standard OAuth 2.0 with PKCE. Works with any OAuth client library, in any language.
// One link. No passwords, no user table.
<a href={`https://justauth.org/oauth/authorize
?response_type=code
&client_id=${CLIENT_ID}
&redirect_uri=https://acme.app/callback
&scope=profile email
&state=${state}`}>
Sign in with JustAuth
</a>Sign in to Acme
Welcome back.
↑ live preview, click through
- Your app
- Sign in with JustAuth: passkeys or email links
- Approve once
- Back in your app with a verified user
Building it yourself
Twelve chores. Zero features. One month gone.
This is what “just add a login page” actually means. JustAuth does all of it, so your app never stores a credential.
Doing it yourself
≈ 1 month, then forever- 01Design a users table and migrations~2 hrs
- 02Hash and salt passwords (and pick the right algorithm)~1 hr
- 03Build sign-up, sign-in and forgot-password screens~1 day
- 04Send verification and reset emails that don't land in spam~4 hrs
- 05Add passkeys: WebAuthn ceremonies, attestation, fallbacks~2 days
- 06Rate-limit sign-in and lock out brute-force attempts~3 hrs
- 07Issue, store and expire sessions safely~4 hrs
- 08Keep a separate auth config for dev, preview and production~1 hr
- 09Write the callback handler: state, PKCE, token exchange~2 hrs
- 10Debug redirect_uri_mismatch on every preview deploy¯\_(ツ)_/¯
- 11Answer “I didn't get the email” support ticketsforever
- 12Hope nobody ever dumps your password tableforever
With JustAuth
3 steps- 1
Create an appIn the dashboard or with one API call. Add http://localhost:* and your domains.
- 2
/oauth/authorizeLink your “Sign in with JustAuth” button here.
- 3
/oauth/userinfoExchange the code, read the user. Done.
“That’s it. That’s the whole list.”
- passwords in your database
- 0
- passwords in your database
- OAuth endpoints to learn
- 3
- OAuth endpoints to learn
- consent per app, per user
- 1
- consent per app, per user
- redirect URI patterns per app
- 20
- redirect URI patterns per app
Plain OAuth 2.0
No SDK required.
JustAuth speaks standard OAuth 2.0, so it works with the client library you already use, or a link and two fetch calls.
- Authorization code flow with PKCE
- client_secret_post or HTTP Basic at the token endpoint
- userinfo with sub, name, email and picture
- llms.txt so your coding agent can wire it up
<a href="https://justauth.org/oauth/authorize?response_type=code&client_id=ja_...&redirect_uri=https://myapp.com/callback&scope=profile%20email&state=RANDOM">
Sign in with JustAuth
</a>
<!-- JustAuth sends the user back to:
https://myapp.com/callback?code=...&state=RANDOM -->Why it’s different
Auth you don’t have to run.
Everything that usually turns “add a login page” into a project, handled by JustAuth.
Your own identity provider
Add a “Sign in with JustAuth” button. Users sign in on JustAuth and approve your app on JustAuth’s consent screen. You never handle a password.
Standard OAuth 2.0
Authorization code flow with PKCE, a token endpoint and userinfo. Works with any OAuth 2.0 client library, or a few lines of fetch.
Every preview URL just works
Redirect URIs take wildcards: http://localhost:* for any port, https://*.preview.myapp.com for every preview deploy. No more redirect_uri_mismatch.
Consent once, remembered
Users approve each app one time for the scopes it asks for: openid, profile, email. After that, signing in is a redirect and back.
Apps as code
Create apps, edit redirect URIs and rotate secrets with the Management API and a personal API key. From CI, a script, or your coding agent.
Nothing stored in plain text
Client secrets, authorization codes, access tokens and API keys are stored hashed. Rotating a secret revokes the app’s tokens immediately.
Pricing
Four plans. Every price on this page.
Every plan gets every feature. You pay for monthly active users and nothing else. During early access, every plan is free.
Free
Side projects and prototypes.
$0/month
- 1,000 monthly active users
- No overage charges, ever
- Community support
At 10k users: over the limit
Start freeIndie
Best for 10kOne product with real users.
$9/month
- 10,000 monthly active users
- $1 per extra 1,000 users
- Email support, 2 business days
At 10k users: $9/mo
Start on IndiePro
Growing products.
$29/month
- 50,000 monthly active users
- $0.50 per extra 1,000 users
- Email support, 1 business day
At 10k users: $29/mo
Start on ProScale
High-traffic apps.
$99/month
- 250,000 monthly active users
- $0.30 per extra 1,000 users
- Priority support, same business day
At 10k users: $99/mo
Start on Scale10,000 monthly active users → Indie, $9/mo
Every plan includes
- Sign in with JustAuth for your users
- Unlimited apps with wildcard redirect URIs
- OAuth 2.0 authorization code flow with PKCE
- Management API and personal API keys
- Dashboard of everyone who signed in
- What counts as a monthly active user?
- Anyone who signs in to one of your apps in a calendar month, counted once however many times they sign in or how many of your apps they use.
- What happens past my limit?
- Paid plans bill extra users in blocks of 1,000 at the price on the card. Free never charges: sign-ins keep working and we email you to upgrade.
- Anything else on the bill?
- No. No per-seat fees, no per-app fees, no setup fees, no sales call.
FAQ
Fair questions.
Anything else? The docs cover every endpoint, parameter and error.
Is JustAuth a wrapper around someone else’s login?+
No. JustAuth is the identity provider. Your app talks only to JustAuth, your users approve your app on JustAuth’s consent screen, and you get back a stable JustAuth user ID (sub).
Do I need an SDK?+
No. JustAuth speaks standard OAuth 2.0, so any OAuth client library works, or plain fetch: one redirect, one token request, one userinfo request. The docs have copy-paste examples.
What do my users see?+
A “Sign in with JustAuth” button in your app, then JustAuth’s sign-in and a consent screen with your app’s name and the data it asks for. They approve once; later sign-ins skip the screen.
Does it work with preview deployments?+
Yes. Register http://localhost:* and https://*.preview.myapp.com once and every port and preview URL is accepted. Plain http is allowed only on localhost.
Can my coding agent set this up?+
Yes. Point it at justauth.org/llms.txt. With an API key it can create the app and wire up the OAuth flow without opening a browser.
Stop building login.
Ship your app.
Your “Sign in with JustAuth” button is one app registration away.