{"id":13990504,"url":"https://github.com/thenetcircle/dino","last_synced_at":"2026-02-20T23:41:39.169Z","repository":{"id":40960781,"uuid":"69937941","full_name":"thenetcircle/dino","owner":"thenetcircle","description":"Distributed notifications using websockets","archived":false,"fork":false,"pushed_at":"2025-06-04T08:40:08.000Z","size":69360,"stargazers_count":138,"open_issues_count":11,"forks_count":6,"subscribers_count":10,"default_branch":"master","last_synced_at":"2025-07-22T12:51:40.747Z","etag":null,"topics":["distributed-notifications","flask","notifications","socket-io"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thenetcircle.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2016-10-04T05:40:09.000Z","updated_at":"2025-06-04T08:40:04.000Z","dependencies_parsed_at":"2023-09-23T09:50:12.135Z","dependency_job_id":"698c5abe-76cb-42fa-9164-f79bb8f70d72","html_url":"https://github.com/thenetcircle/dino","commit_stats":null,"previous_names":[],"tags_count":354,"template":false,"template_full_name":null,"purl":"pkg:github/thenetcircle/dino","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thenetcircle%2Fdino","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thenetcircle%2Fdino/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thenetcircle%2Fdino/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thenetcircle%2Fdino/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thenetcircle","download_url":"https://codeload.github.com/thenetcircle/dino/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thenetcircle%2Fdino/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29667929,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-20T23:24:07.480Z","status":"ssl_error","status_checked_at":"2026-02-20T23:24:06.202Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["distributed-notifications","flask","notifications","socket-io"],"created_at":"2024-08-09T13:02:50.164Z","updated_at":"2026-02-20T23:41:39.154Z","avatar_url":"https://github.com/thenetcircle.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"# Dino\n\n[![Build Status](https://travis-ci.org/thenetcircle/dino.svg?branch=master)](https://travis-ci.org/thenetcircle/dino)\n[![coverage](https://codecov.io/gh/thenetcircle/dino/branch/master/graph/badge.svg)](https://codecov.io/gh/thenetcircle/dino)\n[![Code Climate](https://codeclimate.com/github/thenetcircle/dino/badges/gpa.svg)](https://codeclimate.com/github/thenetcircle/dino)\n[![License](https://img.shields.io/github/license/thenetcircle/dino.svg)](LICENSE)\n\nDino is a distributed notification service intended to push events to groups of clients. Example use cases are chat \nserver, real-time notifications for websites, push notifications for mobile apps, multi-player browser games, and more. \nDino is un-opinionated and any kind of events can be sent, meaning Dino only acts as the router of events between \nclients.\n\nAny number of nodes can be started on different machines or same machine on different port. Flask will handle connection\n routing using either Redis or RabbitMQ as a message queue internally. An nginx reverse proxy needs to sit in-front of\n all these nodes with sticky sessions (`ip_hash`). Fail-over can be configured in nginx for high availability.\n\nDocumentation is hosed on [GitHub Pages](https://thenetcircle.github.io/dino/).\n\n[![Dino Architecture](https://raw.githubusercontent.com/thenetcircle/dino/master/docs/dino-arch.png)](https://raw.githubusercontent.com/thenetcircle/dino/master/docs/dino-arch.svg)\n\n## Monitoring\n\nLoads of metrics is by default being collected by Dino and sent to `statsd`. To enable `statsd` monitoring, configure the `statsd` block in `dino.yaml` to [point to your `statsd` instance](https://thenetcircle.github.io/dino/md/installation/#monitoring):\n\n[![Dino Grafana](https://raw.githubusercontent.com/thenetcircle/dino/master/docs/dino-grafana.png)](https://raw.githubusercontent.com/thenetcircle/dino/master/docs/dino-grafana.png)\n\n## Future features\n\n* The socket.io flask cluster only acts as the router of events,\n* Flask nodes sends events to kafka cluster,\n* Kafka cluster enriches streams with a timestamp and sequence id,\n* Flask nodes subscribe on certain streams, such as events to be broadcasted (e.g. messages in a chat room),\n* For other streams such as updating acls, managing rooms, user info, another application will subscribe and store maybe in a relational db,\n* An application will subscribe to the e.g. message streams to store data in cassandra.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthenetcircle%2Fdino","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthenetcircle%2Fdino","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthenetcircle%2Fdino/lists"}