{"id":19239715,"url":"https://github.com/i365dev/free4chat","last_synced_at":"2026-02-14T19:01:15.350Z","repository":{"id":39590441,"uuid":"423101191","full_name":"i365dev/free4chat","owner":"i365dev","description":"free4.chat is a real-time audio chat service.  It is designed by the local first and privacy first principle, and is very easy to use.","archived":false,"fork":false,"pushed_at":"2025-02-20T08:50:16.000Z","size":1214,"stargazers_count":1076,"open_issues_count":15,"forks_count":140,"subscribers_count":7,"default_branch":"elixir","last_synced_at":"2026-01-13T20:29:41.695Z","etag":null,"topics":["distributed-systems","elixir","erlang-otp","games","nextjs","p2p","phoenix","react","real-time-collaboration","real-time-communication","real-time-web","realtime-web","realtime-web-application","robot","rxjs","sfu","tailwindcss","voice-chat","webrtc","websocket"],"latest_commit_sha":null,"homepage":"https://www.i365.tech/","language":"Elixir","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/i365dev.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":"2021-10-31T09:13:12.000Z","updated_at":"2026-01-10T14:36:36.000Z","dependencies_parsed_at":"2024-05-10T16:42:47.967Z","dependency_job_id":"265fb77a-1eaf-4f8c-825f-00d5863a33a5","html_url":"https://github.com/i365dev/free4chat","commit_stats":{"total_commits":206,"total_committers":1,"mean_commits":206.0,"dds":0.0,"last_synced_commit":"68b3ef007beb53a733e00a8232c14942a1a323f2"},"previous_names":["i365dev/free4chat","madawei2699/free4chat"],"tags_count":21,"template":false,"template_full_name":null,"purl":"pkg:github/i365dev/free4chat","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/i365dev%2Ffree4chat","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/i365dev%2Ffree4chat/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/i365dev%2Ffree4chat/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/i365dev%2Ffree4chat/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/i365dev","download_url":"https://codeload.github.com/i365dev/free4chat/tar.gz/refs/heads/elixir","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/i365dev%2Ffree4chat/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29452585,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-14T15:52:44.973Z","status":"ssl_error","status_checked_at":"2026-02-14T15:52:11.208Z","response_time":53,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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-systems","elixir","erlang-otp","games","nextjs","p2p","phoenix","react","real-time-collaboration","real-time-communication","real-time-web","realtime-web","realtime-web-application","robot","rxjs","sfu","tailwindcss","voice-chat","webrtc","websocket"],"created_at":"2024-11-09T17:00:45.062Z","updated_at":"2026-02-14T19:01:15.345Z","avatar_url":"https://github.com/i365dev.png","language":"Elixir","readme":"# free4chat\n\n[free4.chat](https://free4.chat/) is a __real-time__ audio chat service. It is designed by the [local first](https://www.inkandswitch.com/local-first/) and `privacy first` principle, and is very easy to use.\n \n\u003e :warning: **This project is just using for technical test purpose, use at all your risk!**\n\u003e\n\u003e :warning: **There is freedom of speech, but I cannot guarantee freedom after speech.** (- Idi Amin)\n\n## Features\n\n- **Real-time Communicating**\n  - [x] Voice chat in room\n  - [x] Text chat in room, can sent text or emoji\n    - [ ] Persist text messages to browser localStorage\n  - [ ] Can send arbitrary data by WebRTC datachannel 🚩\n    - https://github.com/elixir-webrtc/ex_webrtc \n  - [ ] Room permission setting, like public/private type setting\n    - private room can't been seen on room discovery, and it needs password to enter. The password is [End-to-End Encryption](https://blog.excalidraw.com/end-to-end-encryption/), server only need check the answer which given by the client like the `PoW` in blockchain.\n    - [ ] Public rooms discovery, like hot room list or filter rooms by type/tag\n- **Real-time Collaborating**  \n  - [ ] User real-time collaboration, like whiteboard, you draw I guess, etc.\n    - [ ] Use [CRDT](https://crdt.tech/) to impelement real-time collaboration\n      - https://github.com/derekkraan/delta_crdt_ex\n      - https://github.com/electric-sql/vaxine\n      - https://github.com/liveblocks/liveblocks\n      - https://github.com/yjs/yjs\n    - [ ] Whiteboard\n      - https://github.com/tldraw/tldraw\n- **Real-time Contesting**\n  - [ ] AI Robot user, like game robot who can play or facilitate game\n    - robot use [Web Speech API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Speech_API) to play with user in room\n      - Azure [Text to speech](https://azure.microsoft.com/en-us/products/cognitive-services/text-to-speech/#overview) service.\n    - robot can play some voice games like language learning, technical interview, etc.\n      - [Gartic Phone - The Telephone Game](https://garticphone.com/lobby)\n      - [ESL Game - Not only practicing English speaking](https://esl.bmpi.dev/)\n      - [Gartic.io - Draw, Guess, WIN](https://gartic.io/)\n      - [Get to know someone in 17 seconds](https://github.com/caydennn/seventeen-web-app)\n    - AI + Voice\n      - Deep learning models are changing the world\n        - [@midjourney](https://twitter.com/midjourney) can generate fatastic image from text\n        - [@GitHubCopilot](https://twitter.com/GitHubCopilot) can generate context-awared code from short code segment\n        - [@OpenAI](https://twitter.com/OpenAI) GPT-3 model can generate text paragraph from short sentence segment\n      - Voice conversation from text?\n\n## Architecture\n\n- **Common**\n  - [x] Use [WebSocket](https://developer.mozilla.org/en-US/docs/Web/API/WebSocket) to replace http protocol of JSON-RPC\n  - Compatibility\n    - [ ] Make Safari(WebKit) compatibility better\n\n- **Tech Stack**\n  - [x] Use Elixir/Phoenix to rewrite the backend code\n  - [x] Use Recat/Next.js to rewrite the frontend code\n\n- **Infra**\n  - [x] ~~Use docker to deploy to PaaS platform like [Railway](https://railway.app/) or [Fly](https://fly.io/)~~ \n  - [x] Use GitHub Actions + AWS Lightsail to deploy backend server\n  - [x] Backend service cluster, auto scaling, load balancing, etc.\n    - Backend service use Elixir libcluster to build cluster\n    - Frontend app use the client load balance strategy\n    - [x] [TURN cluster scale](https://github.com/membraneframework/membrane_ice_plugin/issues/20)\n      - Fix by start turn before the libcluster, still wait the upstream library to fix it normally\n    - [ ] Room process rebalance, that means if the node where room in is offline, then the room process can rebalance to another node, the rebalance can use [Consistent hashing](https://en.wikipedia.org/wiki/Consistent_hashing) to implement\n      - For now, we just ignore this issue, because it can be resolved by reconnect another node and create the room again\n      - Some Elixir simple approaches\n        - [Swarm](https://github.com/bitwalker/swarm)\n        - [Horde](https://github.com/derekkraan/horde)\n      - A complex approach is use [Riak Core](https://github.com/basho/riak_core) which implement the `Consistent hashing` and can rebalance the process by [VNode](https://www.erlang-factory.com/upload/presentations/294/MasterlessDistributedComputingwithRiakCore-RKlophaus.pdf)\n        - [NkDIST](https://github.com/NetComposer/nkdist), a Erlang distributed registration and load balancing lib which is base on `Riak Core`\n      - [Tinode chat](https://github.com/tinode/chat) solve this issue by implementing the [Raft Consensus Algorithm](https://raft.github.io/)\n        \u003cdetails\u003e\n        \u003csummary\u003eMore\u003c/summary\u003e\n\n          - https://github.com/tinode/chat/issues/28\n          - https://github.com/tinode/chat/issues/279\n          - https://github.com/tinode/chat/blob/master/server/topic_proxy.go\n          - https://github.com/tinode/chat/blob/master/server/cluster.go\n          - https://github.com/tinode/chat/blob/master/server/cluster_leader.go\n          - https://github.com/tinode/chat/blob/master/server/ringhash/ringhash.go\n        \u003c/details\u003e\n  - [ ] Security enhancement, like coturn TLS setup, end-to-end encryption, etc.\n    - [ ] TURN enable TLS\n  - [ ] Privacy enhancement.\n  - [ ] IPV6 support.\n  \n## Documentation\n\nhttps://dev-notes.free4.chat/\n\n## Contribution\n\nIf you are interested in `webRTC`, `peer-to-peer(P2P)`, `real-time collaboration(CRDT)`, `distributed system` or `robot design`, you can join this project and contact with me by [twitter](https://twitter.com/madawei2699).\n\n## Thanks\n\n- free4.chat Elixir version is build on the top of [Membrane Framework](https://github.com/membraneframework), thanks for their heart of open source.\n- [free4.chat Golang version](https://github.com/madawei2699/free4chat/tree/golang) is build on the top of [Kraken](https://github.com/bmpi-dev/kraken), [Mornin](https://github.com/lyricat/mornin.fm), [coturn](https://github.com/coturn/coturn) and [Pion](https://github.com/pion), thanks for their heart of open source.\n- These websites also inspired me:\n  - [Random voice and text chat rooms that you’ll love. | Speakrandom](https://www.speakrandom.com/)\n  - [Practice Speaking English Online Free - Language Practice Community](https://www.free4talk.com/)\n  - [Agora Real-Time Voice and Video Engagement](https://www.agora.io/en/)\n  - [An open network for secure, decentralized communication - Matrix](https://matrix.org/)\n  - [Introduction to Realtime Web Applications](https://realtime-apps-iap.github.io/)\n  - [Gather | Building better teams, bit by bit](https://www.gather.town/)\n\n ---\n\n## About the Author\n\nThis project is maintained by the creator of **MyInvestPilot** —\na systematic investment assistance platform focused on\nrule-based, long-term investing and transparent strategy research.\n\n🔗 https://www.myinvestpilot.com\n","funding_links":[],"categories":["Elixir"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fi365dev%2Ffree4chat","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fi365dev%2Ffree4chat","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fi365dev%2Ffree4chat/lists"}