Passwordless auth that
never leaves the device

No passwords. No passkeys. No phishing.
Ship device-bound authentication in under 5 minutes.

npm install @hawcx/react

Integrate in minutes

A state machine drives the UI. You render steps, Hawcx handles the crypto.

Frontend — React
import { HawcxProvider, useAuthState, useAuthActions } from '@hawcx/react';

function LoginFlow() {
  const state = useAuthState();
  const { start, submitCode } = useAuthActions();

  if (state.status === 'idle')
    return <button onClick={() => start(email)}>Continue</button>;

  if (state.status === 'step' && state.step.type === 'enter_code')
    return <button onClick={() => submitCode(code)}>Verify</button>;

  if (state.status === 'completed')
    // Send authCode + codeVerifier to your backend
    return <p>Authenticated!</p>;
}
Backend — Node.js
import { HawcxOAuth } from '@hawcx/oauth-client';

const oauth = new HawcxOAuth({
  configId: process.env.HAWCX_CONFIG_ID
});

app.post('/exchange', async (req, res) => {
  const { authCode, codeVerifier } = req.body;
  const { claims } = await oauth.exchangeCode(
    authCode, codeVerifier
  );
  // claims.sub = user ID
  // claims.email = verified email
  // Create your own session here
  res.json({ userId: claims.sub });
});

Why Hawcx

Device-Bound

Credentials never leave the device. No cloud sync, no transfer, no phishing surface.

Zero-Knowledge

The server receives only a proof — never the secret. Nothing to steal, nothing to leak.

Quantum-Resilient

Ephemeral per-session keys. No long-lived public keys for harvest-now-decrypt-later attacks.