Skip to main content

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

Signing Integration Packages

Connector Packages

Wallet Connector Packages (for bulk pregen)

Account Abstraction Companion Deps

Required Companion Dependency

All React examples require:

2. Initialization Patterns

React / Next.js (ParaProvider)

The config prop accepts:
Wrap your app root (e.g., layout.tsx):
ParaProvider also accepts an optional callbacks prop for event handling:

Vue / Svelte (ParaWeb - imperative)

Server (ParaServer)

React Native / Expo (ParaMobile)

The { disableWorkers: true } option is required for React Native because Web Workers are not available.

Chrome Extension (storage overrides)

The 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

Common Variables


4. Authentication Flows

Email Auth (React hooks pattern)

The 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 the loginUrl 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. See examples-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

Important: The Wagmi connector uses @getpara/react-sdk-lite (not the full @getpara/react-sdk) to avoid bundle bloat, since the connector provides its own modal.

RainbowKit

Graz (Cosmos)

Note: 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

The paraModalConfig 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 a webcredentials: 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 need vite-plugin-node-polyfills because the Para SDK uses Node.js built-in modules (buffer, crypto, stream).
Install:
This is required for @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

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

Example Node.js client


14. React Hook Reference

CSS Import

ParaModal requires its stylesheet:
Add this in your root layout or ParaProvider component.

From @getpara/react-sdk

Account & Connection:
  • useAccount() -> { isConnected, isConnecting, address, embedded } - embedded.wallets contains wallet array
  • useClient() -> Para client instance (for passing to signer constructors)
  • useIsFullyLoggedIn() -> boolean | undefined
  • useParaStatus() -> 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 }
Authentication:
  • 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 }
Signing (low-level):
  • useSignMessage() -> { signMessage, signMessageAsync } - signs base64-encoded message with wallet ID
  • useSignTransaction() -> { signTransaction, signTransactionAsync }
Session:
  • useKeepSessionAlive() -> { keepSessionAlive, keepSessionAliveAsync }
  • useIssueJwt() -> { issueJwt, issueJwtAsync } -> { token, keyId }
Wallet Management:
  • useCreateWallet() -> { createWallet, createWalletAsync }
  • useCreateWalletPerType() -> { createWalletPerType, createWalletPerTypeAsync } - create wallets for multiple chain types
  • useCreateGuestWallets() -> { createGuestWallets, createGuestWalletsAsync }
  • useWalletBalance() -> string | null - balance in native units

From @getpara/react-sdk/evm

EVM-specific hooks for direct Viem client access. @getpara/react-sdk includes @getpara/viem-v2-integration; install viem when your app imports Viem helpers directly:
  • useViemClient({ address, walletClientConfig }) -> { viemClient } - returns a Viem WalletClient pre-configured with the Para signer
This is the preferred way to use Viem in React - no need to import 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 signing
  • useCosmjsAminoSigner({ 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 a postinstall script:
This configures Next.js webpack to handle Para SDK’s WASM and worker files. Always run it after npm install.

16. Examples Hub Directory Map

Web - Framework Setup

Web - Authentication

Web - Signing Libraries

Web - Connectors

Web - Account Abstraction

Web - Modal Variants

Server

Mobile

Advanced Patterns

DeFi Integrations