{"id":20204453,"url":"https://github.com/baines/morpheus","last_synced_at":"2026-06-08T00:31:44.454Z","repository":{"id":147754810,"uuid":"98062213","full_name":"baines/morpheus","owner":"baines","description":"IRC ↔ Matrix gateway","archived":false,"fork":false,"pushed_at":"2018-04-02T10:24:17.000Z","size":50,"stargazers_count":4,"open_issues_count":1,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-12-02T13:44:12.597Z","etag":null,"topics":["c","irc-gateway","matrix"],"latest_commit_sha":null,"homepage":null,"language":"C","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/baines.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":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-07-22T22:56:47.000Z","updated_at":"2023-05-04T20:47:42.000Z","dependencies_parsed_at":"2023-05-27T10:30:21.500Z","dependency_job_id":null,"html_url":"https://github.com/baines/morpheus","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/baines/morpheus","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/baines%2Fmorpheus","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/baines%2Fmorpheus/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/baines%2Fmorpheus/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/baines%2Fmorpheus/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/baines","download_url":"https://codeload.github.com/baines/morpheus/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/baines%2Fmorpheus/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34043822,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-07T02:00:07.652Z","response_time":124,"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":["c","irc-gateway","matrix"],"created_at":"2024-11-14T05:13:15.120Z","updated_at":"2026-06-08T00:31:44.437Z","avatar_url":"https://github.com/baines.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# What is this?\n\nMorpheus is a **Work in progress** IRC gateway to a [Matrix](https://matrix.org) server.\nIt translates between the two protocols so that you can view Matrix rooms via\nany IRC client.\n\n# Is it a bridge like appservice-irc?\n\nMatrix's appservice-irc bridges rooms on an existing Matrix server with rooms on\nan existing IRC server. With morpheus *there is no IRC server*.\nIn other words, morpheus acts as an IRCd itself, providing a view onto a Matrix\nserver through the IRC protocol\n\n# Why would I want this?\n\nThere are two main reasons:\n\n1) You have an IRC bot that you want to have on a Matrix server without changing\n   any of its code.\n2) You are connected to other IRC networks in your favourite IRC client, and\n   would rather use that than a separate program to talk on Matrix.\n\n# What works currently?\n\n* Multiple clients\n* Everything going via epoll\n* Logging in via PASS + USER\n* Joining / Parting rooms\n* Messages to channels\n\t* canonical alias is used as the IRC channel name\n* Private messages to users\n\t* transparently creates / re-uses 1:1 private rooms\n\t* works with query buffers in IRC clients\n* Message formatting\n\t* converts between IRC control codes and org.matrix.custom.html format\n* Setting room topics\n* Converting inline media to links\n* IRCv3 Capabilities\n\t* server-time for old messages\n\t* away-notify for presence updates (not fully implemented)\n* Other stuff I'm probably forgetting\n\n# What needs to be done?\n\n* Kicking / banning\n* Giving unique nicks to users from other homeservers\n\t* Sort of done, via 4-digit suffix, but not ideal.\n* TLS support on the IRC socket via mbedTLS\n\t* It may be worth leaving this to something external like stunnel.\n* Considerations for large servers like matrix.org, i.e. not flooding the nick list with inactive names.\n\t* Although presence seems broken on matrix.org...\n* Other stuff, see TODO.txt\n\n# Other caveats?\n\n* It's written in C and has not been thoroughly tested or cleaned up (yet),\nso there are probably horrendous memory corrupting, world-destroying bugs\nlurking within. Use at your own risk!\n* GNU/Linux only currently.\n\n# Usage\n\nEdit start.sh, setting `MTX_URL` and maybe `MTX_LISTEN_PORT`.\n`MTX_URL` should be a url like `https://localhost:8448` or `https://matrix.org`,\n pointing to the remote matrix server.\n`MTX_LISTEN_PORT` is the port on which the local \"IRCd\" side of morpheus will listen.\n\nNext, add a server to your IRC client. Assuming you're running morpheus on your local\ncomputer, you'd add a server of 127.0.0.1/PORT where PORT is what you set `MTX_LISTEN_PORT`\nto, or 1999 by default. Set the username and server password to your matrix userid and password.\n\nIf all goes well, you should be connected to the matrix server when you connect to morpheus.\n\n# Misc\n\nYou can change the device_id and device_name that will be sent to the matrix\nserver with the `MTX_DEVICE_ID` and `MTX_DEVICE_NAME` environment variables.\nThis is not especially useful currently, however.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbaines%2Fmorpheus","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbaines%2Fmorpheus","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbaines%2Fmorpheus/lists"}