New
React and Vue integrationsThe widget now ships with first-party wrappers for React, Next.js, and Vue. Drop the component into a form, pass a callback, and receive a solved token — no manual DOM wiring required.Themeable widgetStyle the widget with CSS custom properties to match your design system without reaching into shadow DOM internals. See Theming for the full list of variables.Improvements
Configurable difficulty per endpointTunedifficulty, amount, and ttlSeconds when creating a challenge to balance security and user friction on a route-by-route basis. See createChallenge.Pluggable replay protectionLocal in-process replay protection is on by default. For serverless or multi-instance deployments, plug in a Redis or Valkey store. See Replay protection.Widget eventsThe widget now emits solved, error, and expired events so you can drive UI state directly from the challenge lifecycle. See Widget events.Fixes
- Improved error messages when
RIBAUNT_SECRETis missing or malformed. - Type declarations are bundled in the package — no separate
@typesinstall needed.