{"id":31031696,"url":"https://github.com/odebe/murmur-ruby","last_synced_at":"2025-09-14T00:36:11.197Z","repository":{"id":179556269,"uuid":"658369542","full_name":"Odebe/murmur-ruby","owner":"Odebe","description":"Mumble server written in Ruby and async-io","archived":false,"fork":false,"pushed_at":"2024-02-13T18:04:07.000Z","size":171,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-02-13T19:28:11.727Z","etag":null,"topics":["asyncio","mumble","mumble-server","murmur","ruby-async","voip"],"latest_commit_sha":null,"homepage":"","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Odebe.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2023-06-25T14:47:26.000Z","updated_at":"2023-07-11T14:41:27.000Z","dependencies_parsed_at":null,"dependency_job_id":"fe42d81d-10f9-4c13-9a58-9b0fb3a02206","html_url":"https://github.com/Odebe/murmur-ruby","commit_stats":null,"previous_names":["odebe/murmur-ruby"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Odebe/murmur-ruby","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Odebe%2Fmurmur-ruby","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Odebe%2Fmurmur-ruby/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Odebe%2Fmurmur-ruby/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Odebe%2Fmurmur-ruby/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Odebe","download_url":"https://codeload.github.com/Odebe/murmur-ruby/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Odebe%2Fmurmur-ruby/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":275047902,"owners_count":25396334,"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-09-13T02:00:10.085Z","response_time":70,"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":["asyncio","mumble","mumble-server","murmur","ruby-async","voip"],"created_at":"2025-09-14T00:36:06.929Z","updated_at":"2025-09-14T00:36:11.184Z","avatar_url":"https://github.com/Odebe.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"# MurmurRuby\nMumble server implemented with Ruby and [async-io](https://github.com/socketry/async-io)/[rb_mumble_protocol](https://github.com/Odebe/rb_mumble_protocol) gems.\n\n## Installation\n### Docker compose\n* Clone repo `git clone git@github.com:Odebe/murmur-ruby.git`\n* Generate SSL cert `make generate-cert`\n* Build docker image `docker-compose build`\n* Run container `docker-compose up -d`\n\n## Roadmap\nNot all points will be implemented.\n\n- [ ] Messages\n  - [ ] TCP\n    - [x] Version\n      - [x] Save client version\n      - [ ] Send back the actual server version\n    - [x] UDPTunnel (see also 'Voice parsing')\n      - [x] Loopback\n      - [x] Channel speech\n      - [ ] Target speech\n    - [x] Authenticate\n      - [x] Credentials checking\n      - [x] Updating the server's most popular CELT codec version\n      - [x] Generating aes-128-ocb\n      - [x] Announce users about new client\n      - [x] Sync state\n    - [x] Ping\n      - [x] Send a ping back\n      - [ ] Update client timers\n    - [x] Reject\n    - [x] ServerSync\n    - [ ] ChannelRemove\n    - [x] ChannelState\n      - [x] Send all states on connection\n      - [ ] Links\n      - [ ] Description\n      - [ ] Permissions\n      - [ ] Update by Admin\n    - [x] UserRemove\n      - [x] Announce users about client disconnection\n    - [x] UserState\n      - [x] Change channel\n      - [x] Mute\\Deafen self\n    - [ ] BanList\n    - [x] TextMessage\n      - [ ] To Tree\n      - [x] To client\n      - [x] To channel\n    - [x] PermissionDenied\n    - [ ] ACL\n    - [ ] QueryUsers\n    - [x] CryptSetup\n    - [ ] ContextActionModify\n    - [ ] ContextAction\n    - [ ] UserList\n    - [ ] VoiceTarget\n    - [x] PermissionQuery\n    - [x] CodecVersion\n    - [ ] UserStats\n    - [ ] RequestBlob\n    - [x] ServerConfig\n    - [ ] SuggestConfig\n  - [ ] UDP\n    - [x] Ping\n    - [x] Voice (see also 'Voice parsing')\n    - [ ] Stable CryptState\n- [x] Voice parsing\n  - [x] OPUS\n  - [x] CELT\n  - [x] Speex\n- [ ] Basic role model\n- [ ] Traffic shaping\n  - [x] Throttling\n  - [ ] Leaky bucket\n\n## Configuration\nSee example `run/config.yml`\n\n### General configuration parameters\n#### Connection block\n```yaml\nhost: 0.0.0.0\nport: 64_738\n```\n\n#### SSL block\n##### Selfsigned cert\nRun `make generate-cert`\n\n```yaml\nssl_cert: 'run/server.cert'\nssl_key: 'run/server.key'\n\n# Optional field\nssl_ca: 'run/ca.cert'\n```\n\n##### Let's Encrypt (recommended)\n\n\n#### Server settings\n```yaml\n# Bits per second\nmax_bandwidth: 192_000\n\nwelcome_text: 'Hello world!'\nallow_html: false\nimage_message_length: 0\nmax_users: 15\nrecording_allowed: true\nmax_username_length: 20\nmessage_length: 500\n```\n\n### Channel configuration\nChannels are defined by array in `rooms` key in config file.\n\nChannel has to contain fields `id`, `name`, `parent_id` and `position`.\n\nRoot channel is mandatory and defined by `parent_id: null` nd `id: 0`.\n```yaml\nrooms:\n  - id: 0\n    name: Root\n    parent_id: null\n    position: 0\n  - id: 1\n    name: guest_room\n    parent_id: 0\n    position: 1\n  - id: 2\n    name: forum\n    parent_id: 0\n    position: 0\n```\n\n### Users configuration\nRegistered users are defined by array in `users` key in config file.\n\n```yaml\nusers:\n  - id: 0\n    username: admin\n    password: example\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fodebe%2Fmurmur-ruby","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fodebe%2Fmurmur-ruby","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fodebe%2Fmurmur-ruby/lists"}