Open Source · MIT · Stellar Wave Program

Mood intelligence,
Stellar payments,
blockchain sync.

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())
Rust · crates.io JS/TS · npm Flutter · pub.dev WebAssembly VS Code + Chrome

In action

See the SDK working
across platforms.

Watch the mood widget, Stellar wallet, and blockchain sync engine running live.

App walkthrough
Mood logging · streak · ECHO gifting
SDK quickstart
npm install → first mood log in 5 min
Live blockchain sync
echomirror-sync · Rust · Stellar ledger stream
Flutter integration
echomirror_sdk on iOS and Android

How it's built

Rust at the core,
idiomatic on every platform.

Crypto, XDR encoding, and blockchain sync run in Rust. React hooks, Flutter plugins, Python bindings — thin idiomatic wrappers on top.

EchoMirror API
auth · mood · AI reflections · social · Stellar Horizon
Rust workspace
echomirror-core
Client, types, config, error handling
echomirror-stellar
Horizon client, balance, Friendbot, XDR tx building
echomirror-sync
Streaming sync engine, resumable cursors, event broadcast
echomirror-wasm
wasm-bindgen → browser & Node.js
echomirror-ffi
C-ABI .so/.dylib → Flutter, Python, Swift
JS / TypeScript
@echomirror/core
API client, auth, shared TypeScript types
@echomirror/mood
logMood, streak, history, AI reflections
@echomirror/stellar
Freighter, getBalance, sendEcho, Friendbot
@echomirror/react
Provider, useMoodStreak, useSDKEvent
@echomirror/widget
Drop-in React + Web Component mood widget
Native bindings
echomirror_sdk
Flutter/Dart — mood, Stellar, social, sync, FFI
echomirror (Python)
PyO3 — native extension, asyncio compatible
EchoMirrorSDK (Swift)
XCFramework via Swift Package Manager

Packages

Pick what you need,
install and ship.

Every package is independently installable. Use one or all of them.

PackagePlatformDescription
echomirror-coreRustClient, types, error enum, config — the foundation everything else builds on
echomirror-stellarRustHorizon client, XLM + ECHO balance, Friendbot, unsigned XDR transaction building
echomirror-syncRustReal-time Stellar ledger sync engine, resumable cursors, pluggable CursorStore trait
echomirror-ffiRustC-ABI shared library (.so / .dylib / .dll) for Flutter dart:ffi, Python ctypes, Swift
echomirror-wasmRustwasm-bindgen build — crypto, address validation, memo encoding for browser and Node.js
@echomirror/coreJS/TSEchoMirrorClient, all TypeScript types, error classes, typed event bus
@echomirror/moodJS/TSlogMood, getMoodStreak, getMoodHistory, getMoodSummary, getAIReflection
@echomirror/stellarJS/TSconnectFreighter, getBalance, sendEcho, fundTestnetAccount, getTransactionHistory
@echomirror/reactReactEchoMirrorProvider, useProfile, useMoodStreak, useSDKEvent — hooks and context
@echomirror/widgetReactDrop-in <MoodWidget /> and Web Component — floating mood check-in for any site
@echomirror/socialJS/TSGlobal mood feed, weekly leaderboard, follow/unfollow users
@echomirror/analyticsJS/TSEmotional UX event tracking — batched, privacy-first, respects Do Not Track
echomirror_sdkFlutterFull Dart SDK — MoodClient, StellarClient, SocialClient, BlockchainSyncClient, FFI

What you can build

Every app has users.
Now every app has wellness.

The SDK doesn't require you to build a mood app. It adds emotional intelligence to whatever you're already building.

Productivity tools
Add a daily mood check-in to any task manager or notes app. See how emotional state correlates with task completion in your analytics.
Games
Gift ECHO tokens as in-game rewards. Show a world mood overlay on your home screen. Track player emotional patterns across sessions.
Fitness & health
Correlate workout completion with mood scores. Add streak gamification backed by Stellar. Let users gift tokens to accountability partners.
Social platforms
Pull the global EchoMirror feed and show how the world is feeling right now. Let users react with ECHO token gifts instead of likes.
Web3 / DeFi apps
The cleanest Freighter wallet integration available. Connect, read balances, build and sign ECHO token transactions in three lines.
Research & data science
The Python binding (PyO3) gives data scientists a native async client. Query mood data, run blockchain sync, export to pandas — no HTTP boilerplate.

Live demos

The sync engine and
mood pulse, rendered live.

These aren't screenshots — they're running in your browser right now using Canvas.

echomirror-sync — ledger stream
@echomirror/mood — global pulse

Blockchain Sync

Real-time Stellar sync,
resumable by design.

The echomirror-sync crate streams Stellar ledger events into your app — with cursors that survive restarts.

1
Start from any ledger
Pass a specific ledger sequence, or use SyncCursor::genesis() to start from the network tip.
2
Filter what matters
Watch specific accounts, filter by asset (ECHO / XLM), minimum amounts, or memo prefix. Zero noise in your event stream.
3
Persist with any backend
Implement the CursorStore trait to save cursors in Redis, PostgreSQL, SQLite. Restart without re-scanning.
4
Typed event stream
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

SDK tools in your
browser and editor.

Developer tooling that lives where you work, not in another tab.

VS Code Extension
Editor · Marketplace
  • Live ECHO balance in the status bar, refreshes every 60s
  • Blockchain Sync Explorer — real-time TX stream in a panel
  • One-click Friendbot funding for testnet accounts
  • Stellar address validator command
  • 8 code snippets: em-mood, em-sync, em-send
Chrome Extension
Browser · Web Store
  • Popup balance checker — any account on mainnet or testnet
  • Inject the floating mood widget into any website in one click
  • Background TX watcher — desktop notification on every new Stellar TX
  • Zero setup — works on any site immediately
Firefox Extension
Browser · Add-ons · coming soon
  • Same feature set as Chrome — MV2/MV3 dual manifest
  • Compatible with Firefox Add-ons gallery
  • Open issue #15 — ready to pick up

Open Source

20 open issues,
waiting for you.

Every merged PR earns Stellar Wave points. Issues span Rust, TypeScript, Flutter, Python, Swift, and documentation.

Build the wellness layer
your app was missing.

Open source, MIT licensed. Every contribution earns Stellar Wave points. The SDK is live — star it, fork it, pick an issue.