otplib
Version:
TypeScript-first library for TOTP and HOTP with multi-runtime and plugin support
108 lines (79 loc) • 3.11 kB
Markdown
TypeScript-first library for HOTP and TOTP / Authenticator with multi-runtime (Node, Bun, Deno, Browser) support via plugins.
A web based demo is available at [https://otplib.yeojz.dev](https://otplib.yeojz.dev).
- **Zero Configuration** - Works out of the box with sensible defaults
- **RFC Compliant** - RFC 6238 (TOTP) and RFC 4226 (HOTP)
- **TypeScript-First** - Full type definitions
- **Google Authenticator Compatible** - Full otpauth:// URI support
- **Plugin Interface** - Flexible plugin system for customising your cryptographic and base32 requirements (if you want to deviate from the defaults)
- **Cross-platform** - Tested against Node.js, Bun, Deno, and browsers
## Breaking Changes (v13)
> [!IMPORTANT]
> v13 is a complete rewrite with breaking changes:
>
> - **New**
> - **Security-audited plugins** — Default crypto uses `@noble/hashes` and `@scure/base`, both independently audited
> - **Cross-platform defaults** — Works out-of-the-box in Node.js, Bun, Deno, and browsers
> - **Full type safety** — Comprehensive TypeScript types with strict mode from the ground up
> - **Async-first API** — All operations are async by default; sync variants available for compatible plugins
> - **Removed**
> - **Separate authenticator package** — TOTP now covers all authenticator functionality
> - **Outdated plugins** — Legacy crypto adapters removed in favor of modern, audited alternatives
>
> See [Migration Guide](https://otplib.yeojz.dev/guide/v12-adapter) for details.
```bash
npm install otplib
pnpm add otplib
yarn add otplib
```
```bash
bun add otplib
deno install npm:otplib
```
```typescript
import { generateSecret, generate, verify, generateURI } from "otplib";
// Generate a secret
const secret = generateSecret();
// Generate a TOTP token
const token = await generate({ secret });
// Verify a token
const isValid = await verify({ secret, token });
// Generate QR code URI for authenticator apps
const uri = generateURI({
issuer: "MyService",
label: "user@example.com",
secret,
});
```
```typescript
import { OTP } from "otplib";
// Create OTP instance (defaults to TOTP)
const otp = new OTP();
// Generate a secret
const secret = otp.generateSecret();
// Generate a TOTP token
const token = await otp.generate({ secret });
// Verify a token
const isValid = await otp.verify({ secret, token });
// Generate QR code URI for authenticator apps
const uri = otp.generateURI({
issuer: "MyService",
label: "user@example.com",
secret,
});
```
Refer to the [Getting Started Guide](https://otplib.yeojz.dev/guide/getting-started), or check out the other sections in the guide:
- [Advanced Usage](https://otplib.yeojz.dev/guide/advanced-usage)
- [Runtime Compatibility](https://otplib.yeojz.dev/guide/runtime-compatibility)
- [Security Considerations](https://otplib.yeojz.dev/guide/security)
- [API Reference](https://otplib.yeojz.dev/api/)
[](./LICENSE) © 2026 Gerald Yeo