Add passkey authentication to any Express app with a single line of code. No passwords. No OAuth. No database. Your users authenticate with their fingerprint or face — you ship faster.
npm install isitme
import express from "express";
import cookieParser from "cookie-parser";
import { isitme } from "isitme";
const app = express();
app.use(cookieParser());
app.use(isitme()); // That's it. Every route is now protected.
app.get("/", (req, res) => {
res.send("You are authenticated!");
});
app.listen(3000);
You want to protect a dashboard. Not set up an identity provider.
isitme is a complete auth layer with zero configuration. Here's what's built in.
Add app.use(isitme()) and every route is protected. No config files. No environment variables. No boilerplate.
WebAuthn uses your device's fingerprint sensor or face recognition. Nothing to leak, phish, or forget.
Credentials are stored in the isitme cloud by default. Only public keys. Safe even if fully compromised. Or bring your own storage.
A polished, responsive login UI ships with the package. Customize the colors or replace it entirely with your own.
JWT sessions in HTTP-only cookies. Automatic expiry. No session store to run. No tokens to manage client-side.
Full type definitions and autocomplete out of the box. Works great in plain JavaScript too.
Protect everything, protect some routes, or use conditional logic. isitme adapts to how you build.
app.use(isitme());
// Every route is now protected
app.use(isitme({ publicPaths: ["/", "/about"] }));
app.get("/", (req, res) => {
res.send("Public homepage");
});
app.get("/dashboard", (req, res) => {
res.send("Protected — passkey required");
});
app.use(isitme({ publicPaths: ["/"] }));
app.get("/", (req, res) => {
if (req.isAuthenticated) {
res.send("Welcome back! Here's your dashboard.");
} else {
res.send("Sign in to see your dashboard.");
}
});
What happens when someone visits your protected app for the first time.
Visits localhost:3000 for the first time
No credentials found. Showing registration page...
Taps fingerprint sensor
Credential stored. Session created.
Redirecting to your app...
Next time they visit, one fingerprint scan and they're in. No username. No password.
From zero to biometric-protected app.
One dependency. That's all you need.
Two lines: cookie parser and isitme. Every route is now protected.
First visitor registers a passkey. The site is locked to their biometrics. Done.
Add passkey auth in 60 seconds. No configuration required.