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.3.tar.gz (349.7 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.3-cp314-abi3-win_amd64.whl (558.3 kB view details)

Uploaded CPython 3.14+Windows x86-64

cosalette-0.4.3-cp314-abi3-musllinux_1_2_x86_64.whl (903.3 kB view details)

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

cosalette-0.4.3-cp314-abi3-musllinux_1_2_aarch64.whl (872.1 kB view details)

Uploaded CPython 3.14+musllinux: musl 1.2+ ARM64

cosalette-0.4.3-cp314-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (700.2 kB view details)

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

cosalette-0.4.3-cp314-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (703.7 kB view details)

Uploaded CPython 3.14+manylinux: glibc 2.17+ ARMv7l

cosalette-0.4.3-cp314-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (696.5 kB view details)

Uploaded CPython 3.14+manylinux: glibc 2.17+ ARM64

cosalette-0.4.3-cp314-abi3-macosx_11_0_arm64.whl (664.0 kB view details)

Uploaded CPython 3.14+macOS 11.0+ ARM64

cosalette-0.4.3-cp314-abi3-macosx_10_12_x86_64.whl (666.4 kB view details)

Uploaded CPython 3.14+macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: cosalette-0.4.3.tar.gz
  • Upload date:
  • Size: 349.7 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.3.tar.gz
Algorithm Hash digest
SHA256 f3e34b82415e2b03f8c61d6c78d9a03f5f61f5860115978ce6b729a71cccf21c
MD5 96ee1fe5e108eaa6d804195342afc990
BLAKE2b-256 2e1b10dbf3bca567c9b0b6828a276a2c1727d4c7f5e0604941875c064eff9b52

See more details on using hashes here.

Provenance

The following attestation bundles were made for cosalette-0.4.3.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.3-cp314-abi3-win_amd64.whl.

File metadata

  • Download URL: cosalette-0.4.3-cp314-abi3-win_amd64.whl
  • Upload date:
  • Size: 558.3 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.3-cp314-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 d3b813759d9796f4267d6132b8784f76294d4ab880d019cf563341d1cca4f94b
MD5 02d0143713bd6e7c35b74dabf730d01a
BLAKE2b-256 0ac53a4d6a26a5c23c5aa347e46b8b245b8fd1b73a843535b71e96264bd339b6

See more details on using hashes here.

Provenance

The following attestation bundles were made for cosalette-0.4.3-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.3-cp314-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for cosalette-0.4.3-cp314-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 ac4060911c33c8d76b4a50ecbf819f2b0e2f8046887d33601ca2cfa653659fcc
MD5 4dbe612d2038244c77841767df57a08f
BLAKE2b-256 eaa7498468e733b2c26d81360ab2f19bccf499f3befc0026c9256aa234f09475

See more details on using hashes here.

Provenance

The following attestation bundles were made for cosalette-0.4.3-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.3-cp314-abi3-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for cosalette-0.4.3-cp314-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 0d8581e99f2ab02b28c125f1f1bb3d8277177c977ebd099c01461958de4f1679
MD5 9c9deb63a1c42626e9769c4a8dce2473
BLAKE2b-256 ac252e49bf38d2129cfb9e11161307da87e8971f001c50b2047bb2c9f7176d66

See more details on using hashes here.

Provenance

The following attestation bundles were made for cosalette-0.4.3-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.3-cp314-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cosalette-0.4.3-cp314-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 aec0489afcf9b7f8bdb27d19f16100c93dc69464b2a3f8432662105a87f17611
MD5 d312197fc5cbed0180614c03817acd0d
BLAKE2b-256 792c1b42a414040ac44f218a881d1bdd65b1d4bac3684d672142ccf586311b07

See more details on using hashes here.

Provenance

The following attestation bundles were made for cosalette-0.4.3-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.3-cp314-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for cosalette-0.4.3-cp314-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 6f6cf089a6d03734b46c5f13bb1889ca637021e490a9f2062399aa6ba88b1357
MD5 4a3449bbf4115343760267f983177ddd
BLAKE2b-256 c8ec10a2374adefbe6a82c4effadd583ed76d0211f2ee50a7ddbc1a635a87b7d

See more details on using hashes here.

Provenance

The following attestation bundles were made for cosalette-0.4.3-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.3-cp314-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for cosalette-0.4.3-cp314-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f60d7e914e5d055de77e0cf16e62c0a4ae630e6a408c45ecdc87ad37bf7e6b2b
MD5 bb79f30f9b4d95c4829305a565f3c890
BLAKE2b-256 a4b3a24ddedb68efff71c988b17733639cea3684c3c8fcd584408221426650a0

See more details on using hashes here.

Provenance

The following attestation bundles were made for cosalette-0.4.3-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.3-cp314-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cosalette-0.4.3-cp314-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a07e3cb5fd319fb5405e29915aec94acecf0e9cea9e7f7234ab279acfa4e8bf2
MD5 d15a559371ffa164a551b53911b735e0
BLAKE2b-256 579b385f0b53fba5526ae8f276a6e641388585e94fb005303d9a939f1cde72b8

See more details on using hashes here.

Provenance

The following attestation bundles were made for cosalette-0.4.3-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.3-cp314-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for cosalette-0.4.3-cp314-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 6bcf6657185be7c4f0c3a6929c43e45dc51b59a0221472478ebe2a04fae03086
MD5 58f3b1555b3b897f05486ead7636fe51
BLAKE2b-256 3e8ca93257649deb568d66db91d1f7d734d8bb52d1b9b675637e5d98ed131bfc

See more details on using hashes here.

Provenance

The following attestation bundles were made for cosalette-0.4.3-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