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.0.tar.gz (342.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.0-cp314-abi3-win_amd64.whl (553.2 kB view details)

Uploaded CPython 3.14+Windows x86-64

cosalette-0.4.0-cp314-abi3-musllinux_1_2_x86_64.whl (897.8 kB view details)

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

cosalette-0.4.0-cp314-abi3-musllinux_1_2_aarch64.whl (866.9 kB view details)

Uploaded CPython 3.14+musllinux: musl 1.2+ ARM64

cosalette-0.4.0-cp314-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (695.1 kB view details)

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

cosalette-0.4.0-cp314-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (698.5 kB view details)

Uploaded CPython 3.14+manylinux: glibc 2.17+ ARMv7l

cosalette-0.4.0-cp314-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (691.2 kB view details)

Uploaded CPython 3.14+manylinux: glibc 2.17+ ARM64

cosalette-0.4.0-cp314-abi3-macosx_11_0_arm64.whl (658.1 kB view details)

Uploaded CPython 3.14+macOS 11.0+ ARM64

cosalette-0.4.0-cp314-abi3-macosx_10_12_x86_64.whl (660.2 kB view details)

Uploaded CPython 3.14+macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: cosalette-0.4.0.tar.gz
  • Upload date:
  • Size: 342.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.0.tar.gz
Algorithm Hash digest
SHA256 f96a958f2550740cbf53752591bc0db06ef5ddbccfe746407fe515991b80ec2e
MD5 770b984ada7e7613cfcbfd5c6389a84d
BLAKE2b-256 0e5670eaed1a69bca818d227d5dec5b19e42eaa07374dc4de459377162a70f04

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: cosalette-0.4.0-cp314-abi3-win_amd64.whl
  • Upload date:
  • Size: 553.2 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.0-cp314-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 542ae5daa06b1ffd1074a11ffbfd10bf4c64bf285ed5b3fce2002588eab1a928
MD5 8e956a544904102fd5d938dda4c964fe
BLAKE2b-256 46f839d159b3790efa42d91e5c721d0608e7cda6e7cc82aebdb3d46153ec91d4

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for cosalette-0.4.0-cp314-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 4e253de227ab547d8eea93029c355875421506d023e239443742f6cfb278989b
MD5 9a1e7e1f278e27955c45f265626b3639
BLAKE2b-256 6b6155115a5b2e0c1a91be4543a874c2c9cb6f8b3d9e86b9e5c1cc62430e209d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for cosalette-0.4.0-cp314-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 38893d29204c510127b7fa7cf27383613e8b1e7720049f796fb54730a99ae7bb
MD5 9733fc57f7a2958a9310e88f0ca639e0
BLAKE2b-256 1bd0d6193b3949ef0999e87e4562f44bd03df06d9fda4b99e063b77892a18b25

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for cosalette-0.4.0-cp314-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c4f97548a5df54f3e6cbfcd6254c7af95e6482e6768bc26bd26dea4c7e4675e1
MD5 eeb35909edb73d0722411cb3cad587df
BLAKE2b-256 e37b3fb541b5cac8f8c1274574d8a2ea1790e03dbb880dfeadb0d0a9e20f330d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for cosalette-0.4.0-cp314-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 f299992de72cc44f2eca4c769cfa568104839dff01fd388f883b78dfc62d5c43
MD5 7d47b3bfc28badf551b27d968d0f9c23
BLAKE2b-256 2cacb0605cbb3e24137041c5fa6299c32a653d1e81f2bd1b6837b2bbebfade34

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for cosalette-0.4.0-cp314-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 6d750bd148f73ddfc3fcca0075fd8ae78ac76b96d3ba78f4ee1b60515a90df7a
MD5 235d09c1ed162310d5bae29ce5c1443c
BLAKE2b-256 0a40502636e38ebc4a4b43219f31a29b746e1e9e4695921c82a91e241834494c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for cosalette-0.4.0-cp314-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 06a3c960087a838570d748282af2dfcba3ecc77469dbe1e4fc80d4cca3a63ca9
MD5 db0042e90411a01a9be1c439b386d9e2
BLAKE2b-256 d441728b40b2702fe7a405096a1ac073f2430dc3c407071cab907f8a259f540e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for cosalette-0.4.0-cp314-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 e4872914bfee261b7640c7032f4bcf2c2bf508d137f672b199df661a2e66da69
MD5 dbc15b9eaaf39a8b2eb51714b69c4b0a
BLAKE2b-256 a793eed8c4456c66e512253da1eef2ac480fbd3bca9fe43a871099b4621ef5ed

See more details on using hashes here.

Provenance

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