Para SDK Implementation Supplement
This document supplements llms-full.txt with concrete build-time details: exact packages, constructor calls, auth flow code, signing patterns, and configuration required to build any integration in examples-hub.
1. SDK Package Matrix
All@getpara/* packages must use the same version as each other. Always pin every @getpara/* dependency to the same release to avoid mismatches.
Core SDKs
| Package | Use When |
|---|---|
@getpara/react-sdk | React/Next.js apps with ParaProvider + hooks + ParaModal |
@getpara/react-sdk-lite | React apps using Para only through a connector (Wagmi/Graz) - lighter bundle, exports ParaWeb |
@getpara/web-sdk | Non-React web frameworks (Vue, Svelte) - exports ParaWeb imperative class |
@getpara/server-sdk | Node.js/Bun/Deno server-side - exports Para (aliased as ParaServer) |
@getpara/react-native-wallet | React Native / Expo mobile apps |
Signing Integration Packages
| Package | Web3 Library | Companion Deps |
|---|---|---|
@getpara/viem-v2-integration | Viem 2.x | viem@^2.27.0 |
@getpara/ethers-v6-integration | Ethers 6.x | ethers@^6.13.0 |
@getpara/ethers-v5-integration | Ethers 5.x | ethers@^5.8.0 |
@getpara/solana-web3.js-v1-integration | Solana Web3.js 1.x | @solana/web3.js@^1.98.0 |
@getpara/solana-signers-v2-integration | Solana Signers 2.x | @solana/web3.js@^1.98.0 |
@getpara/cosmjs-v0-integration | CosmJS 0.34+ | @cosmjs/stargate@^0.34.0, @cosmjs/proto-signing@^0.34.0 |
Connector Packages
| Package | Connector Ecosystem | Companion Deps |
|---|---|---|
@getpara/wagmi-v2-integration | Wagmi 2.x / 3.x | wagmi@^2.15.0, viem@^2.27.0, @tanstack/react-query@^5.0.0 |
@getpara/rainbowkit-wallet | RainbowKit | @rainbow-me/rainbowkit@^2.0.0, wagmi, viem |
@getpara/graz-integration | Graz (Cosmos) | graz@^0.4.1 |
Wallet Connector Packages (for bulk pregen)
| Package | Purpose |
|---|---|
@getpara/evm-wallet-connectors | EVM external wallet connections |
@getpara/solana-wallet-connectors | Solana external wallet connections |
@getpara/cosmos-wallet-connectors | Cosmos external wallet connections |
Account Abstraction Companion Deps
| AA Provider | Key Packages |
|---|---|
| Alchemy (ERC-4337) | @aa-sdk/core, @account-kit/infra, @account-kit/smart-contracts |
| Alchemy (EIP-7702) | Same as above, uses createModularAccountV2Client with mode: "7702" |
| ZeroDev (ERC-4337) | @zerodev/sdk, @zerodev/ecdsa-validator |
| ZeroDev (EIP-7702) | Same packages, uses create7702KernelAccount + KERNEL_V3_3 |
| Gelato | @gelatonetwork/smartwallet |
| Thirdweb | thirdweb |
| Rhinestone | @rhinestone/sdk |
| Porto | porto |
Required Companion Dependency
All React examples require:2. Initialization Patterns
React / Next.js (ParaProvider)
config prop accepts:
layout.tsx):
ParaProvider also accepts an optional callbacks prop for event handling:
Vue / Svelte (ParaWeb - imperative)
Server (ParaServer)
React Native / Expo (ParaMobile)
{ disableWorkers: true } option is required for React Native because Web Workers are not available.
Chrome Extension (storage overrides)
chromeStorageOverrides object maps chrome.storage.local / chrome.storage.session to replace localStorage / sessionStorage which are not available in extension service workers. See examples-hub/web/with-chrome-extension/src/lib/chrome-storage.ts for the full implementation.
3. Environment Variables
Naming Conventions by Framework
| Framework | Prefix | Example |
|---|---|---|
| Next.js (client) | NEXT_PUBLIC_ | NEXT_PUBLIC_PARA_API_KEY |
| Next.js (server) | none | PARA_API_KEY |
| Vite (Vue/Svelte) | VITE_ | VITE_PARA_API_KEY |
| Expo | EXPO_PUBLIC_ | EXPO_PUBLIC_PARA_API_KEY |
| Node.js server | none | PARA_API_KEY |
Common Variables
4. Authentication Flows
Email Auth (React hooks pattern)
loginUrl from Step 1 must be displayed to the user in an iframe or popup - it’s the passkey verification page hosted by Para.
Email Auth (Imperative / Svelte / Vue)
OAuth Auth (React hooks)
Verify iframe listener
When showing theloginUrl in an iframe, listen for the close message:
5. Signing Integration Code
Viem v2
Ethers v6
Ethers v5
Solana Web3.js v1
CosmJS
6. Wallet Pre-generation (Server-Side)
Create pre-generated wallet
Restore user share for signing
AES-GCM Encryption Pattern
SQLite Storage Schema
7. Account Abstraction Patterns
Alchemy ERC-4337
Alchemy EIP-7702
ZeroDev ERC-4337
ZeroDev EIP-7702
Gelato ERC-4337
Gelato EIP-7702
Thirdweb ERC-4337
Porto EIP-7702
Porto operates on Base Sepolia with a unique EOA-to-smart-account upgrade flow. Seeexamples-hub/web/with-react-nextjs/aa-porto-7702/ for the full implementation using Account.from(), Key.createSecp256k1(), and RelayActions.prepareUpgradeAccount().
Rhinestone ERC-4337
Rhinestone provides cross-chain account abstraction using@rhinestone/sdk. See examples-hub/web/with-react-nextjs/aa-rhinestone-4337/ for cross-chain USDC transfers (Arbitrum->Base) with sponsored transactions.
8. Connector Integrations
Wagmi Connector
@getpara/react-sdk-lite (not the full @getpara/react-sdk) to avoid bundle bloat, since the connector provides its own modal.
RainbowKit
Graz (Cosmos)
defineChainInfo and ParaGrazConfig type are imported from graz, not from @getpara/graz-integration.
9. Session Management
Check and keep alive
Export / Import session (server transfer)
Issue JWT
10. ParaModal Configuration
TheparaModalConfig prop on <ParaSDKProvider> (or the config object for paraConnector) accepts:
Note: Password and PIN screens render in an iframe and use the Developer Portal theme settings, not paraModalConfig.theme.
11. Mobile Setup Requirements
Required Native Modules (Expo)
Metro Config (polyfills)
Babel Config
iOS Passkey Setup
For passkey support on iOS, you must configure your app’s Associated Domains capability with awebcredentials: entry pointing to your domain. The domain must serve an apple-app-site-association file. See examples-hub/mobile/with-expo-one-click-login/ios/ for an example Xcode project configuration.
Key Init Option
Always pass{ disableWorkers: true } when initializing ParaMobile - Web Workers are not available in React Native.
12. Vite Polyfill Configuration
Vue and Svelte projects using Vite needvite-plugin-node-polyfills because the Para SDK uses Node.js built-in modules (buffer, crypto, stream).
@getpara/web-sdk. The @getpara/react-sdk with Next.js does not need this (Next.js handles polyfills via npx setup-para postinstall script).
13. REST API Direct Usage
For server-to-server integrations without the SDK, use the REST API directly.Base URLs
| Environment | URL |
|---|---|
| Beta | https://api.beta.getpara.com |
| Production | https://api.getpara.com |
Authentication Header
Endpoints
Create Wallet Request
type:"EVM"|"SOLANA"|"COSMOS"userIdentifierType:"EMAIL"|"PHONE"|"CUSTOM_ID"|"GUEST_ID"|"TELEGRAM"|"DISCORD"|"TWITTER"scheme:"DKLS"|"CGGMP"|"ED25519"(optional, defaults based on wallet type)cosmosPrefix: string (optional, for Cosmos wallets)
Sign Raw Request
Error Codes
| Code | Meaning |
|---|---|
| 201 | Created |
| 200 | Success |
| 400 | Bad request (invalid params) |
| 401 | Unauthorized (invalid API key) |
| 404 | Not found |
| 409 | Conflict (wallet already exists) |
| 429 | Rate limited |
| 500 | Server error |
Example Node.js client
14. React Hook Reference
CSS Import
ParaModal requires its stylesheet:From @getpara/react-sdk
Account & Connection:
useAccount()->{ isConnected, isConnecting, address, embedded }-embedded.walletscontains wallet arrayuseClient()-> Para client instance (for passing to signer constructors)useIsFullyLoggedIn()->boolean | undefineduseParaStatus()->ParaStatus(readiness and Farcaster Mini App detection)useModal()->{ isOpen, openModal, closeModal }useWallet()->Wallet | null | undefined(active wallet)useWalletState()->{ selectedWallet, setSelectedWallet, updateSelectedWallet }useLinkedAccounts()->LinkedAccounts & { userId: string }
useSignUpOrLogIn()->{ signUpOrLogIn, signUpOrLogInAsync, isPending }useVerifyOAuth()->{ verifyOAuth, isPending }useVerifyFarcaster()->{ verifyFarcaster, isPending }useVerifyNewAccount()->{ verifyNewAccount, verifyNewAccountAsync }useWaitForLogin()->{ waitForLogin, isPending }useWaitForWalletCreation()->{ waitForWalletCreation, isPending }useLoginExternalWallet()->{ loginExternalWallet, loginExternalWalletAsync }useLogout()->{ logout, logoutAsync }useAddAuthMethod()->{ addCredential, addCredentialAsync }useLinkAccount()->{ linkAccount, isPending, error }
useSignMessage()->{ signMessage, signMessageAsync }- signs base64-encoded message with wallet IDuseSignTransaction()->{ signTransaction, signTransactionAsync }
useKeepSessionAlive()->{ keepSessionAlive, keepSessionAliveAsync }useIssueJwt()->{ issueJwt, issueJwtAsync }->{ token, keyId }
useCreateWallet()->{ createWallet, createWalletAsync }useCreateWalletPerType()->{ createWalletPerType, createWalletPerTypeAsync }- create wallets for multiple chain typesuseCreateGuestWallets()->{ createGuestWallets, createGuestWalletsAsync }useWalletBalance()->string | null- balance in native units
From @getpara/react-sdk/evm
EVM-specific hooks for direct Viem client access (requires @getpara/viem-v2-integration as a dependency):
useViemClient({ address, walletClientConfig })->{ viemClient }- returns a Viem WalletClient pre-configured with the Para signer
createParaAccount / createParaViemClient directly.
From @getpara/react-sdk/viem
useViemAccount({ address? })->{ viemAccount: Account | null, isLoading }- lower-level access to the viem Account without creating a full WalletClient
From @getpara/react-sdk/solana
useSolanaSigner({ rpc, walletId? })->{ solanaSigner: SignerWalletAdapter | null, isLoading }- for Solana Signers v2 integration
From @getpara/react-sdk/cosmos
useCosmjsProtoSigner({ prefix?, walletId?, messageSigningTimeoutMs? })->{ protoSigner: OfflineDirectSigner | null, isLoading }- for CosmJS proto signinguseCosmjsAminoSigner({ prefix?, walletId?, messageSigningTimeoutMs? })->{ aminoSigner: OfflineAminoSigner | null, isLoading }- for CosmJS amino signing
15. Testing Credentials
Beta Environment
- Environment:
Environment.BETA/"BETA" - Portal base URL:
https://app.beta.getpara.com - API base URL:
https://api.beta.getpara.com
Test Email Pattern
Use any email ending in@test.getpara.com (e.g., dev@test.getpara.com, test1@test.getpara.com). Any OTP code works (e.g., 123456, 000000).
Test Phone Numbers
Use US numbers (+1) with format(area code)-555-xxxx (e.g., (425)-555-1234, (206)-555-9876). Any OTP code works.
User Limits
50 users per beta account. Delete test users via Developer Portal -> Users section. Users can only be deleted in BETA; in production, wallets are permanent.Post-Install Setup
Many Next.js examples include apostinstall script:
npm install.
16. Examples Hub Directory Map
Web - Framework Setup
| Directory | Framework | SDK | Key Concept |
|---|---|---|---|
web/with-react-nextjs/para-modal/ | Next.js | @getpara/react-sdk | ParaProvider + ParaModal quickstart |
web/with-react-vite/ | React + Vite | @getpara/react-sdk | Vite with React |
web/with-svelte-vite/ | Svelte + Vite | @getpara/web-sdk | Imperative ParaWeb init |
web/with-vue-vite/ | Vue + Vite | @getpara/web-sdk | Imperative ParaWeb init |
web/with-react-tanstack-start/ | TanStack Start | @getpara/react-sdk | Full-stack meta-framework |
web/with-chrome-extension/ | Chrome Ext | @getpara/react-sdk | Storage overrides |
web/with-pwa/ | PWA | @getpara/react-sdk | Progressive Web App |
Web - Authentication
| Directory | Auth Method |
|---|---|
web/with-react-nextjs/custom-email-auth/ | Email + passkey verification |
web/with-react-nextjs/custom-phone-auth/ | Phone + OTP verification |
web/with-react-nextjs/custom-oauth-auth/ | OAuth (Google, Apple, etc.) + Farcaster |
web/with-react-nextjs/custom-combined-auth/ | All auth methods combined |
Web - Signing Libraries
| Directory | Library | Package |
|---|---|---|
web/with-react-nextjs/signer-viem-v2/ | Viem 2.x | @getpara/viem-v2-integration |
web/with-react-nextjs/signer-ethers-v5/ | Ethers 5.x | @getpara/ethers-v5-integration |
web/with-react-nextjs/signer-ethers-v6/ | Ethers 6.x | @getpara/ethers-v6-integration |
web/with-react-nextjs/signer-solana-web3/ | Solana Web3.js | @getpara/solana-web3.js-v1-integration |
web/with-react-nextjs/signer-solana-anchor/ | Anchor | @getpara/solana-web3.js-v1-integration |
web/with-react-nextjs/signer-solana-signers-v2/ | Solana Signers v2 | @getpara/solana-signers-v2-integration |
web/with-react-nextjs/signer-cosmjs/ | CosmJS | @getpara/react-sdk (uses useCosmjsProtoSigner from /cosmos) |
Web - Connectors
| Directory | Connector | Package |
|---|---|---|
web/with-react-nextjs/connector-wagmi/ | Wagmi v2 | @getpara/wagmi-v2-integration + @getpara/react-sdk-lite |
web/with-react-nextjs/connector-rainbowkit/ | RainbowKit | @getpara/rainbowkit-wallet |
web/with-react-nextjs/connector-graz/ | Graz (Cosmos) | @getpara/graz-integration |
web/with-react-nextjs/connector-reown-appkit/ | Reown AppKit | @getpara/wagmi-v2-integration |
Web - Account Abstraction
| Directory | Provider | Standard |
|---|---|---|
web/with-react-nextjs/aa-alchemy-4337/ | Alchemy | ERC-4337 |
web/with-react-nextjs/aa-alchemy-7702/ | Alchemy | EIP-7702 |
web/with-react-nextjs/aa-zerodev-4337/ | ZeroDev | ERC-4337 |
web/with-react-nextjs/aa-zerodev-7702/ | ZeroDev | EIP-7702 |
web/with-react-nextjs/aa-gelato-4337/ | Gelato | ERC-4337 |
web/with-react-nextjs/aa-gelato-7702/ | Gelato | EIP-7702 |
web/with-react-nextjs/aa-thirdweb-4337/ | Thirdweb | ERC-4337 |
web/with-react-nextjs/aa-rhinestone-4337/ | Rhinestone | ERC-4337 |
web/with-react-nextjs/aa-porto-7702/ | Porto | EIP-7702 |
Web - Modal Variants
| Directory | Chain Focus |
|---|---|
web/with-react-nextjs/para-modal/ | Default (all chains) |
web/with-react-nextjs/para-modal-evm/ | EVM only |
web/with-react-nextjs/para-modal-solana/ | Solana only |
web/with-react-nextjs/para-modal-cosmos/ | Cosmos only |
web/with-react-nextjs/para-modal-multichain/ | Explicit multi-chain |
web/with-react-nextjs/para-pregen-claim/ | Pre-generated wallet claiming |
Server
| Directory | Runtime | Key Features |
|---|---|---|
server/with-node/ | Node.js | Pregen wallets, Viem/Ethers/Solana/CosmJS signing, Alchemy AA, ZeroDev AA |
server/with-bun/ | Bun | Session-based signing, Alchemy/ZeroDev EIP-7702 |
server/with-deno/ | Deno | Session-based signing, Alchemy/ZeroDev EIP-7702 |
server/rest-with-node/ | Node.js | REST API direct usage (no SDK, raw fetch) |
Mobile
| Directory | Platform | Key Features |
|---|---|---|
mobile/with-react-native/ | React Native | Standard RN setup |
mobile/with-expo-one-click-login/ | Expo | One-click login, passkeys, native crypto polyfills |
Advanced Patterns
| Directory | Pattern |
|---|---|
advanced-patterns/client-auth-server-sign/ | Client authenticates, exports session, server signs |
advanced-patterns/with-bulk-pregen/ | Bulk wallet pre-generation with multi-chain claiming UI |
DeFi Integrations
| Directory | Integration |
|---|---|
defi-integrations/with-jupiter-dex-api/ | Jupiter DEX (Solana) |
defi-integrations/with-squid-router-api/ | Squid cross-chain router |
defi-integrations/with-relay-bridge-api/ | Relay Protocol bridge |