{"id":51170491,"url":"https://github.com/albugowy15/streamforge","last_synced_at":"2026-06-27T00:03:20.459Z","repository":{"id":356832488,"uuid":"1234247023","full_name":"albugowy15/streamforge","owner":"albugowy15","description":"Streamforge is an Nx-managed monorepo for a video upload and streaming platform with resumable uploads, FFmpeg processing, and HLS playback.","archived":false,"fork":false,"pushed_at":"2026-06-21T14:13:20.000Z","size":1053,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-21T16:11:38.019Z","etag":null,"topics":["axum","hls","nx","rust","streaming","tanstack-start"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/albugowy15.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":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-05-09T23:49:37.000Z","updated_at":"2026-06-21T14:15:23.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/albugowy15/streamforge","commit_stats":null,"previous_names":["albugowy15/streamforge"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/albugowy15/streamforge","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/albugowy15%2Fstreamforge","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/albugowy15%2Fstreamforge/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/albugowy15%2Fstreamforge/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/albugowy15%2Fstreamforge/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/albugowy15","download_url":"https://codeload.github.com/albugowy15/streamforge/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/albugowy15%2Fstreamforge/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34835785,"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-26T02:00:06.560Z","response_time":106,"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":["axum","hls","nx","rust","streaming","tanstack-start"],"created_at":"2026-06-27T00:03:20.000Z","updated_at":"2026-06-27T00:03:20.452Z","avatar_url":"https://github.com/albugowy15.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Streamforge\n\nStreamforge is an Nx-managed monorepo for a video upload and streaming platform. It is built around three core capabilities:\n\n1. Resumable file upload for large source videos.\n2. Video processing with FFmpeg.\n3. Live streaming based on the HTTP Live Streaming (HLS) protocol.\n\nIt has two applications:\n\n- `apps/api`: a Rust backend that handles video metadata, resumable uploads, storage, and future HLS processing.\n- `apps/web`: a TanStack Start frontend for uploading and streaming videos.\n\n## Core Features\n\n### Resumable File Upload\n\nUsers upload one source video along with its metadata. Because source files can be large, the API uses S3 multipart upload against RustFS so interrupted uploads can continue from the last completed part instead of starting again from byte zero.\n\nThe upload flow is designed for unstable networks and browser interruptions. The API exposes endpoints to create an upload session, send individual parts, inspect upload progress, complete the upload, and abort unfinished uploads.\n\n### Video Processing With FFmpeg\n\nAfter a source upload completes, the API will process the uploaded video with FFmpeg. The processing pipeline will generate streaming-ready outputs, including the manifests and media segments required for adaptive playback.\n\nThis work is intended to convert one uploaded source file into multiple delivery assets without asking the user to re-upload or manually transcode anything.\n\n### Live Streaming With HLS\n\nStreamforge serves playback through HTTP Live Streaming. HLS lets the client choose an appropriate rendition based on network conditions and switch resolution during playback when needed.\n\nThe target experience includes adaptive streaming, manual quality selection, seek support, play/pause, volume control, and optional playback-speed controls.\n\n## Repository Layout\n\n- `apps/api/` contains the Rust API, SQLx migrations, and backend-specific docs.\n- `apps/web/` contains the TanStack Start app, routes, components, and public assets.\n- `packages/generator/` contains the local Nx generator used by `pnpm generate`.\n- Root files such as `package.json`, `nx.json`, and `docker-compose.yaml` define workspace scripts and local infrastructure.\n\n## Workspace Commands\n\nRun tasks from the repository root so Nx can coordinate caching and project dependencies:\n\n```bash\npnpm dev        # run dev targets across the workspace\npnpm build      # build all projects with a build target\npnpm test       # run workspace tests\npnpm lint       # run workspace lint targets\npnpm typecheck  # run workspace type checks\npnpm start      # run start targets\npnpm generate   # build and run the local generator\n```\n\nTo run one app directly with Nx:\n\n```bash\npnpm nx run @streamforge/api:dev\npnpm nx run @streamforge/web:dev\n```\n\nIf Nx fails with plugin-worker connection errors in a sandboxed environment, disable plugin isolation for that command:\n\n```bash\nNX_ISOLATE_PLUGINS=false pnpm nx run @streamforge/web:dev\n```\n\n## Local Infrastructure\n\nThe project is designed to run locally with Docker:\n\n```bash\ndocker compose up -d postgres redis rustfs\ndocker compose up -d\n```\n\n- `postgres` stores application data.\n- `redis` supports cache or background-work workloads.\n- `rustfs` provides S3-compatible object storage for uploaded video files.\n- `api` and `web` are the application containers.\n\n## Configuration\n\nEach app owns its own `.env` file at the app root:\n\n- `apps/api/.env`\n- `apps/web/.env`\n\nCopy from the example file in the same app directory before running locally. Do not commit real secrets.\n\n## Project Docs\n\n- API guide: [apps/api/README.md](apps/api/README.md)\n- Web guide: [apps/web/README.md](apps/web/README.md)\n- Contributor rules: [AGENTS.md](AGENTS.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falbugowy15%2Fstreamforge","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falbugowy15%2Fstreamforge","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falbugowy15%2Fstreamforge/lists"}