Vowena’s embed layer turns any plan ID into a production-ready subscribe button. The button fetches plan details from chain, handles wallet connection across every major Stellar wallet, shows the authorization prompt, and returns a signed subscription. You write three lines. Your customers subscribe in thirty seconds.Documentation Index
Fetch the complete documentation index at: https://vowena.xyz/docs/llms.txt
Use this file to discover all available pages before exploring further.
Quick start
- Vanilla JS
- React
- Next.js
mount() returns a VowenaInstance with unmount() and refresh() methods. Safe to call multiple times — each mount is isolated.Pricing table
Pass an array of plan IDs to render a full pricing page. Each card fetches its plan in parallel and renders price, period, trial, and a subscribe button.- Vanilla JS
- React
highlight marks one plan as “Most popular” — a visual accent, no functional change.
What happens when a user clicks Subscribe
Wallet connection
If no wallet is connected, a modal shows Freighter, LOBSTR, Albedo, Rabet, and xBull. The user picks one and approves the connection. The chosen wallet persists across the session.
Authorization prompt
The embed renders a human-readable summary:
“Subscribing to Pro · 9.99 USDC every month · 7-day trial · cancel anytime. You’ll approve up to 20.00 USDC per period for 24 periods.”The authorization cap comes from the plan’s
priceCeiling and maxPeriods — the merchant can’t charge more than the ceiling, ever.Sign and submit
The embed calls
buildSubscribe(), asks the wallet to sign nested Soroban authorization entries, and submits the transaction. This is one click for the user.API reference
VowenaSubscribe.mount(target, options)
VowenaSubscribe.mountPricingTable(target, options)
React components
onSuccess, onError, onCancel) are fully typed with the SDK’s Subscription and Error types.
How to find your plan ID
Open your workspace in the Vowena dashboard
Go to
app.vowena.xyz, open the workspace, click the Plans tab.updatePlanAmount, every embed using that plan ID reflects the new price on next render. No redeploy.
What’s not here (yet)
- Zero-JS
<script>CDN embed — coming v0.3. React + vanilla JS covers every bundler today. - Theming API — v0.3. The embed ships with Vowena’s default brand tokens.
- Customer portal embed — subscribers manage their subscriptions at
app.vowena.xyz/subscriptions. An embeddable portal is on the roadmap.
How it works under the hood
The embed is a thin layer around the existing SDK:- On mount,
client.getPlan(planId, callerAddress)fetches the plan from chain. - Plan fields (
merchant,amount,period,priceCeiling,maxPeriods,trialPeriods) render the button and authorization prompt. - On click, Stellar Wallets Kit handles wallet selection and signing — Freighter, LOBSTR, Albedo, Rabet, xBull all work out of the box.
client.buildSubscribe()assembles the XDR. The wallet signs the nestedtoken.approve()authorization for the ceiling × maxPeriods allowance.client.submitTransaction()broadcasts. On success, the embed callsclient.getSubscription()with the new ID and passes it toonSuccess.
Peer dependencies
@vowena/sdk/embed and @vowena/sdk/react depend on @creit.tech/stellar-wallets-kit for wallet UX. Install it alongside:
VowenaProvider via the walletKit prop to avoid double-initialization.