{"id":48598064,"url":"https://github.com/slomr/pastepoint","last_synced_at":"2026-06-11T00:01:01.592Z","repository":{"id":249551645,"uuid":"831809892","full_name":"SloMR/PastePoint","owner":"SloMR","description":"PastePoint is a secure, feature-rich file-sharing service designed for local networks, and private sessions.","archived":false,"fork":false,"pushed_at":"2026-06-03T10:14:21.000Z","size":15238,"stargazers_count":14,"open_issues_count":6,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-06-03T12:09:47.975Z","etag":null,"topics":["actix","actix-rs","angular","attachment","chat","css","docker","dtls","encryption","end-to-end-encryption","flowbite","ios","localnetwork","open-source","pastepoint","rust","tailwind","typescript","webrtc","websocket"],"latest_commit_sha":null,"homepage":"https://pastepoint.com","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SloMR.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-07-21T17:18:22.000Z","updated_at":"2026-06-02T16:56:40.000Z","dependencies_parsed_at":"2024-07-21T19:59:28.439Z","dependency_job_id":"289d10ff-4485-4423-a51b-2d7b5da6b137","html_url":"https://github.com/SloMR/PastePoint","commit_stats":null,"previous_names":["slomr/pastedrop","slomr/pastepoint"],"tags_count":75,"template":false,"template_full_name":null,"purl":"pkg:github/SloMR/PastePoint","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SloMR%2FPastePoint","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SloMR%2FPastePoint/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SloMR%2FPastePoint/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SloMR%2FPastePoint/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SloMR","download_url":"https://codeload.github.com/SloMR/PastePoint/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SloMR%2FPastePoint/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34175887,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-10T02:00:07.152Z","response_time":89,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["actix","actix-rs","angular","attachment","chat","css","docker","dtls","encryption","end-to-end-encryption","flowbite","ios","localnetwork","open-source","pastepoint","rust","tailwind","typescript","webrtc","websocket"],"created_at":"2026-04-08T21:03:38.363Z","updated_at":"2026-06-11T00:01:01.515Z","avatar_url":"https://github.com/SloMR.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"client/web/public/assets/pastepoint-light.svg\" alt=\"PastePoint Logo\" style=\"width: 250px; height: 250px\"/\u003e\n\n\u003cbr\u003e\n\u003cbr\u003e\n\n![Docker](https://img.shields.io/badge/Docker-Containers-blue) ![Rust](https://img.shields.io/badge/Rust-Backend-orange) ![Angular](https://img.shields.io/badge/Angular-Frontend-red) [![Nginx](https://img.shields.io/badge/Nginx-Reverse_Proxy-green)](https://nginx.org)\n\n\u003c/div\u003e\n\n# PastePoint\n\nPastePoint is a secure, feature-rich file-sharing service designed for local networks. It enables users to share files and communicate efficiently through peer-to-peer WebRTC connections. Built with a Rust-based backend using Actix Web and an Angular 21 frontend with SSR support, PastePoint prioritizes security, performance, and usability.\n\n## Usage Disclaimer\n\n- [Disclaimer](DISCLAIMER.md)\n\n## Features\n\n### Core Features:\n\n- **Local Network Communication**:\n  - Establish WebSocket-based local chat between computers on the same network\n  - List available sessions, create new sessions, or join existing ones\n  - Multiple rooms within a session — create, list, and switch between rooms\n  - QR code session sharing — generate a code from one device and scan it from another to join instantly\n  - Real-time messaging with emoji support and dark/light theme\n  - Resilient WebSocket signaling with automatic reconnect, heartbeat, and bfcache support\n\n- **File Sharing**:\n  - Peer-to-peer WebRTC connections for secure file transfers\n  - Drag \u0026 drop file upload with real-time progress tracking\n  - File offer system with accept/decline options\n  - Chunk-based file transfer with progress tracking and cancellation support\n\n- **Security**:\n  - End-to-end encryption for all file transfers via WebRTC\n  - SSL/TLS encryption for WebSocket signaling\n  - Self-signed certificate generation included\n  - Input validation and rate limiting\n\n- **Observability**:\n  - Optional Sentry-based error tracking (EU-hosted, off by default in dev)\n  - Privacy-tight defaults: no IPs, no geo, no request bodies, no user identifiers\n  - Toggle per-environment via `SENTRY_ENABLED` / `SENTRY_DSN` (server: runtime env vars; web: built into the bundle from `client/web/src/environments/environment.*.ts` at compile time)\n\n- **Cross-Platform Compatibility**:\n  - Runs seamlessly on Linux, macOS, and Windows with Dockerized support\n  - Responsive design for mobile and desktop\n\n### Developer Experience\n\n- Full Docker integration\n- Isolated microservices architecture\n- Configurable environments (dev/prod)\n- Comprehensive test suites\n\n### Performance \u0026 SEO\n\n- Server-Side Rendering (SSR) for improved initial load time\n- Complete SEO optimization with metadata, sitemap, and robots.txt\n- Response compression for faster page loads\n- Static asset optimization with proper caching headers\n\n## Tech Stack\n\n### Server (Rust)\n\n[![Actix](https://img.shields.io/badge/Actix-4.13-blue)](https://actix.rs/)\n[![OpenSSL](https://img.shields.io/badge/OpenSSL-0.10-yellow)](https://www.openssl.org/)\n\n- **Framework**: Actix Web for HTTP/TLS, `actix-ws` for WebSocket signaling (Rust edition 2024, toolchain 1.93.1)\n- **Security**: OpenSSL for TLS termination\n- **Utilities**: UUID generation, Serde serialization\n- **Rate Limiting**: Actix-governor for request throttling\n- **Error Tracking**: `sentry` + `sentry-actix` with privacy-tight redaction\n\n### Clients\n\n#### Web (Angular)\n\n[![Angular](https://img.shields.io/badge/Angular-21-red)](https://angular.io/)\n[![Tailwind](https://img.shields.io/badge/Tailwind-3.4-blue)](https://tailwindcss.com/)\n[![Flowbite](https://img.shields.io/badge/Flowbite-3.1-cyan)](https://flowbite.com/)\n\n- **Rendering**: Server-Side Rendering with Angular SSR\n- **State Management**: RxJS observables\n- **Styling**: Tailwind CSS with dark mode\n- **I18n**: ngx-translate integration (English, Arabic with RTL)\n- **WebRTC**: Native WebRTC API for file transfers\n- **QR Sharing**: `qrcode` for generation, `jsqr` for camera-based scanning\n- **Integrity**: `hash-wasm` for fast file hashing\n- **Notifications**: Hot-toast for real-time feedback\n- **Error Tracking**: `@sentry/angular` with privacy-tight redaction\n\n### Infrastructure\n\n[![Nginx](https://img.shields.io/badge/Nginx-Reverse_Proxy-green)](https://nginx.org)\n[![Docker](https://img.shields.io/badge/Docker-24.0-blue)](https://www.docker.com)\n[![Express](https://img.shields.io/badge/Express-4.22-purple)](https://expressjs.com/)\n\n- **Container Orchestration**: Docker Compose with multi-stage builds\n- **Reverse Proxy**: Nginx with enhanced security features\n- **SSL/TLS**: Automated certificate management\n- **Health Monitoring**: Built-in health check endpoints\n- **SSR Server**: Express.js with compression middleware\n\n## Directory Structure\n\n```\npastepoint/\n├── client/                         # Frontend clients\n│   ├── web/                        # Angular SSR frontend\n│   └── ios/                        # iOS client (WIP)\n├── server/                         # Rust backend with WebSockets\n├── nginx/                          # Reverse proxy \u0026 SSL termination\n├── scripts/                        # Development \u0026 deployment scripts\n├── docker-compose.yml              # Multi-container orchestration\n├── .nvmrc                          # Node.js version specification\n├── rust-toolchain                  # Rust toolchain specification\n├── Makefile                        # Makefile for development\n└── README.md                       # Project documentation\n```\n\n#### Server (Rust):\n\n- [Server readme](server/README.md)\n\n#### Clients:\n\n##### Web (Angular):\n\n- [Web readme](client/web/README.md)\n\n##### iOS:\n\n- Work in progress\n\n##### Android:\n\n- Planned\n\n#### Deployment:\n\n- `docker-compose.yml`: Manages containers for:\n  - Backend service (Rust)\n  - Frontend SSR service (Angular + Express)\n  - Certificate checker service\n  - Nginx reverse proxy\n- `scripts/generate-certs.sh`: Script to generate self-signed certificates\n- `scripts/configure-network.sh`: Script to configure the domain name for the local network (optional)\n- `nginx/nginx.conf`: Main Nginx configuration\n- `nginx/locations.conf`: Location block configurations including SEO routes\n- `nginx/security/`: Security-related configurations\n  - `security_settings.conf`: Security and rate limiting settings\n  - `security_headers.conf`: Security headers configuration\n- `nginx/includes/`: Reusable configuration snippets\n  - `common_proxy_ssr.conf`: SSR proxy settings\n  - `common_proxy_ws.conf`: WebSocket proxy settings\n  - `common_cache_busting.conf`: No-cache headers\n  - `common_rate_limiting.conf`: Rate limiting status codes\n  - `common_ssl.conf`: SSL/TLS settings\n\n## Development Guide\n\n### Quick Start\n\n### Prerequisites:\n\n- Docker and Docker Compose\n- Node.js (v24.16.0 as specified in `.nvmrc`)\n- Rust 1.93.1 (specified in `rust-toolchain`, edition 2024)\n\n#### Windows-Specific Requirements:\n\n- Windows 10/11 with WSL2 enabled\n- Docker Desktop for Windows\n- Git Bash or PowerShell 7+ for running scripts\n- OpenSSL installed via `winget install OpenSSL`\n\n### Steps:\n\n1. Clone the repository:\n\n   ```bash\n   git clone https://github.com/SloMR/pastepoint.git\n   cd pastepoint\n   ```\n\n2. Generate SSL certificates (required for HTTPS):\n\n   ```bash\n   ./scripts/generate-certs.sh\n   ```\n\n3. Configure for Local Network (Optional):\n   If you want to run PastePoint on your local network instead of just localhost:\n\n   ```bash\n   ./scripts/configure-network.sh\n   ```\n\n   The script will create `.env.development` from the committed template if it\n   doesn't already exist, then prompt for your local IP and update all\n   necessary configuration files. To bootstrap the environment manually:\n\n   ```bash\n   cp .env.development.example .env.development\n   ```\n\n4. Build and Start Services:\n\n   ```bash\n   make dev   # uses .env.development (gitignored, machine-local)\n   make prod  # uses .env.production (gitignored, host-local — see below)\n   ```\n\n   For production deploys, one-time setup:\n\n   ```bash\n   cp .env.production.example .env.production\n   chmod 600 .env.production\n   # edit .env.production: SERVER_NAME, SENTRY_DSN, etc.\n   ```\n\n   Real DSNs and host-specific values live only in the gitignored\n   `.env.development` / `.env.production` files. The committed `.example`\n   templates document which variables exist.\n\n5. Access PastePoint:\n   - Frontend:\n     - Localhost: [https://localhost](https://localhost)\n     - Local Network: `https://\u003cyour-local-ip\u003e`\n   - WebSocket signaling:\n     - Localhost: `wss://localhost:9000/ws`\n     - Local Network: `wss://\u003cyour-local-ip\u003e:9000/ws`\n\n## Contributing\n\n- [Contributing](CONTRIBUTING.md)\n\n## Troubleshooting\n\n**Common Issues**:\n\n1. **SSL Certificate Errors**\n   Run: `./scripts/generate-certs.sh`\n\n## Security Considerations\n\n- **Certificate Management**:\n  - Replace self-signed certificates with proper SSL certificates in production\n  - Keep private keys secure and never commit them to version control\n\n- **Data Privacy**:\n  - All file transfers are encrypted end-to-end via WebRTC\n  - No data is stored permanently on servers\n  - Session data is cleared on server restart or leaving the session\n\n- **Error Diagnostics (Sentry)**:\n  - Server and web SDKs scrub: user identifiers, IP addresses, geo,\n    request bodies, headers, cookies, query strings, locale, timezone\n\n## License\n\nThis project is licensed under the GPL-3.0 License. See the [LICENSE](LICENSE) file for details.\n\n## Contact\n\nFor issues or feature requests:\n\n- [GitHub Issues](https://github.com/SloMR/pastepoint/issues)\n- [sulaimanromaih@gmail.com](mailto:sulaimanromaih@gmail.com)\n- [LinkedIn](https://www.linkedin.com/in/sulaiman-alromaih-845700202/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fslomr%2Fpastepoint","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fslomr%2Fpastepoint","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fslomr%2Fpastepoint/lists"}