Skip to content

Kirky-X/xlink

Repository files navigation

🚀 xlink

Version License Rust Version Build

Unified Multi-Channel Push SDK with End-to-End Encryption

FeaturesQuick StartDocumentationExamplesContributing


📋 Table of Contents

Click to expand

✨ Features

🎯 Core Features

  • Multi-Channel Communication - Supports LAN, WiFi, Bluetooth, Mesh, Memory, and Remote channels
  • End-to-End Encryption - X25519 key exchange with ChaCha20Poly1305 encryption
  • Group Messaging - Secure group chat with broadcast capabilities and TreeKem support
  • Stream Management - Handle large file transmission with automatic chunking and reassembly

⚡ Advanced Features

  • 🚀 Smart Channel Routing - Intelligent channel selection based on device capabilities and network conditions
  • 🔐 DoS Protection - Built-in rate limiting and abuse prevention
  • 📊 Metrics Collection - Real-time performance monitoring and diagnostics
  • 🔧 Device Discovery - mDNS and BLE-based background device discovery

💡 Communication Features

  • Heartbeat Mechanism - Maintain connection health with periodic heartbeat messages
  • Capability Detection - Automatic discovery of remote device capabilities
  • Stream Handling - Automatic chunking and reassembly for large messages (>32KB)
  • Priority Messaging - Support for high-priority message delivery

🛡️ Security Features

  • X25519 Key Exchange - Secure key agreement protocol
  • ChaCha20Poly1305 - Authenticated encryption for all messages
  • Ed25519 Signatures - Message signing and verification
  • HMAC/HKDF - Key derivation and message authentication
  • Device Migration - Export and import SDK state for device transfer

🔄 Channel Architecture

graph LR
    A[Application] --> B[UnifiedPush SDK]
    B --> C[Channel Router]
    C --> D[LAN Channel]
    C --> E[WiFi Channel]
    C --> F[Bluetooth Channel]
    C --> G[Mesh Channel]
    C --> H[Memory Channel]
    C --> I[Remote Channel]
    D --> J[Network Layer]
    E --> J
    F --> J
    G --> J
    H --> J
    I --> J
Loading

🎯 Use Cases

💼 Local Network Messaging

Perfect for office, home, or industrial environments where devices communicate over local networks without internet dependency.

use std::sync::Arc;
use xlink::channels::lan::LanChannel;
use xlink::xLink;

let lan_channel: Arc<dyn xlink::core::traits::Channel> = Arc::new(LanChannel::new());
let sdk = xLink::new(capabilities, vec![lan_channel]).await?;
sdk.start().await?;
📱 Mesh Network Communication

Ideal for ad-hoc networks, IoT deployments, and scenarios where devices form peer-to-peer mesh networks.

use std::sync::Arc;
use xlink::channels::mesh::MeshChannel;

let mesh_channel: Arc<dyn xlink::core::traits::Channel> = Arc::new(MeshChannel::new());
let sdk = xLink::new(capabilities, vec![mesh_channel]).await?;
🔒 Secure Group Chat

Enterprise-grade encrypted group messaging with TreeKem forward secrecy and efficient broadcast.

use xlink::core::types::{DeviceId, MessagePayload};

let group_manager = sdk.group_manager();
group_manager.create_group(vec![alice_id, bob_id]).await?;
group_manager.broadcast_message(group_id, payload).await?;
📹 Large File Transfer

Automatic stream handling for large files and video streams with chunking and reassembly.

use xlink::core::types::MessagePayload;

let large_data = std::fs::read("large_file.mp4")?;
sdk.send(recipient, MessagePayload::Binary(large_data)).await?;
// Automatically uses stream transmission for data > 32KB

🚀 Quick Start

Installation

🦀 Rust

[dependencies]
xlink = "0.1"

📋 Required Features

[dependencies]
xlink = { version = "0.1", features = ["full"] }

Basic Usage

🎬 5-Minute Quick Start

Step 1: Define Device Capabilities

use xlink::core::types::{
    ChannelType, DeviceCapabilities, DeviceId, DeviceType,
};
use std::collections::HashSet;

let device_id = DeviceId::new();
let capabilities = DeviceCapabilities {
    device_id,
    device_type: DeviceType::Smartphone,
    device_name: "My Phone".to_string(),
    supported_channels: HashSet::from([
        ChannelType::Lan,
        ChannelType::BluetoothLE,
    ]),
    battery_level: Some(80),
    is_charging: false,
    data_cost_sensitive: false,
};

Step 2: Create SDK Instance

use xlink::xLink;
use xlink::channels::memory::MemoryChannel;

let channel = Arc::new(MemoryChannel::new(handler, 50));
let sdk = xLink::new(capabilities, vec![channel]).await?;
sdk.start().await?;
📖 Complete Example
use std::collections::HashSet;
use std::sync::Arc;
use xlink::channels::memory::MemoryChannel;
use xlink::core::types::{
    ChannelType, DeviceCapabilities, DeviceId, DeviceType, MessagePayload,
};
use xlink::xLink;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let alice_id = DeviceId::new();
    let alice_caps = DeviceCapabilities {
        device_id: alice_id,
        device_type: DeviceType::Smartphone,
        device_name: "Alice Phone".to_string(),
        supported_channels: HashSet::from([ChannelType::Lan]),
        battery_level: Some(80),
        is_charging: false,
        data_cost_sensitive: false,
    };

    let channel = Arc::new(MemoryChannel::new(handler, 50));
    let sdk = xLink::new(alice_caps, vec![channel]).await?;
    sdk.start().await?;

    // Send a message
    let bob_id = DeviceId::new();
    sdk.send(bob_id, MessagePayload::Text("Hello!".to_string())).await?;

    sdk.stop().await;
    Ok(())
}

📚 Documentation


User Guide

Complete usage guide

API Reference

Full API documentation

Architecture

System design docs

Examples

Code examples

📖 Additional Resources


🎨 Examples

💡 Real-world Examples

📝 Example 1: Simple Chat

Basic point-to-point messaging between two devices.

File: examples/simple_chat.rs

use xlink::channels::memory::MemoryChannel;
use xlink::core::types::{ChannelType, DeviceCapabilities, MessagePayload};
use xlink::xLink;

let sdk = xLink::new(capabilities, vec![channel]).await?;
sdk.start().await?;
sdk.send(recipient, MessagePayload::Text("Hello".to_string())).await?;

👥 Example 2: Group Chat

Secure group messaging with multiple participants.

File: examples/group_chat.rs

use xlink::group::manager::GroupManager;

let group_manager = sdk.group_manager();
let group_id = group_manager.create_group(members).await?;
group_manager.broadcast_message(group_id, payload).await?;

🔄 Example 3: Channel Switching

Dynamic channel management and switching.

File: examples/channel_switching.rs

use xlink::channels::wifi::WifiChannel;
use xlink::channels::bluetooth::BluetoothChannel;

let wifi = Arc::new(WifiChannel::new());
let bluetooth = Arc::new(BluetoothChannel::new());
let sdk = xLink::new(capabilities, vec![wifi, bluetooth]).await?;

📡 Example 4: Background Discovery

Device discovery in background mode.

File: examples/background_discovery.rs

sdk.start().await?;
// Discovery runs automatically in background
// mDNS and BLE discovery are enabled by default

📱 Example 5: Device Migration

Export and import SDK state for device transfer.

File: examples/device_migration.rs

let state = sdk.export_sdk_state()?;
std::fs::write("backup.dat", &state)?;

// On new device
let data = std::fs::read("backup.dat")?;
sdk.import_sdk_state(&data)?;

📂 View All Examples →


🏗️ Architecture

System Overview

graph TB
    subgraph Application Layer
        A[Application]
    end
    
    subgraph SDK Core
        B[UnifiedPush SDK]
        C[Channel Router]
        D[Capability Manager]
        E[Metrics Collector]
    end
    
    subgraph Communication Layer
        F[LAN Channel]
        G[WiFi Channel]
        H[Bluetooth Channel]
        I[Mesh Channel]
        J[Memory Channel]
        K[Remote Channel]
    end
    
    subgraph Security Layer
        L[Crypto Engine]
        M[TreeKem]
    end
    
    subgraph Services
        N[Group Manager]
        O[Heartbeat Manager]
        P[Discovery Manager]
        Q[Stream Manager]
    end
    
    subgraph Storage Layer
        R[File Storage]
        S[Memory Storage]
        T[Distributed Storage]
    end
    
    A --> B
    B --> C
    B --> D
    B --> E
    C --> F
    C --> G
    C --> H
    C --> I
    C --> J
    C --> K
    C --> L
    C --> M
    B --> N
    B --> O
    B --> P
    B --> Q
    C --> R
    C --> S
    C --> T
Loading
📐 Component Details
Component Description Status
UnifiedPush SDK Main SDK entry point managing all components ✅ Stable
Channel Router Intelligent routing based on capabilities and network ✅ Stable
Capability Manager Device and channel capability detection and management ✅ Stable
Crypto Engine X25519 key exchange, ChaCha20Poly1305 encryption ✅ Stable
TreeKem Group key management with forward secrecy ✅ Stable
Group Manager Group creation, membership, and broadcast ✅ Stable
Heartbeat Manager Connection health monitoring ✅ Stable
Discovery Manager mDNS and BLE device discovery ✅ Stable
Stream Manager Large file chunking and reassembly ✅ Stable
Metrics Collector Performance monitoring and diagnostics ✅ Stable

⚙️ Configuration

🎛️ Configuration Options

Device Capabilities Configuration

use xlink::core::types::{ChannelType, DeviceCapabilities, DeviceType};

let capabilities = DeviceCapabilities {
    device_id: DeviceId::new(),
    device_type: DeviceType::Smartphone,
    device_name: "My Device".to_string(),
    supported_channels: HashSet::from([
        ChannelType::Lan,
        ChannelType::BluetoothLE,
        ChannelType::WiFiDirect,
    ]),
    battery_level: Some(100),
    is_charging: true,
    data_cost_sensitive: false,
};

Channel Configuration

Channel Type Description Use Case
Lan Local Area Network communication Office, home networks
WiFiDirect WiFi direct communication Wireless direct connection
BluetoothLE Bluetooth Low Energy Short-range, low power
BluetoothMesh Bluetooth Mesh networking Multi-hop mesh, IoT
Internet Cloud/Internet communication Remote messaging
Memory In-memory channel (testing) Testing, IPC
🔧 All Configuration Options
Option Type Default Description
device_id UUID Auto-generated Unique device identifier
device_type Enum Required Device type (Smartphone, Laptop, etc.)
device_name String Required Human-readable device name
supported_channels Set Required Set of supported channel types
battery_level Option None Current battery percentage
is_charging bool false Whether device is charging
data_cost_sensitive bool false Optimize for data usage

Compliance Configuration

use xlink::core::types::ComplianceConfig;

let compliance = ComplianceConfig {
    retention_days: 30,  // Keep data for 30 days
    auto_cleanup: true,  // Enable automatic cleanup
};

🧪 Testing

🎯 Test Coverage

# Run all tests
cargo test --all-features

# Run specific test categories
cargo test --test unit_core          # Unit tests
cargo test --test integration_system # Integration tests
cargo test --test integration_group  # Group messaging tests
cargo test --test integration_channels # Channel tests

# Run with coverage
cargo tarpaulin --out Html

# Run benchmarks
cargo bench

# Run specific test
cargo test test_name
📊 Test Categories
Category Description Files
Unit Tests Core functionality tests tests/unit_core.rs
Integration Tests System integration tests tests/integration_*.rs
Performance Tests Benchmark tests benches/performance.rs
DoS Protection Security tests tests/dos_protection_tests.rs
Memory Tests Memory management tests tests/test_memory_*.rs
Large File Tests Stream handling tests tests/large_file_transmission_tests.rs

📊 Performance

⚡ Benchmark Results

Message Processing

Small messages (<1KB): ~10,000 ops/sec
Medium messages (1-32KB): ~5,000 ops/sec
Large messages (>32KB): ~1,000 ops/sec (streamed)

Latency (Memory Channel)

P50: 0.5ms
P95: 1.2ms
P99: 2.5ms
📈 Detailed Benchmarks
# Run benchmarks
cargo bench

# Available benchmarks:
# - bench_message_send: Message sending performance
# - bench_channel_router: Routing decision performance
# - bench_encryption: Encryption/decryption performance
# - bench_group_broadcast: Group broadcast performance

🔒 Security

🛡️ Security Features


End-to-End Encryption
X25519 + ChaCha20Poly1305

Group Forward Secrecy
TreeKem key rotation

DoS Protection
Rate limiting (100 msg/sec)

Message Signing
Ed25519 signatures
🔐 Security Details

Cryptographic Primitives

Operation Algorithm Purpose
Key Exchange X25519 Secure key agreement
Encryption ChaCha20Poly1305 Authenticated encryption
Signatures Ed25519 Message authentication
Key Derivation HKDF-SHA256 Key material derivation
Hashing SHA-256 Integrity verification

Security Measures

  • Rate Limiting - 100 messages/second per device
  • Memory Safety - Zero-copy operations where possible
  • Session Management - Automatic session cleanup on drop
  • Device Migration - Encrypted state export/import

Reporting Security Issues

Please report security vulnerabilities to: security@example.com


🗺️ Roadmap

🎯 Development Timeline

gantt
    title xlink Roadmap
    dateFormat  YYYY-MM
    section Core Features
    Multi-Channel Support    :done, 2024-01, 2024-06
    E2E Encryption           :done, 2024-02, 2024-07
    Group Messaging          :active, 2024-05, 2024-10
    section Advanced Features
    Stream Management        :active, 2024-06, 2024-11
    Device Discovery         :done, 2024-04, 2024-09
    Performance Optimization :2024-10, 2025-02
    section Platform Support
    FFI Bindings             :2024-08, 2025-01
    Mobile Platform Support  :2025-01, 2025-06
Loading

✅ Completed

  • Core SDK architecture
  • Multi-channel support (LAN, WiFi, Bluetooth, Mesh, Memory, Remote)
  • End-to-end encryption (X25519, ChaCha20Poly1305)
  • Device discovery (mDNS, BLE)
  • Heartbeat mechanism
  • DoS protection
  • Metrics collection
  • Unit and integration tests

🚧 In Progress

  • TreeKem group key management
  • Stream optimization for large files
  • Performance benchmarks
  • FFI bindings for other languages
  • Platform-specific optimizations

📋 Planned

  • Mobile SDK (iOS, Android)
  • Cloud relay service
  • Admin dashboard
  • Enterprise features
  • Plugin system

💡 Future Ideas

  • Quantum-resistant encryption
  • [] AI-powered channel selection
  • Edge computing integration
  • Blockchain-based identity
  • Decentralized messaging

🤝 Contributing

💖 We Love Contributors!

🐛 Report Bugs

Found a bug?
Create an Issue

💡 Request Features

Have an idea?
Start a Discussion

🔧 Submit PRs

Want to contribute?
Fork & PR

📝 Contribution Guidelines

How to Contribute

  1. Fork the repository
  2. Clone your fork: git clone https://github.com/yourusername/xlink.git
  3. Create a branch: git checkout -b feature/amazing-feature
  4. Make your changes
  5. Test your changes: cargo test --all-features
  6. Commit your changes: git commit -m 'Add amazing feature'
  7. Push to branch: git push origin feature/amazing-feature
  8. Create a Pull Request

Code Style

  • Follow Rust standard coding conventions (cargo fmt)
  • Write comprehensive tests for new features
  • Update documentation for API changes
  • Add examples for new features
  • Ensure all tests pass before submitting

📄 License

This project is licensed under the MIT License.

License: MIT


🙏 Acknowledgments

Built With Amazing Tools


Rust

Tokio

GitHub

Crates.io

Special Thanks

  • 🌟 Dependencies - Built on these amazing projects:

  • 👥 Contributors - Thanks to all our amazing contributors!

  • 💬 Community - Special thanks to our community members


📞 Contact & Support


Issues

Report bugs & issues

Discussions

Ask questions & share ideas

GitHub

View source code

Stay Connected

Email


💝 Support This Project

If you find this project useful, please consider giving it a ⭐️!

Built with ❤️ by Kirky.X Kirky-X@outlook.com

⬆ Back to Top


© 2024 xlink. All rights reserved.

About

Unified multi-channel communication SDK for Rust — email, SMS, push notifications, and webhooks with end-to-end encryption, pluggable providers, and delivery guarantees

Topics

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors