{"id":37701783,"url":"https://github.com/GetStream/stream-chat-ruby","last_synced_at":"2026-01-23T23:00:46.451Z","repository":{"id":34883466,"uuid":"184221523","full_name":"GetStream/stream-chat-ruby","owner":"GetStream","description":"Stream Chat official Ruby API Client","archived":false,"fork":false,"pushed_at":"2026-01-15T11:52:20.000Z","size":430,"stargazers_count":32,"open_issues_count":8,"forks_count":22,"subscribers_count":27,"default_branch":"master","last_synced_at":"2026-01-15T15:46:59.931Z","etag":null,"topics":["chat","chat-api","chat-application","chat-sdk","ruby"],"latest_commit_sha":null,"homepage":"https://getstream.io/chat/","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/GetStream.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2019-04-30T08:20:16.000Z","updated_at":"2026-01-15T11:52:10.000Z","dependencies_parsed_at":"2023-01-15T09:54:44.781Z","dependency_job_id":"52ba3b21-d800-40b5-bcd0-d5de2abd979e","html_url":"https://github.com/GetStream/stream-chat-ruby","commit_stats":{"total_commits":168,"total_committers":29,"mean_commits":5.793103448275862,"dds":0.7083333333333333,"last_synced_commit":"fef11fbafb2b6c083f79f093654d71a4d9190d50"},"previous_names":[],"tags_count":65,"template":false,"template_full_name":null,"purl":"pkg:github/GetStream/stream-chat-ruby","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GetStream%2Fstream-chat-ruby","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GetStream%2Fstream-chat-ruby/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GetStream%2Fstream-chat-ruby/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GetStream%2Fstream-chat-ruby/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/GetStream","download_url":"https://codeload.github.com/GetStream/stream-chat-ruby/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GetStream%2Fstream-chat-ruby/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28702893,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-23T17:25:48.045Z","status":"ssl_error","status_checked_at":"2026-01-23T17:25:47.153Z","response_time":59,"last_error":"SSL_read: 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":["chat","chat-api","chat-application","chat-sdk","ruby"],"created_at":"2026-01-16T13:00:26.529Z","updated_at":"2026-01-23T23:00:46.440Z","avatar_url":"https://github.com/GetStream.png","language":"Ruby","readme":"# Official Ruby SDK for [Stream Chat](https://getstream.io/chat/)\n\n[![build](https://github.com/GetStream/stream-chat-ruby/workflows/build/badge.svg)](https://github.com/GetStream/stream-chat-ruby/actions) [![Gem Version](https://badge.fury.io/rb/stream-chat-ruby.svg)](http://badge.fury.io/rb/stream-chat-ruby)\n\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"./assets/logo.svg\" width=\"50%\" height=\"50%\"\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n    Official Ruby API client for Stream Chat, a service for building chat applications.\n    \u003cbr /\u003e\n    \u003ca href=\"https://getstream.io/chat/docs/\"\u003e\u003cstrong\u003eExplore the docs »\u003c/strong\u003e\u003c/a\u003e\n    \u003cbr /\u003e\n    \u003cbr /\u003e\n    \u003ca href=\"https://github.com/GetStream/rails-chat-example\"\u003eCode Samples\u003c/a\u003e\n    ·\n    \u003ca href=\"https://github.com/GetStream/stream-chat-ruby/issues\"\u003eReport Bug\u003c/a\u003e\n    ·\n    \u003ca href=\"https://github.com/GetStream/stream-chat-ruby/issues\"\u003eRequest Feature\u003c/a\u003e\n\u003c/p\u003e\n\n## 📝 About Stream\n\nYou can sign up for a Stream account at our [Get Started](https://getstream.io/chat/get_started/) page.\n\nYou can use this library to access chat API endpoints server-side.\n\nFor the client-side integrations (web and mobile) have a look at the JavaScript, iOS and Android SDK libraries ([docs](https://getstream.io/chat/)).\n\n## ⚙️ Installation\n\n[`stream-chat-ruby`](https://rubygems.org/gems/stream-chat-ruby) supports Ruby version `3.0` and greater. We test against Ruby versions `3.0`, `3.1` and `3.4`.\n\n```bash\n$ gem install stream-chat-ruby\n```\n\n## ✨ Getting started\n\n```ruby\nrequire 'stream-chat'\n\nclient = StreamChat::Client.new('STREAM_KEY', 'STREAM_SECRET')\n```\n\n\u003e 💡 Note: since v2.21.0 we implemented [Sorbet](https://sorbet.org/) type checker. As of v2.x.x we only use it for static type checks and you won't notice any difference, but from v3.0.0 **we will enable runtime checks** 🚨 🚨 🚨.\n\n\u003e What this means, is that you'll receive an error during runtime if you pass an invalid type to our methods. To prepare for that, just make sure whatever you pass in, matches the method signature (`sig { ... }`).\n\n\u003e **Update (2022-May-24)**: we have relased [v3.0.0](https://github.com/GetStream/stream-chat-ruby/releases/tag/v3.0.0) with enabled runtime checks.\n\n---\n\n\u003e Additionally, in a future major version, we would like to enforce symbol hash keys during runtime to conform to Ruby best practises. It's a good idea to prepare your application for that.\n\u003e\n\u003e ```ruby\n\u003e # Wrong:\n\u003e user = { \"user\" =\u003e { \"id\" =\u003e \"bob-1\"}}\n\u003e # Correct:\n\u003e user = { user: { id: \"bob-1\" }}\n\u003e ```\n\n### Generate a token for client-side usage:\n\n```ruby\nclient.create_token('bob-1')\n```\n\n### Create/Update users\n\n```ruby\nclient.upsert_user({\n    id: 'bob-1',\n    role: 'admin',\n    name: 'Robert Tables'\n})\n\n# Batch update is also supported\njane = {id: 'jane-1'}\njune = {id: 'june-1'}\nclient.upsert_users([jane, june])\n```\n\n### Channel types\n\n```ruby\nclient.create_channel_type({\n    name: 'livechat',\n    automod: 'disabled',\n    commands: ['ban'],\n    mutes: true\n})\n\nchannel_types = client.list_channel_types()\n```\n\n### Channels\n\n```ruby\n# Create a channel with members from the start\nchan = client.channel(\"messaging\", channel_id: \"bob-and-jane\", data: {:members =\u003e ['bob-1', 'jane-77']})\nchan.create('bob-1')\n\n# Create a channel and then add members\nchan = client.channel(\"messaging\", channel_id: \"bob-and-jane\")\nchan.create('bob-1')\nchan.add_members(['bob-1', 'jane-77'])\n```\n\n### Reactions\n\n```ruby\nchan.send_reaction(m1['id'], {type: 'like'}, 'bob-1')\n```\n\n### Moderation\n\n```ruby\nchan.add_moderators(['jane-77'])\nchan.demote_moderators(['bob-1'])\n\nchan.ban_user('bob-1', timeout: 30)\n\nchan.unban_user('bob-1')\n```\n\n### Messages\n\n```ruby\nm1 = chan.send_message({text: 'Hi Jane!'}, 'bob-1')\n\ndeleted_message = client.delete_message(m1['message']['id'])\n\n```\n\n### Reminders\n\n```ruby\n# Create a reminder for a message\nreminder = client.create_reminder(m1['message']['id'], 'bob-1', DateTime.now + 1)\n\n# Create a reminder without a notification time (just mark for later)\nreminder = client.create_reminder(m1['message']['id'], 'bob-1')\n\n# Update a reminder\nupdated_reminder = client.update_reminder(m1['message']['id'], 'bob-1', DateTime.now + 2)\n\n# Delete a reminder\nclient.delete_reminder(m1['message']['id'], 'bob-1')\n\n# Query reminders for a user\nreminders = client.query_reminders('bob-1')\n\n# Query reminders with filters\nfilter = { 'channel_cid' =\u003e 'messaging:bob-and-jane' }\nreminders = client.query_reminders('bob-1', filter)\n```\n\n### Devices\n\n```ruby\njane_phone = client.add_device({:id =\u003e 'iOS Device Token', :push_provider =\u003e push_provider.apn, :user_id =\u003e 'jane-77'})\n\nclient.get_devices('jane-77')\n\nclient.remove_device(jane_phone['id'], jane_phone['user_id'])\n```\n\n### Blocklists\n\n```ruby\nclient.create_blocklist('my_blocker', %w[fudge cream sugar])\n\n# Enable it on 'messaging' channel type\nclient.update_channel_type('messaging', blocklist: 'my_blocker', blocklist_behavior: 'block')\n\nclient.get_blocklist('my_blocker')\n\nclient.delete_blocklist('my_blocker')\n```\n\n### Export Channels\n\n```ruby\n# Register an export\nresponse = client.export_channels({type: 'messaging', id: 'jane'})\n\n# Check completion\nstatus_response = client.get_export_channel_status(response['task_id'])\n# status_response['status'] == 'pending', 'completed'\n```\n\n### Rate limits\n\n```ruby\n# Get all rate limits\nlimits = client.get_rate_limits\n\n# Get rate limits for specific platform(s)\nlimits = client.get_rate_limits(server_side: true)\n\n# Get rate limits for specific platforms and endpoints\nlimits = client.get_rate_limits(android: true, ios: true, endpoints: ['QueryChannels', 'SendMessage'])\n```\n\n## ✍️ Contributing\n\nWe welcome code changes that improve this library or fix a problem, please make sure to follow all best practices and add tests if applicable before submitting a Pull Request on Github. We are very happy to merge your code in the official repository. Make sure to sign our [Contributor License Agreement (CLA)](https://docs.google.com/forms/d/e/1FAIpQLScFKsKkAJI7mhCr7K9rEIOpqIDThrWxuvxnwUq2XkHyG154vQ/viewform) first. See our [license file](./LICENSE) for more details.\n\nHead over to [CONTRIBUTING.md](./CONTRIBUTING.md) for some development tips.\n\n## 🧑‍💻 We are hiring!\n\nWe've recently closed a [$38 million Series B funding round](https://techcrunch.com/2021/03/04/stream-raises-38m-as-its-chat-and-activity-feed-apis-power-communications-for-1b-users/) and we keep actively growing.\nOur APIs are used by more than a billion end-users, and you'll have a chance to make a huge impact on the product within a team of the strongest engineers all over the world.\n\nCheck out our current openings and apply via [Stream's website](https://getstream.io/team/#jobs).\n","funding_links":[],"categories":["Official SDKs \u0026 Tutorials"],"sub_categories":["Backend SDKs"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FGetStream%2Fstream-chat-ruby","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FGetStream%2Fstream-chat-ruby","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FGetStream%2Fstream-chat-ruby/lists"}