libindigo Documentation
Welcome to the libindigo documentation. This directory contains comprehensive documentation for the libindigo Rust library for INDIGO protocol clients.
Quick Links
Documentation Structure
User Guides
Essential guides for using libindigo:
Architecture
Technical architecture and design documents:
Protocols
INDIGO protocol documentation:
Development
Development guides and processes:
Project Management
Getting Started
For Users
- Read the README for project overview
- Check BUILD.md for build instructions
- Review examples/ for usage examples
- See Client Strategies to choose implementation
For Contributors
- Read Ways of Working for GitHub workflow
- Review Roo Workflow Scheme for AI-assisted development
- Check GitHub Issues Guide for creating issues
- Follow GitHub Setup Instructions for repository setup
For Maintainers
- Review CHANGES.md for release planning
- Check plans/ for active planning documents
- Use GitHub Issues Guide to create tracking issues
- Follow Roo Workflow Scheme for coordinating work
Architecture Overview
libindigo implements a dual-strategy pattern for INDIGO client connectivity:
Pure Rust Strategy (Default)
- Zero C dependencies at runtime
- Pure Rust implementation of INDIGO protocol
- Supports both XML and JSON protocols
- Async-first design with tokio
- Cross-platform compatibility
Use when: You want zero FFI dependencies, modern async Rust, or web integration.
FFI Strategy
- Uses upstream INDIGO C library
- Full hardware driver support
- Battle-tested C implementation
- Async wrapper around synchronous FFI
Use when: You need hardware driver support or proven C implementation.
See Client Strategies for details.
Protocol Support
XML Protocol (Version 2.0)
- Traditional INDIGO protocol
- Full feature support
- BASE64 BLOB encoding
- Supported by both strategies
JSON Protocol (Version 512)
- Modern JSON-based protocol
- Better web integration
- URL-referenced BLOBs only
- Supported by Pure Rust strategy
See JSON Protocol for details.
Key Features
Implemented (v0.1.2)
- ✅ Dual strategy pattern (FFI and Pure Rust)
- ✅ XML protocol support
- ✅ JSON protocol support
- ✅ Protocol negotiation
- ✅ Async client API
- ✅ Property streaming
- ✅ BLOB support
- ✅ ZeroConf/Bonjour server discovery
- ✅ Integration test harness
Planned (v0.2.0)
- 🚧 Automated property constants generation
- 🚧 Replace hardcoded property strings
- 🚧 Documentation organization
Planned (v0.3.0)
- 📋 Trait-based device API (Camera, Mount, Focuser, etc.)
- 📋 Property wrappers
- 📋 Device-specific methods
See CHANGES.md for complete roadmap.
Testing
Unit Tests
# Core crate (strategy-agnostic)
cargo test -p libindigo --lib
# Pure Rust client
cargo test -p libindigo-rs --lib
# FFI client
cargo test -p libindigo-ffi --lib
Integration Tests
# Pure Rust client (requires INDIGO server)
cargo test -p libindigo-rs --test '*'
# FFI client (requires INDIGO server)
cargo test -p libindigo-ffi --test '*'
See Testing Guide for details.
Examples
The examples/ directory contains working examples:
discover_servers.rs - Simple server discovery
continuous_discovery.rs - Continuous monitoring
auto_connect.rs - Auto-discover and connect
discovery_with_filter.rs - Filtered discovery
Run examples:
cargo run --example discover_servers --features rs,auto
API Documentation
Generate API documentation:
cargo doc --no-deps --features rs --open
Support
- Issues: Use GitHub issue templates (see GitHub Setup Instructions)
- Discussions: Use GitHub Discussions for questions
- Documentation: Check this directory first
Contributing
We welcome contributions! Please:
- Read Ways of Working
- Follow Roo Workflow Scheme
- Use appropriate issue templates
- Write tests for new features
- Update documentation
License
This project is licensed under the MIT License. See LICENSE.md for details.
References
External Documentation
Internal Documentation
Last Updated: 2026-03-05
Version: 0.2.0