Introduction

TUWA Satellite delivers low-level, headless wallet connection orchestration primitives engineered for complete architectural control and self-custodial cryptographic identity.
[!IMPORTANT] Decoupling Notice: Satellite manages connection logic and session state orchestration; it does not touch visual rendering (Nova UI) or cross-device cloud persistence/metering (Quasar).
🏛️ Architecture & Overview
Satellite represents the connection orchestration layer of the TUWA Ecosystem, sitting between user agents and blockchain RPC protocols. It maps physical wallet standard actions to unified cryptographic identities and tracks session status inside a type-safe state engine.
By establishing strict framework-agnostic core logic, Satellite removes the need for vendor lock-in or custodial SDK pipelines.
Core Decoupled Pipeline:
- State Orchestration:
@tuwaio/satellite-coreprovides a framework-agnostic Zustand-based state store maintaining absolute synchronization between multi-chain provider events and application sessions. - Connection Primitives:
@tuwaio/satellite-reactoffers context providers and hooks mapping state updates to the React component lifecycle. - Low-Level Adapters: Chain adapters (
@tuwaio/satellite-evm,@tuwaio/satellite-solana) isolate wagmi and gill clients, operating directly on client transport parameters. - Cryptographic Auth:
@tuwaio/satellite-siwe-next-authbridges active sessions to SIWE validation standards on the server side using encrypted cookie storage.
✨ Architectural Features
- Unified React Hooks & Contexts: Context providers and hooks (
useSatelliteConnectStore) tracking the lifecycle of multiple connection instances. - Multi-Connection Sync: Manages concurrent connections across distinct chains with atomic state updates.
- Direct EVM & Solana Integrations: Raw integration of EVM connections and Solana wallet providers.
- Direct Primitives Usage: Operates directly on Wagmi, Viem, and Gill without vendor wrappers.
- Server-Side SIWE Session Mapping: High-integrity server session validation mapped to Next.js API routes and cookies.
- Decoupled Core Storage: Pure state store logic using Zustand and Immer.
- SSR Compatibility: Optimized for modern server-rendered architectures (Next.js App Router).
🧩 Monorepo Modules
Satellite is built modularly to ensure isolated imports:
Core Modules
@tuwaio/satellite-core: Foundational state layer. Exposes the Zustand store, core type definitions, and direct event dispatch interfaces.@tuwaio/satellite-react: React bindings mapping core store state to React components.
Low-Level Adapters
@tuwaio/satellite-evm: EVM network adapter connecting Viem clients and Wagmi watchers.@tuwaio/satellite-solana: Solana network adapter wrapping Gill and the Wallet Standard API.
Cryptographic Authentication
@tuwaio/satellite-siwe-next-auth: Server-side signature validation adapter matching the SIWE standard and Next.js App Router routes.
🚀 Getting Started
Here is a basic example of how to set up the SatelliteConnectProvider in a React application (e.g., in your main layout.tsx or App.tsx).
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import { satelliteEVMAdapter, createDefaultTransports } from '@tuwaio/satellite-evm';
import { SatelliteConnectProvider } from '@tuwaio/satellite-react';
import { EVMConnectorsWatcher } from '@tuwaio/satellite-react/evm';
import { SolanaConnectorsWatcher } from '@tuwaio/satellite-react/solana';
import { satelliteSolanaAdapter } from '@tuwaio/satellite-solana';
import { WagmiProvider } from 'wagmi';
import { ReactNode } from 'react';
import { createConfig } from '@wagmi/core';
import { injected } from '@wagmi/connectors';
import { mainnet, sepolia } from 'viem/chains';
import type { Chain } from 'viem/chains';
export const appEVMChains = [mainnet, sepolia] as readonly [Chain, ...Chain[]];
export const wagmiConfig = createConfig({
connectors: [injected()],
transports: createDefaultTransports(appEVMChains), // Automatically creates http transports
chains: appEVMChains,
ssr: true, // Enable SSR support if needed (e.g., in Next.js)
});
export const solanaRPCUrls = {
devnet: 'https://api.devnet.solana.com',
};
const queryClient = new QueryClient();
export function Providers({ children }: { children: ReactNode }) {
return (
<WagmiProvider config={wagmiConfig}>
<QueryClientProvider client={queryClient}>
<SatelliteConnectProvider
adapter={[satelliteEVMAdapter(wagmiConfig, appEVMChains), satelliteSolanaAdapter({ rpcUrls: solanaRPCUrls })]}
autoConnect={true}
>
<EVMConnectorsWatcher wagmiConfig={wagmiConfig} />
<SolanaConnectorsWatcher />
{children}
</SatelliteConnectProvider>
</QueryClientProvider>
</WagmiProvider>
);
}📚 Next Steps
- Explore the API Reference for detailed documentation on all exported packages, hooks, and components. The API reference is automatically generated from the source code comments using TypeDoc.
- Check the README files within each package for specific setup and usage examples:
satellite-coresatellite-reactsatellite-evmsatellite-solanasatellite-siwe-next-auth
Built with ❤️ by the TUWA Team