{"id":16421239,"url":"https://github.com/tomvictor/iotcore","last_synced_at":"2025-11-05T04:30:31.955Z","repository":{"id":10397049,"uuid":"65613830","full_name":"tomvictor/iotcore","owner":"tomvictor","description":"MQTT Broker and IoT Capabilities written in Rust for Python, Django and FastAPI","archived":false,"fork":false,"pushed_at":"2024-08-20T11:35:52.000Z","size":28351,"stargazers_count":50,"open_issues_count":4,"forks_count":7,"subscribers_count":8,"default_branch":"main","last_synced_at":"2025-02-11T09:25:04.253Z","etag":null,"topics":["asyncio","django","django-rest-framework","fastapi","iot","mqtt","mqtt-broker","mqtt-client","python","rust","rust-lang"],"latest_commit_sha":null,"homepage":"https://tomvictor.dev/iotcore/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tomvictor.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-08-13T11:16:56.000Z","updated_at":"2025-02-07T10:39:08.000Z","dependencies_parsed_at":"2024-01-14T18:50:03.414Z","dependency_job_id":"3997d91a-7190-46ae-8d4a-22c396dddc3d","html_url":"https://github.com/tomvictor/iotcore","commit_stats":null,"previous_names":["tomvictor/iotcore","tomvictor/djangoiot"],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tomvictor%2Fiotcore","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tomvictor%2Fiotcore/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tomvictor%2Fiotcore/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tomvictor%2Fiotcore/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tomvictor","download_url":"https://codeload.github.com/tomvictor/iotcore/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239449579,"owners_count":19640535,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["asyncio","django","django-rest-framework","fastapi","iot","mqtt","mqtt-broker","mqtt-client","python","rust","rust-lang"],"created_at":"2024-10-11T07:31:26.931Z","updated_at":"2025-11-05T04:30:31.903Z","avatar_url":"https://github.com/tomvictor.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Iotcore - Python MQTT Broker and IoT Features for Django and FastAPI\n\n[![.github/workflows/CI.yml](https://github.com/tomvictor/iotcore/actions/workflows/CI.yml/badge.svg)](https://github.com/tomvictor/iotcore/actions/workflows/CI.yml)\n[![](https://img.shields.io/pypi/v/iotcore?color=%2334D058\u0026label=pypi%20package)](https://pypi.org/project/iotcore)\n[![](https://img.shields.io/pypi/pyversions/fastapi.svg?color=%2334D058)](https://pypi.org/project/iotcore)\n\n\nA Python package, written in Rust, helps to run MQTT Broker and subscribe to MQTT topics in a multithreaded manner without any extra Python dependency. The internals of the MQTT server are written in Rust using the Tokio framework. The motive of the project is to overcome the GIL limitation, provide simple-to-use MQTT broker Python projects, and bring all the concurrent features offered by Rust to Python.\n\n\n## Features\n\n* Full-fledged configurable Tokio based MQTT broker\n* No python GIL limitation\n* All Standard MQTT broker features\n* Zero extra setup required to run mqtt broker in you Django and Fastapi project\n* MQTT client, with callback support for async or non-blocking applications\n* and more\n\n## Planned Features\n\n* Device support\n* Sensor support\n* Sensor data storage\n* Django based admin pages\n* Django rest framework based APIs for managing devices and sensors\n* SSL certificates and policy management\n\n## Installation\n\n```\npip install iotcore\n```\n\nCreate a new file called mqtt.toml in your root project directory and copy pase the sample mqtt.toml from\nhttps://tomvictor.github.io/iotcore/config/\n\n\n## FastAPI setup\n\n**Broker only**\n\n```python\nfrom fastapi import FastAPI\nfrom iotcore.fastapi import iotcore_broker\n\napp = FastAPI(lifespan=iotcore_broker)\n\n\n@app.get(\"/\")\ndef read_root():\n    return {\"Hello\": \"World\"}\n\n```\n\n**Broker plus Mqtt client**\n\n```python\nfrom fastapi import FastAPI\nfrom contextlib import asynccontextmanager\nfrom iotcore import IotCore\n\niot = IotCore()\n\n\n@asynccontextmanager\nasync def lifespan(app: FastAPI):\n    iot.background_loop_forever()\n    yield\n\n\napp = FastAPI(lifespan=lifespan)\n\n\n@iot.accept(topic=\"temperature\")\ndef temperature_data(request):\n    print(f\"Temperature data : {request}\")\n\n\ndef mqtt_callback(data):\n    print(f\"iot \u003e: {data}\")\n\n\n@app.get(\"/sub\")\ndef sub():\n    iot.subscribe(\"iot\", mqtt_callback)\n    return {\"response\": \"subscribed\"}\n\n\n@app.get(\"/pub\")\ndef pub():\n    iot.publish(\"temperature\", \"{'temp': 18}\")\n    return {\"response\": \"published\"}\n\n\n@app.get(\"/\")\ndef home():\n    return {\"Hello\": \"World\"}\n\n```\n\n\n## Django Setup\n\n```python\nfrom django.http import JsonResponse\nfrom iotcore import IotCore\n\niot = IotCore()\niot.background_loop_forever()\n\n\ndef mqtt_callback(data):\n    print(f\"Django \u003e: {data}\")\n\n\ndef subscribe(request):\n    iot.subscribe(\"iot\", mqtt_callback)\n    return JsonResponse({\"response\": \"subscribed\"})\n\n\ndef publish(request):\n    iot.publish(\"iot\", \"demo\")\n    return JsonResponse({\"response\": \"published\"})\n```\n\nNow Connect to mqtt broker on localhost  \nMQTT Port : 1883\n\n## Run Example project\n\n\n**Django**\n\n```shell\npip install iotcore\npip install django\n\npython examples/django/manage.py runserver\n```\n\n**FastAPI**\n\n```shell\npip install iotcore\npip install fastapi\npip install uvicorn\n\nuvicorn examples.fastapi.main:app\n```\n\nOpen you mqtt client and use below details to connect to the broker:  \n**_Host_**: **127.0.0.1** or  **localhost**  \n**_Port_**: **1883**\n\n## Contribute\n\n- Issue Tracker: github.com/tomvictor/iotcore/issues\n- Source Code: github.com/tomvictor/iotcore\n\n## Support\n\nStar the project on GitHub :)\n\n## License\n\nThe project is licensed under the MIT license.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftomvictor%2Fiotcore","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftomvictor%2Fiotcore","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftomvictor%2Fiotcore/lists"}