-beta.* suffix, for example, 3.2.0-beta.1. For more information on how to use the beta versions, refer to the README in the GitHub repository.This is a breaking change that drops support for Node 16 and Node 18.
:sparkles: New Features
PKCE Authentication for Public Clients
• API key is now optional - initialize with just clientId for public client apps
• New getAuthorizationUrlWithPKCE() method generates PKCE challenge internally
• authenticateWithCode() auto-detects client mode (public vs confidential)
• New createWorkOS() factory with compile-time type safety - TypeScript errors if you use server-only methods on public clients
• Use case: Build mobile apps, desktop apps, SPAs with secure WorkOS auth without exposing API keys
Universal Runtime Support
• SDK now works seamlessly across Node.js, Deno, Bun, and Cloudflare Workers
• Runtime-specific exports automatically detected via package.json conditions
• Dual build strategy: ESM unbundled (optimal tree-shaking), CJS inlines ESM-only deps
• No more lib/node_modules/ issues that broke Electron packaging
Better TypeScript Types
• SSO authorization options now use discriminated unions (must specify exactly one of: connection, organization, or provider)
• Public vs confidential client types enforced at compile time
• Improved type inference across the board
:fire: Most Exciting Changes
:warning: Breaking Changes
Minimum Node.js version: 20+ (Node 16 and 18 both have reached EOL)
Removed deprecated methods:
• Vault: createSecret() → use createObject()
• Vault: listSecrets() → use listObjects()
• Vault: readSecret() → use readObject()
• Vault: updateSecret() → use updateObject()
• Vault: deleteSecret() → use deleteObject()
• MFA: verifyFactor() → use verifyChallenge()
• User Management: sendMagicAuthCode() → use sendMagicCode()
API Changes:
• listOrganizationMemberships() now requires userId OR organizationId
• Directory Sync: user fields moved to customAttributes (e.g., user.customAttributes?.emails)
• SSO: stricter types - must specify one of connection, organization, or provider (not multiple)
• Organizations: removed allowProfilesOutsideOrganization and domains fields
• Events: dsync.deactivated → dsync.deleted
Package structure: • Now ESM-first with dual CJS/ESM exports • Removed internal HTTP/crypto provider classes (public API unchanged)
• Install: npm install @workos-inc/node@8
• Migration Guide: V8_MIGRATION_GUIDE.md
Questions? Hit me up!
Full Changelog: v7.82.0...v8.0.0
Full Changelog: v7.81.0...v7.82.0
Full Changelog: v7.79.2...v7.79.3
Full Changelog: v7.79.1...v7.79.2
Full Changelog: v7.79.0...v7.79.1
readObjectByName method for Vault API by @hexedpackets in #1424Full Changelog: v7.78.0...v7.79.0
Full Changelog: v7.76.0...v7.77.0
Full Changelog: v7.75.0...v7.75.1
Full Changelog: v7.74.0...v7.74.1
Full Changelog: v7.73.0...v7.74.0
Full Changelog: v7.72.2...v8.0.0-rc.3
Full Changelog: v7.72.0...v7.72.1
Full Changelog: v7.71.0...v7.72.0
Full Changelog: v7.71.0...v8.0.0-rc.1
Full Changelog: v7.69.2...v7.70.0
Full Changelog: v7.69.1...v7.69.2
provider_query_params to getAuthorizationUrl method by @jonatascastro12 in #1347Full Changelog: v7.69.0...v7.69.1
providerScopes and oauthTokens support to SSO API by @jonatascastro12 in #1345Full Changelog: v7.68.0...v7.69.0
widgets:sso:manage scope by @cmatheson in #1337Full Changelog: v7.66.1...v7.67.0
Full Changelog: v7.66.0...v7.66.1