Spoke is a decentralized, cross-platform smart home controller built on the Ixian Platform. It provides secure, privacy-first control of your Home Assistant devices through QuIXI bridge integration, with post-quantum encryption and no central servers.
- 🏠 Smart Home Control - Manage lights, switches, sensors, and more
- 🔒 Post-Quantum Secure - Uses Ixian's hybrid RSA + ECDH + ML-KEM encryption
- 🌐 Decentralized - No central servers, communicates via QuIXI bridge
- 📱 Cross-Platform - Android, iOS, Windows, and macOS support
- 🎨 Customizable Widgets - Choose from toggles, gauges, graphs, and sensors
- 📊 Real-Time Updates - Live WebSocket synchronization with QuIXI
- 🔔 Push Notifications - Get notified on important entity state changes
- 🌓 Dark Mode - Beautiful light and dark themes
- 🔐 Secure Storage - Local entity configuration with optional authentication
- ♻️ Background Sync - Automatic state synchronization in the background
- 👤 Spixi Integration - Built-in wallet creation, username, and profile setup
- 🏗️ Blockchain Identity - Your cryptographic address is your identity
- Migrated from .NET 9 to .NET 10 - Latest .NET framework with improved performance and security
- Cross-platform compatibility - Successfully builds on Windows, iOS, macOS, and Android
- Updated dependencies - All NuGet packages upgraded to .NET 10 compatible versions
- Conditional compilation - Platform-specific code properly isolated with
#if WINDOWSdirectives
- Post-quantum encryption - ML-KEM integration for quantum-resistant security
- Improved build system - Optimized for .NET 10 MAUI workloads
- Better error handling - Enhanced exception management across platforms
- Multi-language files - Language files copied from Spixi (English, German, etc.)
- Extensible translation system - Ready for UI string adaptation and localization
Spoke integrates with Spixi to provide secure blockchain-based identity management. Unlike traditional apps that use passwords and central servers, Spoke uses cryptographic identities that you control.
- Self-Sovereign - You own your identity, not a corporation
- Post-Quantum Secure - Protected against future quantum computing threats
- Decentralized - No central authority can revoke your access
- Privacy-First - Your identity is just a cryptographic address
The first-run setup creates:
- Cryptographic Wallet - Your private keys for signing and encryption
- Username - Human-readable identifier for your contacts
- Profile Picture - Avatar for visual identification
- Ixian Address - Your unique blockchain identity
- End-to-End Encryption - All communication is cryptographically secure
- No Passwords - Authentication uses public-key cryptography
- Forward Secrecy - Past communications remain secure even if keys are compromised
- Zero-Knowledge - QuIXI cannot read your smart home data
- .NET 10 SDK or later
- Visual Studio 2022 (with .NET MAUI workload) or VS Code
- QuIXI Bridge running and accessible
- Home Assistant instance (connected to QuIXI via MQTT)
- MQTT Broker (Mosquitto or similar)
# Clone Ixian-Core (required dependency)
git clone -b development https://github.com/ixian-platform/Ixian-Core.git
# Clone Spoke
git clone https://github.com/ixian-platform/Spoke.git
cd Spokedotnet restore Spoke.sln- Open
Spoke.slnin Visual Studio 2022 - Select your target platform (Android, iOS, Windows, macOS)
- Press
F5to build and run
# For Android
dotnet build -t:Run -f net10.0-android
# For iOS (requires Mac)
dotnet build -t:Run -f net10.0-ios
# For Windows
dotnet build -t:Run -f net10.0-windows10.0.19041.0 -p:Platform=x64
# For macOS
dotnet build -t:Run -f net10.0-maccatalystdotnet build -c Release -f net10.0-android
# Output: Spoke/bin/Release/net10.0-android/io.ixian.Spoke-Signed.apk-
Start QuIXI Bridge with Home Assistant integration:
cd QuIXI dotnet run -
Configure QuIXI in
ixian.cfg:apiPort = 8001 mqDriver = mqtt mqHost = localhost mqPort = 1883
-
Connect Home Assistant to MQTT:
- In Home Assistant, go to Settings → Integrations → MQTT
- Configure broker address (same as QuIXI
mqHost)
- Launch Spoke for the first time
- Welcome Screen - Introduction to blockchain-based smart home control
- Create Your Wallet - Generate a secure cryptographic wallet for your Ixian identity
- Choose Username & Avatar - Set up your profile with username and profile picture
- Configure QuIXI Connection - Enter your QuIXI bridge details:
- QuIXI Address: IP address of QuIXI bridge (e.g.,
192.168.1.100) - Port:
8001(default) - Username/Password: (if configured in QuIXI)
- QuIXI Address: IP address of QuIXI bridge (e.g.,
- Test Connection - Verify connectivity to QuIXI bridge
- Setup Complete - Your secure smart home controller is ready!
If you need to reconfigure settings later:
- Open Settings (hamburger menu → Settings)
- Configure Home Assistant:
- Home Assistant URL: Your HA instance URL
- Access Token: Generate from HA (Profile → Long-Lived Access Tokens)
- Tap Test Connection to verify
- Tap Save Settings
- Go to Home page
- Tap + Add Entity
- Tap Load Entities from QuIXI
- Browse available Home Assistant entities
- Select an entity to add
- Choose widget type:
- Toggle - For switches, lights (on/off control)
- Sensor - For temperature, humidity (read-only display)
- Gauge - For numeric values with visual gauge
- Graph - For historical data visualization
- Customize name and icon
- Tap Save
- Toggle entities: Tap to switch on/off
- Lights: Long-press for brightness/color control (coming soon)
- View details: Tap entity to see full state and attributes
- Reorder: Long-press and drag entities (coming soon)
- Edit: Tap entity → Edit button
- Delete: Tap entity → Delete button → Confirm
Spoke/
├── Spoke.sln # Solution file
├── Spoke/
│ ├── Spoke.csproj # Project file
│ ├── App.xaml # Application entry
│ ├── AppShell.xaml # Shell navigation
│ ├── MauiProgram.cs # MAUI initialization
│ ├── Meta/
│ │ ├── Config.cs # App configuration
│ │ └── Node.cs # Ixian node management
│ ├── Network/
│ │ └── QuixiClient.cs # QuIXI bridge communication
│ ├── Data/
│ │ ├── Entity.cs # Entity models
│ │ └── EntityManager.cs # Entity CRUD operations
│ ├── Pages/
│ │ ├── HomePage.xaml # Main dashboard
│ │ ├── SettingsPage.xaml
│ │ ├── AddEntity/ # Add entity workflow
│ │ └── EntityDetail/ # Entity detail/edit
│ ├── Controls/ # Custom UI controls (coming soon)
│ └── Resources/
│ ├── Styles/ # Colors and styles
│ ├── Images/ # Icons and images
│ └── Fonts/ # OpenSans fonts
┌─────────────────┐
│ Spoke App │
│ (MAUI UI) │
└────────┬────────┘
│
↓
┌────────────────────┐
│ QuixiClient │
│ (REST/WebSocket) │
└────────┬───────────┘
│
↓
┌────────────────────┐
│ QuIXI Bridge │
│ (Ixian Gateway) │
└────────┬───────────┘
│
↓ MQTT
┌────────────────────┐
│ MQTT Broker │
│ (Mosquitto) │
└────────┬───────────┘
│
↓
┌────────────────────┐
│ Home Assistant │
│ (Smart Home) │
└────────────────────┘
- EntityManager: Singleton managing entity CRUD and persistence with JSON storage
- QuixiClient: HTTP client implementing IQuixiClient for QuIXI REST API
- SyncService: Handles bidirectional sync with 30s polling and event-based updates
- NotificationService: Cross-platform notification system for state changes
- Node: Manages Ixian node lifecycle and QuIXI connection
- Config: Handles app configuration and secure storage
- Entity Configuration: Stored locally in
entities.json - Credentials: Stored in platform-specific secure storage (Keychain/KeyStore)
- Device ID: Generated on first run, persists across app launches
- All communication with QuIXI uses Ixian's post-quantum encryption
- MQTT messages encrypted by Home Assistant/MQTT broker
- Optional: Enable authentication for app lock screen
- ✅ Basic entity management (add, edit, delete)
- ✅ 4 widget types (Toggle, Sensor, Gauge, Graph)
- ✅ QuIXI HTTP client integration
- ✅ Settings page with secure storage
- ✅ Cross-platform support (Android, iOS, Windows, macOS)
- ✅ Background sync service with 30s polling
- ✅ Platform-specific notification services
- ✅ Interfaces for testability (IQuixiClient, IEntityManager, INotificationService)
- ✅ .NET 10 migration and optimization
- ✅ Multi-language support foundation
- ✅ Post-quantum encryption integration
- ⬜ Gauge widgets (circular/linear)
- ⬜ Graph widgets with historical data
- ⬜ Light brightness and color control
- ⬜ Drag-and-drop entity reordering
- ⬜ Entity grouping/folders
- ⬜ UI localization implementation
- ⬜ WebSocket/MQTT real-time updates
- ⬜ Push notifications for entity state changes
- ⬜ Automation/scene support
- ⬜ Widget customization (size, color schemes)
- ⬜ Multi-language support
- ⬜ Backup/restore configuration
- ⬜ Multi-QuIXI support (multiple homes)
- ⬜ Voice control integration
- ⬜ Dashboard layouts (grid, list, custom)
- ⬜ Advanced charting (energy monitoring, weather)
- ⬜ Camera/media entity support
- ⬜ Spixi Mini App integration
We welcome contributions from developers and smart home enthusiasts!
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Ixian Platform: https://www.ixian.io
- Ixian Documentation: https://docs.ixian.io
- QuIXI Bridge: https://github.com/ixian-platform/QuIXI
- Ixian Core: https://github.com/ixian-platform/Ixian-Core
- Home Assistant: https://www.home-assistant.io
- Issues: GitHub Issues
- Discord: Ixian Community
- Email: support@ixian.io
- Built on the Ixian Platform
- Uses .NET MAUI for cross-platform development
- Inspired by Home Assistant and Spixi
- Icons from Material Design Icons
Made with ❤️ by the Ixian Platform community