{"id":13691533,"url":"https://github.com/ntsd/zero-share","last_synced_at":"2025-04-06T06:07:38.836Z","repository":{"id":152243050,"uuid":"616501910","full_name":"ntsd/zero-share","owner":"ntsd","description":"A secure P2P file sharing using WebRTC without server-side need.","archived":false,"fork":false,"pushed_at":"2024-10-23T16:58:43.000Z","size":3867,"stargazers_count":109,"open_issues_count":1,"forks_count":10,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-30T05:04:48.711Z","etag":null,"topics":["astro","data-sharing","data-transfer","file-sharing","file-transfer","hacktoberfest","p2p","svelte","webrtc"],"latest_commit_sha":null,"homepage":"https://zero-share.github.io","language":"Svelte","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/ntsd.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":"2023-03-20T14:08:29.000Z","updated_at":"2025-03-20T23:32:31.000Z","dependencies_parsed_at":"2024-10-23T19:23:53.701Z","dependency_job_id":null,"html_url":"https://github.com/ntsd/zero-share","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ntsd%2Fzero-share","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ntsd%2Fzero-share/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ntsd%2Fzero-share/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ntsd%2Fzero-share/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ntsd","download_url":"https://codeload.github.com/ntsd/zero-share/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247441049,"owners_count":20939239,"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","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":["astro","data-sharing","data-transfer","file-sharing","file-transfer","hacktoberfest","p2p","svelte","webrtc"],"created_at":"2024-08-02T17:00:46.129Z","updated_at":"2025-04-06T06:07:38.806Z","avatar_url":"https://github.com/ntsd.png","language":"Svelte","funding_links":[],"categories":["Projects"],"sub_categories":["File Transfer"],"readme":"# Zero share\n\n[![website](https://img.shields.io/website?url=https%3A%2F%2Fzero-share.github.io)](https://zero-share.github.io/)\n[![workflow](https://img.shields.io/github/actions/workflow/status/zero-share/zero-share.github.io/static.yml)](https://github.com/zero-share/zero-share.github.io/actions/workflows/static.yml)\n\nA client-side secure P2P file sharing using WebRTC.\n\n## Features\n\n- Send multiple files in parallel.\n- Generate SDP connection for WebRTC data channel.\n- No server side (only use public STUN servers for ICE candidates).\n- PGP Encryption.\n- Responsive UI.\n- Open-source license.\n- QR Scan for SDP trade.\n- Paste from the clipboard.\n- short SDP by [sdp-compact](https://github.com/ntsd/sdp-compact).\n\n## Usage\n\n1. The offer goes to \u003chttps://zero-share.github.io/\u003e.\n2. The offer generates an offer link and then sends it to the answer.\n3. The answer opens the offer link and then sends it to the offer.\n4. The offer paste the answer code then click `Accept Answer`.\n5. The offer/answer can now select and send files.\n\n[example.webm](https://user-images.githubusercontent.com/8283616/234210465-7b20ad8d-9b1b-413b-ac4e-3919f9261b8e.webm)\n\n## How does it work?\n\nZero share client will get ICE Candidate from STUN/TURN server and make a connections between peers.\n\nThanks to the Interactive Connectivity Establishment (ICE) protocol, Two peers will have the shortest path to travel between them without caring the Network address translation (NAT).\n\nWebRTC protocol will secure by DTLS (Datagram Transport Layer Security) But DTLS can be vulnerable to man-in-the-middle (MITM), So we provide a second layer encryption using PGP (RSA-OAEP-1024, AES-128).\n\n```mermaid\nC4Context\n    Component(stun, \"STUN Server\")\n\n    Boundary(b, \"\", \"\") {\n        Person(bob, \"Bob\", \"Bob Zero Share\")\n        Person(alice, \"Alice\", \"Alice Zero Share\")\n    }\n\n    Rel(alice, stun, \"get ice candidates\")\n    UpdateRelStyle(alice, stun, $offsetX=\"-90\", $offsetY=\"-40\")\n\n    Rel(bob, stun, \"get ice candidates\")\n    UpdateRelStyle(bob, stun, $offsetX=\"-90\", $offsetY=\"-40\")\n\n    BiRel(alice, bob, \"file transfer\")\n    UpdateRelStyle(alice, bob, $offsetX=\"-30\")\n```\n\nExample sequence, Alice want to send a file to Bob.\n\n```mermaid\nsequenceDiagram\n    actor Alice\n    actor Bob\n    Alice--\u003e\u003eAlice: generate offer sdp\n    Alice-\u003e\u003eBob: send offer link\n    Bob--\u003e\u003eBob: generate RSA keypair\n    Bob--\u003e\u003eBob: generate answer sdp\n    Bob-\u003e\u003eAlice: send answer sdp + RSA pub key\n    Alice--\u003e\u003eAlice: encrypt file with AES key\n    Alice--\u003e\u003eAlice: encrypt AES key with RSA pub key\n    Alice-\u003e\u003eBob: send encrypted file + encrypted AES key\n    Bob--\u003e\u003eBob: decrypt file with decrypted AES key\n```\n\n## Development\n\nRequirements\n\n- Node (^16.14 || \u003e=18)\n- NPM\n\nInstallation\n\n```sh\nnpm install\n```\n\nRun development (hot reload)\n\n```sh\nnpm run dev\n```\n\nTest (playwright)\n\n```sh\nnpm run test\n```\n\n## Deployment\n\nThe deployment will using this [Github Workflow](https://github.com/zero-share/zero-share.github.io/blob/main/.github/workflows/static.yml) to trigger the Github Action to build the Github Pages.\n\nFor self-host, you can run `npm run build` to build the static files. This no need the server side of svelte.\n\n## Known Issues\n\n1. Sometimes your internet will block the Google public STUN server and it may slow. I recommend to try to use a different STUN server, can check the list [here](https://github.com/pradt2/always-online-stun/blob/master/valid_hosts.txt).\n2. Sometimes gets blocked by the firewall during sending files.\n\n## Contributing\n\nWe welcome contributions from the community! If you'd like to contribute to the project, follow these steps:\n\n1. Fork the repository on GitHub.\n2. Create a new branch and make changes.\n3. Test your changes by running `npm run test`.\n4. Ensure your code is properly formatted and linted by running `npm run lint` and `npm run format`.\n5. Commit and the commit message should following [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/).\n6. Create a Pull Request on the original repository, describing the changes you've made and the problem they solve.\n\nFor feature requests, please open an issue on the GitHub repository to discuss your ideas with the maintainers.\n\n## License\n\nThis project is 100% open-source.\n[MIT License](https://github.com/ntsd/zero-share/blob/main/LICENSE) - Copyright \u0026copy; 2023 Jirawat Boonkumnerd.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fntsd%2Fzero-share","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fntsd%2Fzero-share","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fntsd%2Fzero-share/lists"}