{"id":17674982,"url":"https://github.com/malykhin/p2piper","last_synced_at":"2026-04-08T16:02:36.170Z","repository":{"id":96406539,"uuid":"350997555","full_name":"malykhin/p2piper","owner":"malykhin","description":"Application to share data between devices with WebRTC data channels.","archived":false,"fork":false,"pushed_at":"2023-04-06T09:06:57.000Z","size":643,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-06-04T10:53:04.388Z","etag":null,"topics":["nextjs","nodejs","react","socket-io","webrtc"],"latest_commit_sha":null,"homepage":"https://p2piper.com/","language":"TypeScript","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/malykhin.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,"publiccode":null,"codemeta":null}},"created_at":"2021-03-24T08:12:21.000Z","updated_at":"2023-04-06T09:06:15.000Z","dependencies_parsed_at":"2024-10-24T08:34:33.027Z","dependency_job_id":"995d4884-c738-42b7-abc2-ec161aaa4d4f","html_url":"https://github.com/malykhin/p2piper","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/malykhin/p2piper","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/malykhin%2Fp2piper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/malykhin%2Fp2piper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/malykhin%2Fp2piper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/malykhin%2Fp2piper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/malykhin","download_url":"https://codeload.github.com/malykhin/p2piper/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/malykhin%2Fp2piper/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31562697,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-08T14:31:17.711Z","status":"ssl_error","status_checked_at":"2026-04-08T14:31:17.202Z","response_time":54,"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":["nextjs","nodejs","react","socket-io","webrtc"],"created_at":"2024-10-24T07:09:31.219Z","updated_at":"2026-04-08T16:02:36.148Z","avatar_url":"https://github.com/malykhin.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# p2piper\n\nThis repository is a source code for the application https://p2piper.com. I often need to transfer some text notes or files between devices, especially from phone to pc. Solutions like cloud storage, messenger, or native application aren't always handy. However, the WEB browser can easily handle this. That is my primary motivation for the implementation. There is no registration process for using this app.\n\n# Architecture\n\nThe transport for file transfer is WebRTC data channels. The application itself is an isomorphic app built with `Nest.js` and `socket.io`. Backend service required for initializing connection between peers. To temporarily store the data and synchronize `socket.io` instances, Redis is used. The simplified schema below (networking, security groups, etc. non-present here, but you can refer `terraform` definition for those details):\n\n![Architecture diagram](./diagram.png)\n\n**Note.** Two EC2 instances in autoscaling group here are mainly used for better availability. Application Load Balancer support WS protocol; that's why it's used instead of Classic one.\n\nDeployment is organized with CodePipeline, but set up isn't a part of `terraform` definition.\n\n# UI/UX\n\nApplication design created by [Pavel Koval](https://www.linkedin.com/in/pavel-koval-866a1b84/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmalykhin%2Fp2piper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmalykhin%2Fp2piper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmalykhin%2Fp2piper/lists"}