{"id":31532647,"url":"https://github.com/mrb101/django_broadcaster","last_synced_at":"2025-10-04T03:57:21.290Z","repository":{"id":301125696,"uuid":"1008234232","full_name":"mrb101/django_broadcaster","owner":"mrb101","description":"A Django app implementing the transactional outbox pattern with CloudEvents support","archived":false,"fork":false,"pushed_at":"2025-06-30T14:28:12.000Z","size":6036,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-23T12:53:30.898Z","etag":null,"topics":["cloudevent","dispatch","django","events","outbox"],"latest_commit_sha":null,"homepage":"https://django-broadcaster.readthedocs.io/en/latest/","language":"Python","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/mrb101.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"docs/contributing.rst","funding":null,"license":"LICENSE","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,"zenodo":null}},"created_at":"2025-06-25T08:26:57.000Z","updated_at":"2025-06-30T14:28:16.000Z","dependencies_parsed_at":"2025-06-25T11:55:35.655Z","dependency_job_id":"d94f5bcc-5e4f-47ad-9d4b-288834738d90","html_url":"https://github.com/mrb101/django_broadcaster","commit_stats":null,"previous_names":["mrb101/django_dispatch","mrb101/django_broadcaster"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/mrb101/django_broadcaster","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrb101%2Fdjango_broadcaster","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrb101%2Fdjango_broadcaster/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrb101%2Fdjango_broadcaster/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrb101%2Fdjango_broadcaster/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mrb101","download_url":"https://codeload.github.com/mrb101/django_broadcaster/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrb101%2Fdjango_broadcaster/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278262444,"owners_count":25957938,"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","status":"online","status_checked_at":"2025-10-04T02:00:05.491Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["cloudevent","dispatch","django","events","outbox"],"created_at":"2025-10-04T03:57:15.765Z","updated_at":"2025-10-04T03:57:21.280Z","avatar_url":"https://github.com/mrb101.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Django Broadcaster\r\n\r\n[![PyPI version](https://badge.fury.io/py/django-broadcaster.svg)](https://badge.fury.io/py/django-broadcaster)\r\n[![Python versions](https://img.shields.io/pypi/pyversions/django-broadcaster.svg)](https://pypi.org/project/django-broadcaster/)\r\n[![Django versions](https://img.shields.io/pypi/djversions/django-broadcaster.svg)](https://pypi.org/project/django-broadcaster/)\r\n[![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)\r\n[![CI](https://github.com/mrb101/django-broadcaster/workflows/CI/badge.svg)](https://github.com/mrb101/django-outbox/actions)\r\n[![Coverage](https://codecov.io/gh/mrb101/django-outbox/branch/main/graph/badge.svg)](https://codecov.io/gh/mrb101/django-broadcaster)\r\n\r\nA Django app that implements the transactional outbox pattern with CloudEvents support, enabling reliable event publishing in distributed systems.\r\n\r\n## Features\r\n\r\n- 🔄 **Transactional Broadcaster Pattern**: Ensures events are published reliably\r\n- ☁️ **CloudEvents Compatible**: Follows CloudEvents specification\r\n- 🔌 **Multiple Backends**: Redis Streams, Kafka, NATS support\r\n- 🔁 **Retry Logic**: Exponential backoff with configurable retries\r\n- 🔑 **Idempotency**: Prevents duplicate event processing\r\n- 📊 **Monitoring**: Built-in metrics and health checks\r\n- 🎯 **Event Handlers**: Local event processing framework\r\n- 🔧 **Admin Interface**: Django admin integration\r\n\r\n## Quick Start\r\n\r\n### Installation\r\n\r\n```bash\r\n# Using pip\r\npip install django-broadcaster\r\n\r\n# Using uv\r\nuv add django-broadcaster\r\n```\r\n\r\n## Configuration\r\nAdd to your Django settings:\r\n\r\n```python\r\nINSTALLED_APPS = [\r\n    # ... your other apps\r\n    'django_broadcaster',\r\n]\r\n\r\nOUTBOX_PUBLISHERS = {\r\n    'default': {\r\n        'BACKEND': 'django_broadcaster.backends.RedisStreamBackend',\r\n        'OPTIONS': {\r\n            'host': 'localhost',\r\n            'port': 6379,\r\n            'stream_name': 'events',\r\n        }\r\n    }\r\n}\r\n```\r\n\r\n## Usage\r\n```python\r\nfrom django_broadcaster.publishers import publisher\r\n\r\n# Publish an event\r\nevent = publisher.publish_event(\r\n    event_type='user.created',\r\n    source='user-service',\r\n    data={'user_id': 123, 'email': 'user@example.com'}\r\n)\r\n\r\n# Register event handler\r\nfrom django_broadcaster.registry import event_registry\r\n\r\n@event_registry.register('user.created')\r\ndef handle_user_created(event):\r\n    print(f\"User created: {event.data}\")\r\n```\r\n## Running the Worker\r\n\r\n```bash\r\npython manage.py outbox_worker\r\n```\r\n## Documentation\r\nFull documentation is available at https://django-broadcaster.readthedocs.io/en/latest/.\r\n\r\n### Building and Serving Documentation Locally\r\n\r\nTo build the documentation locally:\r\n\r\n```bash\r\n# Build the documentation\r\nmake docs-build\r\n\r\n# Serve the documentation locally at http://localhost:8080\r\nmake docs-serve\r\n```\r\n\r\nAfter running `make docs-serve`, you can access the documentation by opening http://localhost:8080 in your web browser.\r\n\r\n## Contributing\r\nContributions are welcome! Please read our Contributing Guide for details.\r\n\r\n## License\r\nThis project is licensed under the MIT License - see the LICENSE file for details.\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmrb101%2Fdjango_broadcaster","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmrb101%2Fdjango_broadcaster","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmrb101%2Fdjango_broadcaster/lists"}