Skip to main content
The central idea behind Buckspay signers: the payment flow never changes. Whether the user authenticates with a browser wallet, a device passkey, a social login, or a mobile secure enclave, every signer factory returns a BuckspaySigner value that drops into the same createBuckspayClient call and the same prepare -> sign -> send pipeline.

How it works

A signer factory is a function that returns a BuckspaySigner object. The object implements two methods the engine calls internally:
  • getPublicKey() - resolves the Stellar account address backing this signer.
  • signAuthEntry(payload) - signs a Soroban authorization entry for the current payment.
The engine calls these during sign() (the second phase of prepare -> sign -> send). All user interaction - wallet pop-ups, WebAuthn prompts, OAuth redirects, OTP verification - happens inside this one call. The rest of the pipeline is silent. Some signers also expose an optional authenticate?() step for social and email flows, which runs the identity-resolution phase before the payment itself.

Choosing a signer

Wallets Kit

Browser injected wallets - Freighter, xBull, LOBSTR.

Passkey

WebAuthn / secp256r1 on a smart contract account.

Social login

Google, Apple, Discord via web3auth - secrets stay server-side.

Email OTP

One-time code over email - no wallet, no seed phrase.

Native passkey

iOS/Android secure enclave via @buckspay/react-native.

Prepare -> Sign -> Send

The shared flow every signer feeds into.