{"id":17702355,"url":"https://github.com/99percentpeople/weblink","last_synced_at":"2025-05-16T00:07:09.198Z","repository":{"id":258114212,"uuid":"843360823","full_name":"99percentpeople/weblink","owner":"99percentpeople","description":"A browser-based P2P chat and file transfer app with integrated screen sharing, powered by WebRTC.","archived":false,"fork":false,"pushed_at":"2025-03-17T06:55:53.000Z","size":1424,"stargazers_count":503,"open_issues_count":1,"forks_count":41,"subscribers_count":3,"default_branch":"public","last_synced_at":"2025-04-08T12:03:23.393Z","etag":null,"topics":["chat","file-transfer","p2p","pwa","video-chat","webapp","webrtc"],"latest_commit_sha":null,"homepage":"https://webl.ink","language":"TypeScript","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/99percentpeople.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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":"2024-08-16T10:49:00.000Z","updated_at":"2025-04-08T06:56:51.000Z","dependencies_parsed_at":"2024-12-11T07:28:35.509Z","dependency_job_id":"708d1767-4195-470c-9838-8bc16827ab4e","html_url":"https://github.com/99percentpeople/weblink","commit_stats":{"total_commits":114,"total_committers":2,"mean_commits":57.0,"dds":0.00877192982456143,"last_synced_commit":"c350b1a22b2e176a94061b1db701cff1f39c9734"},"previous_names":["99percentpeople/weblink"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/99percentpeople%2Fweblink","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/99percentpeople%2Fweblink/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/99percentpeople%2Fweblink/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/99percentpeople%2Fweblink/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/99percentpeople","download_url":"https://codeload.github.com/99percentpeople/weblink/tar.gz/refs/heads/public","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254442854,"owners_count":22071878,"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":["chat","file-transfer","p2p","pwa","video-chat","webapp","webrtc"],"created_at":"2024-10-24T19:06:37.399Z","updated_at":"2025-05-16T00:07:04.187Z","avatar_url":"https://github.com/99percentpeople.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Weblink\n\n**English Introduction** | [**中文介绍**](README_CN.md)\n\n## Introduction\n\nWeblink is a pure web-based **file transfer** and **text/voice/video chat** application built on WebRTC. It requires no downloads and works directly in your browser. Utilizing a serverless P2P architecture, it supports multiple backends including Firebase and WebSocket for efficient peer-to-peer connections. Additionally, Weblink ensures the privacy and security of signaling messages through end-to-end encryption.\n\nThe project is deployed on Cloudflare Pages and using Firebase as backend can be accessed at [https://v.webl.ink](https://v.webl.ink).\n\nAlternatively, you can use the version using self-hosted WebSocket as backend at [https://webl.ink](https://webl.ink).\n\n## 🌟Features\n\nWeblink currently supports the following features:\n\n| **Feature**                   | **Description**                                                                           |\n| ----------------------------- | ----------------------------------------------------------------------------------------- |\n| 🔄 **File Synchronization**   | Retrieve cached files from the other party seamlessly.                                    |\n| ⏯️ **Resume Transfer**        | Resume file transfer effortlessly if the connection is interrupted.                       |\n| 📂 **File Caching**           | Transferred files are securely cached in IndexedDB.                                       |\n| 🖥️ **Screen Sharing**         | Share screens, cameras, and audio (include speaker and microphone) with multiple clients. |\n| 🔍 **File Search**            | Quickly search for cached files from you and the other party.                             |\n| 📋 **Clipboard Transfer**     | Paste clipboard content directly into the chat with `Ctrl + V` or mobile paste actions.   |\n| 📁 **Folder Transfer**        | Send folders effortlessly with automatic compression.                                     |\n| 📦 **Compressed Transfer**    | Choose to compress files during transfer for efficient data handling.                     |\n| ⚡ **Multi-Channel Transfer** | Boost transfer performance with parallel data transfers across multiple channels.         |\n| 🔗 **Share and Forward**      | Share text or files via system sharing after installing as a PWA.                         |\n| 💬 **Text Chat**              | Exchange text messages for smooth communication.                                          |\n\nMore information can be found in [CHANGELOG](CHANGELOG.md).\n\n## Usage\n\n### Run Locally (Development)\n\n```bash\ngit clone https://github.com/99percentpeople/weblink.git\ncd weblink\npnpm install\n```\n\nMake sure you configure the Firebase keys in the project (as shown below), then run the following command:\n\n```bash\n# Development\npnpm dev\n# Build\npnpm build\n```\n\n### Deploy to Docker\n\nYou can deploy this project to Docker using `docker-compose.yaml`, and it will automatically build the [weblink-ws-server](https://github.com/99percentpeople/weblink-ws-server) as backend.\n\nModify the `docker-compose.yaml` file to set the correct environment variables. Then run the following command:\n\n```bash\ndocker compose up -d\n```\n\nTo enable SSL you need to provide the SSL certificate `server.crt` and key `server.pem` files in the `docker/ssl` directory. And run the following command:\n\n```bash\nENABLE_SSL=true \u0026\u0026 docker compose up -d\n```\n\n```pwsh\n$env:ENABLE_SSL='true' \u0026\u0026 docker compose up -d\n```\n\nAlternatively, you can also use Dockerfile to deploy this project to Docker.\n\n### Deploy to Vercel\n\nTo deploy this project to Vercel, follow these steps:\n\n1. Go to the Vercel website and log in (or create an account).\n\n2. Connect your GitHub repository and select the cloned repository.\n\n3. In your Vercel project settings, find \"Environment Variables\" and add the Firebase API key and other environment variables (as shown below).\n\n4. Click the \"Deploy\" button, and Vercel will automatically build and deploy your project.\n\n### Environment Variables Configuration (Firebase)\n\nYou will need to configure Firebase keys for both local development and deployment to Vercel. Add the following Firebase environment variables:\n\n`VITE_FIREBASE_API_KEY`\n\n`VITE_FIREBASE_AUTH_DOMAIN`\n\n`VITE_FIREBASE_PROJECT_ID`\n\n`VITE_FIREBASE_STORAGE_BUCKET`\n\n`VITE_FIREBASE_MESSAGING_SENDER_ID`\n\n`VITE_FIREBASE_APP_ID`\n\n`VITE_FIREBASE_DATABASE_URL`\n\n### Vercel Environment Variables Configuration\n\nFor Vercel deployment, set the environment variables by following these steps:\n\n1. Open your Vercel project and go to \"Settings.\"\n\n2. Find \"Environment Variables.\"\n\n3. Add the Firebase configuration items above and input the corresponding values.\n\n### WEBSOCKET Configuration\n\nThis application can deploy its own WEBSOCKET server, and a WEBSOCKET server is provided. You can choose to use it or not. For details, please refer to [weblink-ws-server](https://github.com/99percentpeople/weblink-ws-server).\n\n### Local Environment Variables (.env.local)\n\nFor local development, create a .env.local file and add the Firebase keys:\n\n```env\n# backend choose FIREBASE or WEBSOCKET\n\n# FIREBASE\nVITE_BACKEND=FIREBASE\nVITE_FIREBASE_API_KEY=your-firebase-api-key\nVITE_FIREBASE_AUTH_DOMAIN=your-firebase-auth-domain\nVITE_FIREBASE_PROJECT_ID=your-firebase-project-id\nVITE_FIREBASE_STORAGE_BUCKET=your-firebase-storage-bucket\nVITE_FIREBASE_MESSAGING_SENDER_ID=your-firebase-messaging-sender-id\nVITE_FIREBASE_APP_ID=your-firebase-app-id\nVITE_FIREBASE_DATABASE_URL=your-database-url\n\n# WEBSOCKET\nVITE_BACKEND=WEBSOCKET\nVITE_WEBSOCKET_URL=your-websocket-url\n```\n\n## Notes\n\n### STUN and TURN Server Configuration\n\nYou can configure multiple default STUN and TURN servers for this application, and users do not need to manually configure them. The configuration is as follows in the .env.local file:\n\n```env\n# Multiple STUN and TURN servers, separated by commas\nVITE_STUN_SERVERS=stun:stun.l.google.com,stun:stun1.l.google.com\nVITE_TURN_SERVERS=turn:turn1.example.com:3478|user1|pass1|longterm,turn:turn2.example.com:5349|user2|pass2|hmac\n```\n\nIf you are using P2P connections outside a local area network (in a NAT environment), you may need to configure a TURN server to ensure connections are established. In the settings page, you can configure the TURN server with the following format, support coturn and Cloudflare TURN server, and separate multiple configurations with newline characters:\n\n**TURN Configuration Format:**\n\n```plaintext\n# use coturn with account and password\nturn:turn1.example.com:3478|user1|pass1|longterm\n# use coturn with timestamp\nturns:turn2.example.com:5349|user2|pass2|hmac\n# use cloudflare turn server\nname|TURN_TOKEN_ID|API_TOKEN|cloudflare\n```\n\nHere are some methods to get public STUN and TURN servers:\n\n#### Public STUN Server\n\nThis application defaults to using Google's STUN server. If you cannot connect, please configure your own STUN server. You can refer to [https://gist.github.com/mondain/b0ec1cf5f60ae726202e](https://gist.github.com/mondain/b0ec1cf5f60ae726202e) for a list of public STUN servers. Then add the stun server in format `stun:xxxx:xxxx` to the STUN server list in the settings page such as `stun:stun.l.google.com:19302`.\n\n#### Cloudflare Calls TURN Server\n\nYou can use the TURN server provided by Cloudflare Calls, please visit [https://developers.cloudflare.com/calls/turn](https://developers.cloudflare.com/calls/turn). Then add the TURN server in format `name|TURN_TOKEN_ID|API_TOKEN|cloudflare` to the TURN server list in the settings page.\n\n#### Self-Hosted STUN/TURN Server\n\nYou can refer to [https://github.com/coturn/coturn](https://github.com/coturn/coturn) to set up your own TURN server.\n\n### Use in LAN\n\nThe application currently supports LAN use in non-secure environments. Ensure that your devices are in the same LAN and the firewall does not block P2P connections.\n\nAnd at the same time, run [weblink-ws-server](https://github.com/99percentpeople/weblink-ws-server) to support WEBSOCKET connections.\n\n## Contribution\n\nContributions are welcome! Please feel free to submit issues or pull requests.\n\n## License\n\nThis project is open-sourced under the [MIT License](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F99percentpeople%2Fweblink","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F99percentpeople%2Fweblink","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F99percentpeople%2Fweblink/lists"}