{"id":15674957,"url":"https://github.com/mamena2020/zomie-app","last_synced_at":"2026-02-25T22:31:58.793Z","repository":{"id":175600834,"uuid":"567202012","full_name":"Mamena2020/zomie-app","owner":"Mamena2020","description":"Online meeting app like Google meet, build with Flutter for all platforms. using WebRTC for media real-time communication, socket.io for signaling \u0026 messaging, \u0026 Server on Nodejs with SFU architecture","archived":false,"fork":false,"pushed_at":"2023-02-19T11:32:46.000Z","size":5337,"stargazers_count":35,"open_issues_count":0,"forks_count":9,"subscribers_count":3,"default_branch":"1peer","last_synced_at":"2025-05-06T21:49:29.464Z","etag":null,"topics":["android","chat","chat-application","flutter","google-meet","google-meet-clone","livestream","meet","meeting-application","nodejs","nodejs-server","realtime","rtp","screensharing","socket-io","videocall","webrtc","zoom","zoom-clone"],"latest_commit_sha":null,"homepage":"","language":"Dart","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/Mamena2020.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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":"2022-11-17T09:40:56.000Z","updated_at":"2025-04-19T22:48:04.000Z","dependencies_parsed_at":null,"dependency_job_id":"5dcb2207-c33e-4dcf-ba02-d8458dc0aa59","html_url":"https://github.com/Mamena2020/zomie-app","commit_stats":null,"previous_names":["mamena2020/zomie-app"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/Mamena2020/zomie-app","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mamena2020%2Fzomie-app","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mamena2020%2Fzomie-app/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mamena2020%2Fzomie-app/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mamena2020%2Fzomie-app/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Mamena2020","download_url":"https://codeload.github.com/Mamena2020/zomie-app/tar.gz/refs/heads/1peer","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mamena2020%2Fzomie-app/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29843419,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-25T21:18:31.832Z","status":"ssl_error","status_checked_at":"2026-02-25T21:18:29.265Z","response_time":61,"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":["android","chat","chat-application","flutter","google-meet","google-meet-clone","livestream","meet","meeting-application","nodejs","nodejs-server","realtime","rtp","screensharing","socket-io","videocall","webrtc","zoom","zoom-clone"],"created_at":"2024-10-03T15:53:45.853Z","updated_at":"2026-02-25T22:31:58.775Z","avatar_url":"https://github.com/Mamena2020.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"# zomie\n:heavy_exclamation_mark: the project continues on branch 1peer :heavy_exclamation_mark:\n\nOnline meeting app like google meet, build with flutter for all platforms.\nthis app uses \u003ca href=\"https://webrtc.org\"\u003eWebRTC\u003c/a\u003e for media real-time communication, and \u003ca href=\"https://socket.io\"\u003esocket.io\u003c/a\u003e for signaling \u0026 messaging.\n\u003ca href=\"https://github.com/Mamena2020/zomie-server\"\u003e Server\u003ca\u003e running on nodejs with SFU architecture which features the following data transmission processes between the media server and the endpoints (client).\n\nThis app also using TURN Server as relays media, work as a backup plan if STUN Server won't work because client device behind of symmetric NAT. TURN server is already end-to-end encrypted by the peers and the TURN Server cannot decode/read the encrypted packet, it just relays the packet to other peers. By default TURN already setup in file (lib/Services/WebRTC/Config/WRTCConfig.dart)\nusing free TURN Servers from \u003ca href=\"https://www.metered.ca/tools/openrelay/\"\u003eOPEN RELAY\u003c/a\u003e.\nbut you can add your own Turn server using \u003ca href=\"https://github.com/Mamena2020/zomie-turn-server\"\u003eZomie TURN Server \u003c/a\u003e as relays media.\n\n\n- Features\n  - No account needed\n  - Create Room \n     - life time (default 1 minute)\n       - after life time \u0026 if there is no one in room, then room will destroy itself\n     - password (optional)\n  - Lobby\n     - preparing for meeting\n       - permission for microphone \u0026 camera\n       - enter password (if required)\n       - change user name\n     - join room  \n  - Room meeting\n     - video \u0026 audio communication\n        - muted/unmuted microphone\n        - turn on/off camera\n     - chat room\n     - Screen share \n     - Pined layout\n  - Settings\n     - Bitrate\n        - control video/screen bitrate in the room\n     - Room Password \n        - allow/not \n     - Room life time\n        - room life time after created  \n  \n- Tested platform status\n  - :heavy_check_mark: Android (tested)\n  - :heavy_check_mark: Web (tested)\n  - :heavy_check_mark: Windows (tested)\n     - :heavy_exclamation_mark: Screen share (not working yet) \n     - :heavy_exclamation_mark: WebCam light still on when camera turn off \n  - :heavy_exclamation_mark: Ios (not tested yet)\n  - :heavy_exclamation_mark: Linux (not tested yet)\n  - :heavy_exclamation_mark: Mac (not tested yet)\n  \n#SS Apps\n\n- Desktop-windows\n\u003cimg src=\"ss/ss-home-desktop.PNG\" width=\"380\"\u003e\n\n- Mobile-Android\n\u003cimg src=\"ss/ss-lobby-android.PNG\" height=\"320\"\u003e\n\n- Web browser\n\u003cimg src=\"ss/ss-lobby-web-desktop.png\" width=\"900\"\u003e\n\u003cimg src=\"ss/ss-room-web-desktop.png\" width=\"900\"\u003e\n\u003cimg src=\"ss/ss-room-web-mobile.jpeg\" height=\"700\"\u003e\n\n\n#How to use\n- create dotenv file\n   - cmd: cp dotenv.example dotenv\n   - fill in credentials, you can ignore (TURN_SERVER_HOST, TURN_SERVER_USERNAME, TURN_SERVER_PASSWORD), because by default its already setup, but its okay if you want to add more your own TURN server.\n     ```\n      MEDIA_SERVER_HOST = \"localhost:5000\"\n\n      ALLOW_TURN_SERVER = \"false\" \n      TURN_SERVER_HOST = \"turn:ip:port\" #example: \"turn:192.168.1.9:3478\"\n      TURN_SERVER_USERNAME = \"\"    #exampe: \"zomie\"\n      TURN_SERVER_PASSWORD = \"\" #example: \"password\"\n\n     ```\n\n- android config\n   - change \"applicationId\" \n     - dir: (android/app/build.gradle) \n     ```\n      defaultConfig {\n        // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).\n        applicationId \"com.example.zomie_app\"\n     ```\n- build\n   - web\n      - canvas kit: flutter build web --web-renderer canvaskit --release\n      - html render: flutter build web --web-renderer html --release\n   - android (APK)\n      - flutter build apk --release             \n   - desktop windows\n      - flutter build windows\n- run debug\n   - web\n      - flutter run -d chrome\n   - android\n      - flutter run -d android\n   - desktop\n      - flutter run -d windows\n\n#Flutter info\n\n- build with version.\n  - Flutter 3.3.4, dart 2.18.2\n- Android \n  - targetSdk\n    ```\n      compileSdkVersion 33\n      minSdkVersion 23\n      targetSdkVersion 33\n    ```\n\n# Note\n\n- WebRTC\n  - Support Platform\n     - All Platform\n  - STUNT/TURN server\n     - STUNT:  \"urls\": \"stun:stun.stunprotocol.org\"\n        - Stunt will not working if client is under symmetric NAT. \n     - TURN: by default TURN server using from \u003ca href=\"https://www.metered.ca/tools/openrelay\"\u003eOpen Relay\u003c/a\u003e, or you can add more using \u003ca href=\"https://github.com/Mamena2020/zomie-turn-server\"\u003eZomie TURN Server \u003c/a\u003e\n\n\n- Socket io  \n  - Platform\n    - All Platform\n  - version match info [1]\n    ```\n      - server(nodejs): \"socket.io\": \"^2.4.1\"\n      - client(flutter):  socket_io_client: ^1.0.1 | ^1.0.2\n    ```\n  - version match info [2]\n    ```\n      - server(nodejs): \"socket.io\": \"^4.5.3\"\n      - client(flutter):  socket_io_client: ^2.0.0\n    ```\n\n  \n \n\n\n# References\n\n- Socket Io\n  - Issues\n    - https://stackoverflow.com/questions/68058896/latest-version-of-socket-io-nodejs-is-not-connecting-to-flutter-applications\n\n- WebRTC \n  - Articles | Doc\n    - https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia\n    - https://bloggeek.me/webrtc-vs-zoom-video-quality/\n    - https://bloggeek.me/webrtcglossary/rtp/\n    - https://webrtchacks.com/zoom-avoids-using-webrtc/\n    - https://stackoverflow.com/questions/56944864/can-we-remove-and-add-audio-stream-dynamically-in-webrtc-video-call-without-rene\n    - https://stackoverflow.com/questions/64012898/how-to-completely-turn-off-camera-on-mediastream-javascript\n    - bandwidth\n       - https://webrtc.github.io/samples/src/content/peerconnection/bandwidth/\n       - https://stackoverflow.com/questions/57653899/how-to-increase-the-bitrate-of-webrtc\n       - https://webrtchacks.com/limit-webrtc-bandwidth-sdp/\n       - https://stackoverflow.com/questions/16712224/how-to-control-bandwidth-in-webrtc-video-call\n  - Issues\n    - https://github.com/flutter-webrtc/flutter-webrtc/issues/938 windows rtc\n    - https://github.com/flutter-webrtc/flutter-webrtc/issues/436 close conection\n    - media stream, muted, stop camera\n       - https://stackoverflow.com/questions/63666576/how-restart-a-closed-video-track-stopped-using-userstream-getvideotracks0\n       - https://stackoverflow.com/questions/57563002/do-cloned-streams-from-mediastreamdestination-are-still-somehow-bound-to-this-au\n       - https://stackoverflow.com/questions/72857922/replace-webrtc-track-of-different-kind-without-renegotiations\n       - https://stackoverflow.com/questions/41309682/check-if-selected-microphone-is-muted-or-not-with-web-audio-api/41309852#41309852\n       - https://stackoverflow.com/questions/56944864/can-we-remove-and-add-audio-stream-dynamically-in-webrtc-video-call-without-rene\n       - https://stackoverflow.com/questions/39831238/webrtc-how-to-change-the-audio-track-for-a-existing-stream\n       - https://stackoverflow.com/questions/64012898/how-to-completely-turn-off-camera-on-mediastream-javascript\n      \n- Flutter Code \n  - App Life Cycle \n    - https://www.reddit.com/r/FlutterDev/comments/l7wqb2/flutter_tutorial_detect_app_background_app_closed/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmamena2020%2Fzomie-app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmamena2020%2Fzomie-app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmamena2020%2Fzomie-app/lists"}