Open Source · MIT · Stellar Wave Program
An open-source SDK — written in Rust, shipped to every platform — so any app can embed wellness, gifting, and real-time Stellar data in minutes.
use echomirror_core::{EchoMirrorClient, EchoMirrorConfig}; use echomirror_stellar::{get_balance, fund_testnet_account}; use echomirror_sync::{SyncEngine, SyncFilter}; #[tokio::main] async fn main() { let client = EchoMirrorClient::new( EchoMirrorConfig::testnet("your_api_key") ).unwrap(); // Query Horizon directly — no API round-trip let balance = get_balance(&client, "GPUBLIC_KEY").await.unwrap(); println!("{} XLM • {} ECHO", balance.xlm, balance.echo); // Stream real-time blockchain events let engine = SyncEngine::builder(&client) .watch("GPUBLIC_KEY") .filter(SyncFilter::new().asset("ECHO").min_amount(1.0)) .build(); engine.start(); }
import { EchoMirrorClient } from '@echomirror/core' import { logMood, getMoodStreak } from '@echomirror/mood' import { connectFreighter, getBalance, sendEcho } from '@echomirror/stellar' const client = new EchoMirrorClient({ apiKey: 'your_api_key', network: 'testnet' }) const entry = await logMood(client, { score: 8, note: 'Shipped something great.', tags: ['work'] }) const streak = await getMoodStreak(client) console.log(`${streak.current} day streak`) const wallet = await connectFreighter() await sendEcho(client, { from: wallet.publicKey, to: 'GRECIPIENT', amount: 5, memo: 'Great energy ✨' })
import { EchoMirrorProvider, useMoodStreak } from '@echomirror/react' import { MoodWidget } from '@echomirror/widget' function Dashboard() { const { streak } = useMoodStreak() return ( <div> <p>{streak?.current} day streak</p> <MoodWidget position="bottom-right" theme="auto" /> </div> ) } export default () => ( <EchoMirrorProvider apiKey="your_api_key"><Dashboard /></EchoMirrorProvider> )
import 'package:echomirror_sdk/echomirror_sdk.dart'; void main() async { await EchoMirror.initialize(apiKey: 'your_api_key', network: StellarNetwork.testnet); runApp(const MyApp()); } final balance = await EchoMirror.instance.stellar.getBalance(publicKey); final streak = await EchoMirror.instance.mood.getStreak(); BlockchainSyncClient(EchoMirror.instance.config) .watch(publicKey) .listen((e) => print('Ledger: ${(e as LedgerSyncEvent).ledgerSequence}'));
from echomirror import EchoMirrorClient, get_balance import asyncio # PyO3 — Rust compiled natively into Python client = EchoMirrorClient(api_key='your_api_key', network='testnet') balance = get_balance(client, 'GPUBLIC_KEY') print(f'{balance.xlm} XLM • {balance.echo} ECHO') async def main(): entry = await client.log_mood(score=8, note='Great day', tags=['work']) streak = await client.get_streak() print(f'{streak.current} day streak') asyncio.run(main())
In action
Watch the mood widget, Stellar wallet, and blockchain sync engine running live.
How it's built
Crypto, XDR encoding, and blockchain sync run in Rust. React hooks, Flutter plugins, Python bindings — thin idiomatic wrappers on top.
Packages
Every package is independently installable. Use one or all of them.
| Package | Platform | Description |
|---|---|---|
| echomirror-core | Rust | Client, types, error enum, config — the foundation everything else builds on |
| echomirror-stellar | Rust | Horizon client, XLM + ECHO balance, Friendbot, unsigned XDR transaction building |
| echomirror-sync | Rust | Real-time Stellar ledger sync engine, resumable cursors, pluggable CursorStore trait |
| echomirror-ffi | Rust | C-ABI shared library (.so / .dylib / .dll) for Flutter dart:ffi, Python ctypes, Swift |
| echomirror-wasm | Rust | wasm-bindgen build — crypto, address validation, memo encoding for browser and Node.js |
| @echomirror/core | JS/TS | EchoMirrorClient, all TypeScript types, error classes, typed event bus |
| @echomirror/mood | JS/TS | logMood, getMoodStreak, getMoodHistory, getMoodSummary, getAIReflection |
| @echomirror/stellar | JS/TS | connectFreighter, getBalance, sendEcho, fundTestnetAccount, getTransactionHistory |
| @echomirror/react | React | EchoMirrorProvider, useProfile, useMoodStreak, useSDKEvent — hooks and context |
| @echomirror/widget | React | Drop-in <MoodWidget /> and Web Component — floating mood check-in for any site |
| @echomirror/social | JS/TS | Global mood feed, weekly leaderboard, follow/unfollow users |
| @echomirror/analytics | JS/TS | Emotional UX event tracking — batched, privacy-first, respects Do Not Track |
| echomirror_sdk | Flutter | Full Dart SDK — MoodClient, StellarClient, SocialClient, BlockchainSyncClient, FFI |
What you can build
The SDK doesn't require you to build a mood app. It adds emotional intelligence to whatever you're already building.
Live demos
These aren't screenshots — they're running in your browser right now using Canvas.
Blockchain Sync
The echomirror-sync crate streams Stellar ledger events into your app — with cursors that survive restarts.
SyncCursor::genesis() to start from the network tip.CursorStore trait to save cursors in Redis, PostgreSQL, SQLite. Restart without re-scanning.TransactionDetected, LedgerClosed, SyncCompleted — fully typed tokio broadcast channel.let engine = SyncEngine::builder(&client) .watch("GPUBLIC_KEY_1") .watch("GPUBLIC_KEY_2") .filter( SyncFilter::new() .asset("ECHO") .min_amount(1.0) .memo_prefix("gift:") ) .cursor_store(Arc::new(RedisCursorStore::new(pool))) .build(); let mut stream = engine.clone().subscribe(); engine.start(); while let Ok(event) = stream.recv().await { match event { SyncEvent::TransactionDetected { tx } => { notify_user(&tx.to, &tx.amount).await; } _ => {} } }
Extensions
Developer tooling that lives where you work, not in another tab.
em-mood, em-sync, em-sendOpen Source
Every merged PR earns Stellar Wave points. Issues span Rust, TypeScript, Flutter, Python, Swift, and documentation.
Open source, MIT licensed. Every contribution earns Stellar Wave points. The SDK is live — star it, fork it, pick an issue.