{"id":13453562,"url":"https://github.com/mafintosh/webcat","last_synced_at":"2025-04-05T13:06:24.198Z","repository":{"id":30538136,"uuid":"34092783","full_name":"mafintosh/webcat","owner":"mafintosh","description":"Mad science p2p pipe across the web using webrtc that uses your Github private/public key for authentication and a signalhub for discovery","archived":false,"fork":false,"pushed_at":"2020-07-28T21:28:03.000Z","size":205,"stargazers_count":451,"open_issues_count":10,"forks_count":26,"subscribers_count":13,"default_branch":"master","last_synced_at":"2025-03-29T12:09:49.947Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/mafintosh.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}},"created_at":"2015-04-17T02:44:09.000Z","updated_at":"2025-03-29T02:50:05.000Z","dependencies_parsed_at":"2022-08-31T16:02:01.233Z","dependency_job_id":null,"html_url":"https://github.com/mafintosh/webcat","commit_stats":null,"previous_names":[],"tags_count":14,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mafintosh%2Fwebcat","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mafintosh%2Fwebcat/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mafintosh%2Fwebcat/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mafintosh%2Fwebcat/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mafintosh","download_url":"https://codeload.github.com/mafintosh/webcat/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247339155,"owners_count":20923014,"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":[],"created_at":"2024-07-31T08:00:43.269Z","updated_at":"2025-04-05T13:06:24.178Z","avatar_url":"https://github.com/mafintosh.png","language":"JavaScript","readme":"# webcat\n\nMad science p2p pipe across the web using webrtc that uses your Github private/public key for authentication and a [signalhub](https://github.com/mafintosh/signalhub) for discovery\n\nWe also want to support other key hosts beyond Github. If you have suggestions or want to help implement this check out [this issue](https://github.com/mafintosh/webcat/issues/5).\n\n```\nnpm install -g webcat\n```\n\nIf you have trouble getting it to compile try following the [wrtc install instructions](https://github.com/js-platform/node-webrtc#prerequisites)\n\n## Usage\n\nwebcat lets you establish a p2p pipe to other github users over the web.\nLet's say I wanted to connect to [@maxogden](https://github.com/maxogden)\n\nFirst I need to configure webcat once\n\n```\nwebcat --configure\nEnter your github username: mafintosh\n```\n\nThen on my machine I run\n\n```\nwebcat maxogden\nhello max\n```\n\nOn Max's machine he runs\n\n```\nwebcat mafintosh\nhi mathias\n```\n\nwebcat will create a p2p pipe between connect me and max by using a [signalhub](https://github.com/mafintosh/signalhub) to exchange webrtc metadata\nand Github private/public keys to authenticate that Max is actually [@maxogden](https://github.com/maxogden) and that I am actually [@mafintosh](https://github.com/mafintosh)\n\nOn my machine my prompt now looks like\n\n```\nwebcat maxogden\nhello max\nhi mathias\n```\n\nAnd on Max's machine it now looks like\n\n```\nwebcat mafintosh\nhi mathias\nhello max\n```\n\n## How it works\n\nwebcat works the following way\n\n1. First you sign a message that says you want to connect to another user using your Github private key\n2. You post this message to a known [signalhub](https://github.com/mafintosh/signalhub) in the channel /{another-username}\n3. The other user does the same thing only they posts it to the channel /{my-username}\n4. One of you receives the connect message and verifies that it came from the right person by looking up the other users public key using https://github.com/{another-username}.keys (and this will work in the browser if Github adds CORS GET to this API!)\n5. You then create a webrtc signal handshake, sign it and post it to the other user's lobby\n6. The other user receives this and posts back a signed version of their signaling data\n7. You use this data to establish a secure webrtc connection between eachother that is encrypted using DTLS\n8. You are now connected :)\n\n**warning**. we invented the first 6 parts of this scheme. it has not been properly peer reviewed so use at your own risk :)\n\nwe use the following crypto dependencies:\n\n* openssl from node core (rsa signing and https for fetching public keys)\n* dtls from webrtc\n\n## Use cases\n\nYou can use webcat to pipe files across the internet!\n\nOn my machine\n\n```\nwebcat maxogden \u003c some-file\n```\n\nOn Max's machine\n\n```\nwebcat mafintosh \u003e some-file\n```\n\n## Pipe to yourself\n\nAssuming you have your github key on two different machines you can also open and pipe between them by using the same username.\n\nOn one machine connected to the internet that has your Github key\n\n```\necho machine one | webcat mafintosh\n```\n\nOn another machine connected to the internet that has your Github key\n\n```\necho machine two | webcat mafintosh\n```\n\n## Programmatic usage\n\nYou can use webcat from node as well.\n\n``` js\nvar webcat = require('webcat')\n\nvar stream = webcat('mafintosh') // put in the name of the person you want to talk to\nprocess.stdin.pipe(stream).pipe(process.stdout)\n```\n\n## License\n\nMIT\n","funding_links":[],"categories":["Packages","包","Modules","JavaScript","目录","Mad science","Networking","High level"],"sub_categories":["Mad science","黑科技","逼格项目","神奇的科学","BitTorrent"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmafintosh%2Fwebcat","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmafintosh%2Fwebcat","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmafintosh%2Fwebcat/lists"}