{"id":32780499,"url":"https://github.com/rahulkbharti/streamlet-microservices","last_synced_at":"2026-04-14T05:31:17.118Z","repository":{"id":318003314,"uuid":"1068240714","full_name":"rahulkbharti/streamlet-microservices","owner":"rahulkbharti","description":"Streamlet is a modern, scalable video streaming platform built from the ground up using a microservices architecture. It efficiently handles the entire video lifecycle—from upload and multi-resolution transcoding to on-demand, high-performance streaming.","archived":false,"fork":false,"pushed_at":"2025-10-18T11:07:41.000Z","size":772,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-18T20:49:47.691Z","etag":null,"topics":["backblaze-b2","bullmq","docker","ffmpeg","media-server","microservices","mongodb","nodejs","postgresql","redis","socket-io","transcoding","video-processing","video-streaming"],"latest_commit_sha":null,"homepage":"https://streamlet-ebon.vercel.app","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/rahulkbharti.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-02T04:25:27.000Z","updated_at":"2025-10-18T11:07:45.000Z","dependencies_parsed_at":"2025-10-04T13:24:10.207Z","dependency_job_id":"5f7c0130-c070-4c2f-ad0a-392e9fe17eac","html_url":"https://github.com/rahulkbharti/streamlet-microservices","commit_stats":null,"previous_names":["rahulkbharti/streamlet-microservices"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/rahulkbharti/streamlet-microservices","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rahulkbharti%2Fstreamlet-microservices","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rahulkbharti%2Fstreamlet-microservices/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rahulkbharti%2Fstreamlet-microservices/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rahulkbharti%2Fstreamlet-microservices/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rahulkbharti","download_url":"https://codeload.github.com/rahulkbharti/streamlet-microservices/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rahulkbharti%2Fstreamlet-microservices/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31784251,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-14T02:24:21.117Z","status":"ssl_error","status_checked_at":"2026-04-14T02:24:20.627Z","response_time":153,"last_error":"SSL_read: 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":["backblaze-b2","bullmq","docker","ffmpeg","media-server","microservices","mongodb","nodejs","postgresql","redis","socket-io","transcoding","video-processing","video-streaming"],"created_at":"2025-11-04T18:01:41.047Z","updated_at":"2026-04-14T05:31:17.112Z","avatar_url":"https://github.com/rahulkbharti.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Streamlet: Microservices-Based Video Streaming Platform\n\nStreamlet is a modern, scalable video streaming platform built from the ground up using a microservices architecture. It efficiently handles the entire video lifecycle—from upload and multi-resolution transcoding to on-demand, high-performance streaming.\n\n## ![Architecture Diagram](./Streamlet.jpg)\n\n### Frontend (Nextjs and tailwind CSS) : https://github.com/rahulkbharti/streamlet-frontend.git\n\n## Architecture Overview\n\nStreamlet consists of three core, decoupled microservices that communicate via a job queue. This design ensures each part of the system can be scaled, updated, and maintained independently.\n\n**Workflow:**\n\n1. **Upload:** Client requests an upload URL from the API Service.\n2. **Storage:** Video is uploaded directly to cloud storage (e.g., Azure Storage Blob).\n3. **Processing Job:** API Service adds a new transcoding job to the BULLMQ queue.\n4. **Transcoding:** Transcoder Service picks up the job, downloads the video, transcodes it into multiple formats (1080p, 720p, 480p), and uploads processed chunks back to storage.\n5. **Streaming:** Content Service delivers the appropriate video chunks to the client for smooth playback.\n\n---\n\n## Core Components\n\n### 1. API Service\n\n- **Role:** Central gateway to the platform.\n- **Responsibilities:**\n  - Manages client interactions\n  - User authentication\n  - Handles video metadata (PostgreSQL \u0026 MongoDB)\n  - Orchestrates upload process\n  - Adds jobs to transcoding queue\n- **Technologies:** Node.js, Express, PostgreSQL, MongoDB, Socket.io\n\n### 2. Transcoder Service\n\n- **Role:** Dedicated background worker for video processing.\n- **Responsibilities:**\n  - Listens for new jobs from BULLMQ\n  - Downloads source video\n  - Transcodes using FFmpeg\n  - Uploads processed chunks to storage\n- **Technologies:** Node.js, BULLMQ, FFmpeg, Redis\n\n### 3. Content Service\n\n- **Role:** High-performance delivery engine.\n- **Responsibilities:**\n  - Delivers video chunks (HLS) and images previews to clients\n- **Technologies:** Node.js, NGINX (optional for caching/proxying. Also can be contected with CDN)\n\n---\n\n## Technology Stack\n\n- **Backend:** Node.js\n- **Databases:** PostgreSQL (relational), MongoDB (document)\n- **Job Queue:** BULLMQ with Redis\n- **Real-time Communication:** Socket.io\n- **Storage:** Azure Storage Blob\n- **Containerization:** Docker and Docker Compose\n\n---\n\n## Key Features\n\n- **Microservices Architecture:** Scalability, fault tolerance, maintainability\n- **Asynchronous Video Processing:** Non-blocking transcoding\n- **Multi-Resolution Streaming:** Adaptive Bitrate Streaming\n- **Real-time Upload Progress:** Live updates via Socket.io\n- **Decoupled Components:** Independent development and deployment\n\n---\n\n## Getting Started\n\nFollow these steps to set up the project locally:\n\n```bash\ngit clone https://github.com/rahukbharti/streamlet-microservices.git\ncd streamlet-microservices\n# Make Sure that You have create the environment files for each service\ndocker-compose up -d # Or Run each service individually\n```\n\n1. Set up environment variables (add `.env.development` and `.env.production` files in each service folder)\n2. Start each service (API, Transcoder, Content) as described in their respective folders\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frahulkbharti%2Fstreamlet-microservices","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frahulkbharti%2Fstreamlet-microservices","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frahulkbharti%2Fstreamlet-microservices/lists"}