Skip to main content

an opinionated Python framework for building IoT-to-MQTT bridge applications

Project description

cosalette

cosalette — An opinionated Python framework for IoT-to-MQTT bridges

What is cosalette?

cosalette lets you build IoT-to-MQTT bridge daemons in Python with minimal boilerplate. You define devices (telemetry pollers or command handlers), register hardware adapters, and the framework handles MQTT wiring, structured logging, health reporting, error publishing, and graceful lifecycle management.

Quick Example

import cosalette

app = cosalette.App(name="sensor2mqtt", version="0.1.0")

@app.telemetry("sensor", interval=5.0)
async def sensor() -> dict[str, object]:
    return {"temperature": 21.5, "humidity": 55.0}

if __name__ == "__main__":
    app.run()

See the full Quickstart for a complete walkthrough.

Router Composition (Multi-Module Apps)

For production apps, use Router to organize devices into separate modules without circular imports:

# sensors.py
import cosalette

router = cosalette.Router(prefix="sensors")

@router.telemetry("temperature", interval=30)
async def read_temp() -> dict[str, object]:
    return {"celsius": 22.5}

# main.py
import cosalette
from sensors import router

app = cosalette.App(name="home2mqtt", version="1.0.0")
app.include_router(router)
# → publishes to: home2mqtt/sensors/temperature/state

See Router Composition for full patterns.

Typed Contracts & Schema Inspection

cosalette supports Pydantic-validated payloads and typed returns for type-safe command handlers and telemetry, plus dependency injection for shared logic:

from typing import Annotated
from pydantic import BaseModel
import cosalette

app = cosalette.App(name="thermo2mqtt", version="1.0.0")

class SetpointCommand(BaseModel):
    value: float
    unit: str = "celsius"

class ThermostatState(BaseModel):
    setpoint: float
    unit: str

def get_device_id() -> str:
    return "thermo-001"

@app.command("thermostat/set")
async def set_temp(
    cmd: Annotated[SetpointCommand, cosalette.Payload()],
    device_id: Annotated[str, cosalette.Depends(get_device_id)],
) -> ThermostatState:
    return ThermostatState(setpoint=cmd.value, unit=cmd.unit)

Inspect the contract to generate AsyncAPI docs or consumer artifacts:

cosalette manifest myapp.main:app           # JSON AsyncAPI 3.0.0
cosalette manifest myapp.main:app --table   # human-readable table

Or programmatically:

doc = app.asyncapi()  # returns dict conforming to AsyncAPI 3.0.0

See Contract-First Route Design and Schema Enforcement for full details.

Key Features

  • Declarative device registration — define telemetry and command devices with @app.telemetry(), @app.command(), and @app.device() (guide)
  • Hexagonal architecture — protocol-based ports keep hardware adapters swappable and testable (concept)
  • Lifespan + dependency injection — structured startup/teardown and type-based DI for adapters, settings, and shared state (guide)
  • Command routing — use sub-topic handlers and ctx.commands() for clean control flows (guide)
  • Flexible scheduling — combine fixed intervals, Quartz cron, and ctx.sleep_until() wall-clock timing
  • Publish strategies — emit on change, on cadence, or with composed rules (concept)
  • Health checks + auto-restart — monitor adapters and recover from wedged hardware automatically (concept)
  • Persistence — store state with JSON, SQLite, or in-memory backends plus save policies (concept)
  • Schema-aware integrations — validate payloads and generate consumer artifacts from AsyncAPI schemas (guide)
  • AI-assisted development — optional MCP tools plus packaged instructions for Copilot and other IDE-native agents (guide)

Installation

pip install cosalette

Or with uv:

uv add cosalette

To include the optional MCP server for IDE-native AI agent integration (VS Code Copilot, Cursor, Windsurf, Claude Code):

uv add 'cosalette[mcp]'
pip install 'cosalette[mcp]'

See the MCP Server guide for setup and tool reference.

Contributing

See CONTRIBUTING.md for development setup, commands, project structure, and code quality standards.

Documentation

Full documentation is published at ff-fab.github.io/cosalette. Development docs tracking the main branch are available at Dev Docs (latest).

Section What you'll find
Getting Started Installation, quickstart tutorial
Concepts Architecture, lifecycle, health checks, filters, persistence
How-To Guides Telemetry, commands, adapters, lifespan DI, schema, testing, MCP
Reference API docs, CLI options, payload schemas
ADRs Architecture Decision Records

License

MIT License. See LICENSE for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cosalette-0.4.5.tar.gz (352.8 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

cosalette-0.4.5-cp314-abi3-win_amd64.whl (561.5 kB view details)

Uploaded CPython 3.14+Windows x86-64

cosalette-0.4.5-cp314-abi3-musllinux_1_2_x86_64.whl (906.5 kB view details)

Uploaded CPython 3.14+musllinux: musl 1.2+ x86-64

cosalette-0.4.5-cp314-abi3-musllinux_1_2_aarch64.whl (875.4 kB view details)

Uploaded CPython 3.14+musllinux: musl 1.2+ ARM64

cosalette-0.4.5-cp314-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (703.4 kB view details)

Uploaded CPython 3.14+manylinux: glibc 2.17+ x86-64

cosalette-0.4.5-cp314-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (706.9 kB view details)

Uploaded CPython 3.14+manylinux: glibc 2.17+ ARMv7l

cosalette-0.4.5-cp314-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (699.7 kB view details)

Uploaded CPython 3.14+manylinux: glibc 2.17+ ARM64

cosalette-0.4.5-cp314-abi3-macosx_11_0_arm64.whl (667.2 kB view details)

Uploaded CPython 3.14+macOS 11.0+ ARM64

cosalette-0.4.5-cp314-abi3-macosx_10_12_x86_64.whl (669.7 kB view details)

Uploaded CPython 3.14+macOS 10.12+ x86-64

File details

Details for the file cosalette-0.4.5.tar.gz.

File metadata

  • Download URL: cosalette-0.4.5.tar.gz
  • Upload date:
  • Size: 352.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for cosalette-0.4.5.tar.gz
Algorithm Hash digest
SHA256 7b78963aaa00aed71cf02890625a0aadb161c8d42167505f92c31bf6dbfff2d7
MD5 68b90084ab0c9909db2b78fc048cdac9
BLAKE2b-256 996880d3f43076c9149e0d29f22d4ecf5687529d4441c439e4b398390d2af921

See more details on using hashes here.

Provenance

The following attestation bundles were made for cosalette-0.4.5.tar.gz:

Publisher: release-please.yml on ff-fab/cosalette

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cosalette-0.4.5-cp314-abi3-win_amd64.whl.

File metadata

  • Download URL: cosalette-0.4.5-cp314-abi3-win_amd64.whl
  • Upload date:
  • Size: 561.5 kB
  • Tags: CPython 3.14+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for cosalette-0.4.5-cp314-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 279d56f911a95f5b16c81e7cfcce2887802bc2694f60f535d99515bc1d81ffee
MD5 02f08db4c9de2da3b32d662c3cc374f3
BLAKE2b-256 1ef7a08aa4e48ca79d00d4799a881ceb011bd2ec4f9208fb79c8ebb41fb27743

See more details on using hashes here.

Provenance

The following attestation bundles were made for cosalette-0.4.5-cp314-abi3-win_amd64.whl:

Publisher: release-please.yml on ff-fab/cosalette

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cosalette-0.4.5-cp314-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for cosalette-0.4.5-cp314-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 cbd0b2ca8fa89acc038184c0eab7a0f2e4997d978eea4d697ad26c8f63488da2
MD5 235c6f0e4cb2bb73ec3829999ff42cff
BLAKE2b-256 008fa7d251019a4b8b7e8d2c4997b123a893730b203603ab7a6cf24ec4887e0f

See more details on using hashes here.

Provenance

The following attestation bundles were made for cosalette-0.4.5-cp314-abi3-musllinux_1_2_x86_64.whl:

Publisher: release-please.yml on ff-fab/cosalette

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cosalette-0.4.5-cp314-abi3-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for cosalette-0.4.5-cp314-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 6216a51519214dd293d97f63c8c91a190b68189c126019657ddf465bff33aa56
MD5 d27ecbb1622f3d2f629e0ba850754647
BLAKE2b-256 bb1a0bceea7f6a79142ee40700773e5b67790ad1b8d4a5ac12c07e99d02aba21

See more details on using hashes here.

Provenance

The following attestation bundles were made for cosalette-0.4.5-cp314-abi3-musllinux_1_2_aarch64.whl:

Publisher: release-please.yml on ff-fab/cosalette

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cosalette-0.4.5-cp314-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cosalette-0.4.5-cp314-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1b3783127a19d93c5b5e52e3ec2ee64f722f5cce45c2952cbe0edf4fe10ba1fb
MD5 7e2fd2cdf407b693f818f04ffefb9a1b
BLAKE2b-256 8135c435abd2e32e562a885eda83a79d02f8bc30743da17bf94a0c3d91a939d7

See more details on using hashes here.

Provenance

The following attestation bundles were made for cosalette-0.4.5-cp314-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release-please.yml on ff-fab/cosalette

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cosalette-0.4.5-cp314-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for cosalette-0.4.5-cp314-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 a1c76842da2bf0c6e94ffd71b5dafe09604997e32f8915cb17c1f34c911479e6
MD5 81c51487f3deb2a818559c7ccb7fae07
BLAKE2b-256 113ceb9ceaf03000e20e726514c57217084ab2be17a5957b40d1bd1e58e8f59b

See more details on using hashes here.

Provenance

The following attestation bundles were made for cosalette-0.4.5-cp314-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl:

Publisher: release-please.yml on ff-fab/cosalette

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cosalette-0.4.5-cp314-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for cosalette-0.4.5-cp314-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 9987adc9358431d1d1674ece827a80a5bd78e37ed8fe31cdf2042cd28d06832b
MD5 e537fa1bef5cab79fc5e7db34cb0d8ac
BLAKE2b-256 98bf09b9afecf69d093832bc9ab72c915a040feaaa1414304accd74dc81b35d9

See more details on using hashes here.

Provenance

The following attestation bundles were made for cosalette-0.4.5-cp314-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release-please.yml on ff-fab/cosalette

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cosalette-0.4.5-cp314-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cosalette-0.4.5-cp314-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 670ab6555adf2f511f943c388c269fc9132c0c658fcea3493d055983139abf08
MD5 33db58a09b510b8b0a807cc9660fad15
BLAKE2b-256 71df23626d34977e19d32aca6f64012420e8fcb71b691baf6dec42f66f011247

See more details on using hashes here.

Provenance

The following attestation bundles were made for cosalette-0.4.5-cp314-abi3-macosx_11_0_arm64.whl:

Publisher: release-please.yml on ff-fab/cosalette

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cosalette-0.4.5-cp314-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for cosalette-0.4.5-cp314-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 20004eb7815a135ee1044078ab0b0c3fcdc70ba3b55c66d04d0c561aa9be726c
MD5 d145c9378e9d1912d381c8ca3a269141
BLAKE2b-256 4f08f14637f403ac0978774e5f29fc49959ef32c62195d341e9087252f22756f

See more details on using hashes here.

Provenance

The following attestation bundles were made for cosalette-0.4.5-cp314-abi3-macosx_10_12_x86_64.whl:

Publisher: release-please.yml on ff-fab/cosalette

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page