Open Source · Self-Hosted · OIDC / OAuth 2.0

Auth infrastructure
you actually own

A complete authentication platform for your web and mobile apps. Replace Auth0 or Clerk with a self-hosted solution that gives you full data ownership and no per-user fees — ever.

OIDC
Standards-based
Applications
0
Per-user fees
100%
Data ownership

Everything you need

Production-ready features included out of the box — no paid tiers.

Authentication Methods

  • Email + PasswordArgon2id hashed, strength-enforced
  • Magic Link (passwordless)One-click sign-in via email
  • TOTP 2FAGoogle Authenticator / Authy compatible, with backup codes
  • Social LoginGoogle, GitHub, Microsoft via OAuth2
  • Enterprise SSOOIDC federation with Azure Entra ID (JIT provisioning, group→role mapping)
  • API Keys (M2M)Machine-to-machine authentication with scoped keys

Security

  • Rate limitingSliding-window per email+IP, backed by Redis
  • Login lockoutConfigurable per-app max attempts and lockout duration
  • IP allowlist / denylistCIDR-based access control per application
  • New device alertsEmail notification on first login from unknown device/IP
  • Inactivity lockAuto-deactivate users inactive for configurable days
  • Global & per-app lockAdmin can lock any account instantly

Standards & Protocols

  • OIDC / OAuth 2.0Authorization Code Flow, PKCE enforcement for public clients
  • Token introspectionRFC 7662 — resource servers validate tokens without the signing secret
  • Signed logoutOIDC end_session_endpoint (id_token_hint, post_logout_redirect_uri)
  • Refresh tokensLong-lived sessions with configurable expiry
  • WebhooksSigned POST on user.login, user.register, user.login_failed, and more

Admin & Multi-Tenancy

  • Multi-applicationUnlimited applications with isolated configs, themes, and users
  • Per-app brandingCustom logo, colors, and button style per login page
  • Role-based accessDefine per-app roles; assign via admin or group mapping
  • Approval workflowsRequire admin approval before new users can sign in
  • Audit logEvery auth event logged with IP, user agent, and timestamp. CSV export.
  • ImpersonationAdmin can act as any user for support purposes (logged)

Self-Service

  • Profile managementName and email change with verification flow
  • Password managementForgot password, reset, and change flows
  • Session managementView and revoke active sessions
  • 2FA self-serviceEnroll, disable, and regenerate backup codes
  • Invite-only registrationUsers invite others with one-time tokens

vs Auth0 & Clerk

Enterprise-grade features without the enterprise pricing.

FeatureIdentity ServiceAuth0Clerk
Open source & self-hosted
No per-MAU pricing
Unlimited applications2 (free)1 (free)
Email + Password
Magic Link
TOTP 2FA + backup codespaid
Enterprise SSO (Azure Entra)paidpaid
PKCE for public clientspartial
Token introspection (RFC 7662)
IP allowlist / denylistpaid
New device email alerts
Per-app brandingpaid
Webhookspaid
Audit log + CSV exportpaidpaid
Custom fields
Full data ownership

Comparison based on publicly available pricing pages as of 2026. "paid" = feature requires a paid plan.

Security posture

Built for security from day one — not bolted on afterwards.

No secrets at rest

Passwords are hashed with Argon2id. Backup codes are SHA-256 hashed. No plaintext credentials stored anywhere.

Short-lived tokens

Authorization codes expire in 5 minutes. Access tokens are signed JWTs. Refresh tokens are stored as opaque hashes.

Brute-force protection

Redis-backed sliding-window rate limiter + per-app configurable lockout after N failed attempts.

Network access control

CIDR-based IP allowlist and denylist enforced at login — before credentials are even checked.

PKCE for SPAs

Public clients can require PKCE (RFC 7636), preventing auth code interception attacks without client secrets.

Full audit trail

Every authentication event is logged with event type, IP address, user agent, and timestamp. Exportable to CSV.

New device alerts

Users receive an immediate email when a login occurs from a previously unseen device or IP address.

Account controls

Admins can lock any user globally, per-app, or for inactivity. Impersonation is logged. Approval workflows available.

Self-hosted = you control TLS

Your infrastructure. Your TLS certificates. No third-party intermediary touches your users' credentials.

Pricing

Simple and transparent. No per-seat or per-MAU surprises.

Self-hosted (Open Source)
Free

Run on your own infrastructure. Full source access. All features included.

  • Unlimited apps
  • Unlimited users
  • All features
  • Community support
  • You run the infra
Get started
Managed Hosting
Contact us

We run it for you on dedicated infrastructure. SLA, backups, and updates included.

  • Unlimited apps
  • Unlimited users
  • All features
  • Dedicated instance
  • SLA + backups
  • Priority support
Talk to us
Enterprise
Custom

Custom deployment, white-label, SAML 2.0, SCIM provisioning, and professional services.

  • Everything in Managed
  • SAML 2.0 (roadmap)
  • SCIM provisioning (roadmap)
  • White-label
  • Custom SLA
  • Professional services
Contact sales

Integrate in minutes

Standard OIDC Authorization Code Flow — works with any framework.

1. Redirect to login

const loginUrl = new URL(
  'https://auth.svc.jxs.se/login/your-app'
)
loginUrl.searchParams.set('redirect_uri', CALLBACK_URL)
loginUrl.searchParams.set('state', csrfToken)
// Optional: add code_challenge for PKCE

redirect(loginUrl.toString())

2. Exchange code for tokens

const res = await fetch(
  'https://auth.svc.jxs.se/api/auth/token',
  {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      code,
      client_id: CLIENT_ID,
      client_secret: CLIENT_SECRET,
    }),
  }
)
const { access_token, id_token } = await res.json()

3. Fetch user profile

const profile = await fetch(
  'https://auth.svc.jxs.se/api/auth/userinfo',
  { headers: { Authorization: `Bearer ${access_token}` } }
).then(r => r.json())
// { sub, email, name, ... }

Full Next.js example

A complete Next.js integration with session handling, protected routes, and logout is live at testapp.app.jxs.se. Source: see the test-app repository.

Ready to own your auth?

Start with the open-source self-hosted version for free. Upgrade to managed hosting when you want us to run it for you.