ParaPort is organised as a pnpm workspace. Each package focuses on a single responsibility while sharing the same TypeScript tooling and linting rules.
paraport/
├─ packages/static # Chain + asset registry consumed at runtime
├─ packages/core # ParaPortSDK, balance services, teleport orchestration
├─ packages/vue # Vue 3 component library that wraps the core SDK
├─ packages/sdk # Framework-agnostic bundle (mounts the Vue component)
├─ packages/react # Thin React wrapper around @paraport/sdk
└─ apps/playground # Example integrations and manual testing
@polkadot/api and lets ParaPort reuse injected extensions or custom endpoints.@paraport/core)SDKConfig, wires logging, and exposes initSession, executeSession, retrySession, plus event subscriptions.TeleportSession objects (statuses: pending → ready → processing → completed/failed). It reacts to quotes, balance updates, and teleport completion events.TeleportDetails, sequences transactions with TransactionManager, and emits teleport:* lifecycle events. Status transitions are driven by transaction results and balance confirmations.polkadot-api typed endpoints. It handles chain-specific pallets (Hydration’s CurrenciesApi, AssetHub foreign assets, etc.) and provides waitForFunds polling with p-retry.polkadot-api clients per chain, honouring the optional endpoints override you pass in the SDK config.Together they deliver the end-to-end teleport lifecycle: quote discovery, session state, XCM submission, and completion tracking.
@paraport/static → constants used by
@paraport/core → consumed by
@paraport/vue → bundled inside
@paraport/sdk → wrapped by
@paraport/react
@paraport/static exports Chains, Assets, RPC provider lists, and metadata consumed by both the SDK and UIs.@paraport/core exposes the TypeScript API (ParaPortSDK, types, helpers) that powers all higher layers.@paraport/vue renders the integrated UI, using useAutoTeleport to turn TeleportSession updates into component state.@paraport/sdk mounts the Vue component into any DOM node; it is the quickest path for vanilla or server-rendered apps.@paraport/react reuses the SDK bundle but offers React-friendly lifecycle management with hooks and cleanup built in.ParaPortSDK.initialize() registers the XCM bridge, primes network clients, and attaches listeners between the teleport and session managers.initSession normalises the TeleportParams, checks balances via BalanceService, fetches quotes from each registered bridge, and subscribes to balance increases on relevant chains.funds.needed), whether a quote is available, and the best route.executeSession creates a teleport record, seeds the TransactionManager, and hands control to TeleportManager, which calls XCMBridge.transfer() to sign and submit the XCM transfer.completed and all listeners fire. destroy() tears everything down when the UI unmounts.Event channels exposed to integrators:
session:* — session:created, session:updated, session:completed, session:failedteleport:* — teleport:started, teleport:updated, teleport:completedThe default config enables:
PolkadotAssetHubPolkadotKusamaAssetHubKusamaHydrationYou can restrict or extend this list with the chains array when constructing ParaPortSDK. New chains can be onboarded by enriching @paraport/static metadata and adding bridge adapters.