About this project
# Iris
Iris is an LLM-first, source-agnostic messaging system designed to unify messages from multiple platforms—Telegram, SMS, Email, WhatsApp, Instagram, and others—into a single, queryable API. It is self-hostable, MIT-licensed, and built in Rust.
## Key Features
- **Unified Model**: Normalizes all messages into consistent `Message`, `Thread`, and `Contact` structures.
- **Source-Agnostic Queries**: Query across all sources without knowing their origin (e.g., "all unread threads").
- **LLM-First Design**: Optimized for agent consumption with MCP support, structured JSON, and capability advertisement.
- **Code Generation**: CLI, HTTP, and MCP surfaces are generated from a single API definition, ensuring consistency.
- **Self-Hostable**: No cloud dependencies; runs anywhere Rust runs.
- **Extensible**: Adding a new provider requires implementing a single trait.
## Quick Start
```bash
cargo build
cargo run -- threads
cargo run -- messages <thread-id>
cargo run -- contacts
cargo run -- serve
```
## Self-Hosting with Docker
Published images are available at `ghcr.io/techgodhq/iris:<version>` (or `:latest`). Set `IRIS_API_TOKEN` to a high-entropy secret for internet-reachable deployments; all HTTP endpoints except `GET /health` require Bearer token authentication. Without a token, the server refuses public or wildcard bind addresses.
Example:
```bash
docker run --rm \
--name iris \
--publish 127.0.0.1:9876:9876 \
--volume iris-data:/data \
--env IRIS_ENABLED_PROVIDERS=telegram \
--env IRIS_TELEGRAM_BOT_TOKEN="${IRIS_TELEGRAM_BOT_TOKEN}" \
ghcr.io/techgodhq/iris:latest
```
## Configuration
Iris supports TOML files, native environment variables, or both. Environment values override TOML, which overrides defaults. Key variables include `IRIS_ENABLED_PROVIDERS`, `IRIS_TELEGRAM_BOT_TOKEN`, and various `IRIS_EMAIL_*` settings.
Multiple instances of a provider type are supported (e.g., `email.ops-codefold`), with independent configuration and environment variable naming conventions.
## Architecture
Iris is structured as a workspace with crates:
- `iris-core`: Domain model and `MessageProvider` trait (zero I/O dependencies)
- `iris-providers`: Provider implementations (Telegram, SMS, Email, etc.)
- `iris-server`: Axum HTTP server (REST API)
- `iris-cli`: Command-line interface (clap)
- `iris-mcp`: MCP server surface
- `iris-codegen`: Code generation to keep CLI/HTTP/MCP in sync
## Adding a Provider
1. Create a module in `iris-providers/src/`.
2. Implement the `MessageProvider` trait.
3. Register it in server/CLI startup.
## Development
```bash
cargo build --all-targets
cargo test --all-targets
cargo clippy --all-targets -- -D warnings
cargo fmt --all -- --check
```
Pre-commit hooks are configured via lefthook.
## License
MIT
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.