{"id":25939027,"url":"https://github.com/ScuffleCloud/scuffle","last_synced_at":"2025-03-04T04:02:20.700Z","repository":{"id":65559699,"uuid":"594510762","full_name":"ScuffleCloud/scuffle","owner":"ScuffleCloud","description":"Opensource Cloud Provider (focusing on video streaming)","archived":false,"fork":false,"pushed_at":"2025-03-03T00:40:37.000Z","size":12481,"stargazers_count":297,"open_issues_count":7,"forks_count":30,"subscribers_count":15,"default_branch":"main","last_synced_at":"2025-03-03T07:15:21.880Z","etag":null,"topics":["live","opensource","rust","streaming","svelte","video"],"latest_commit_sha":null,"homepage":"https://scuffle.cloud","language":"Rust","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/ScuffleCloud.png","metadata":{"files":{"readme":"README.md","changelog":"changes.d/README.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.AGPL-3.0","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":".github/SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"scufflecloud","open_collective":"scuffle"}},"created_at":"2023-01-28T19:17:28.000Z","updated_at":"2025-03-03T00:40:39.000Z","dependencies_parsed_at":"2023-09-25T03:57:07.750Z","dependency_job_id":"65e329b2-4d47-4d30-873c-4602144d3992","html_url":"https://github.com/ScuffleCloud/scuffle","commit_stats":{"total_commits":71,"total_committers":9,"mean_commits":7.888888888888889,"dds":0.352112676056338,"last_synced_commit":"c0580a621d824cc8097f88a76f47f6b313fcee99"},"previous_names":["scufflecloud/scuffle"],"tags_count":57,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ScuffleCloud%2Fscuffle","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ScuffleCloud%2Fscuffle/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ScuffleCloud%2Fscuffle/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ScuffleCloud%2Fscuffle/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ScuffleCloud","download_url":"https://codeload.github.com/ScuffleCloud/scuffle/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241780503,"owners_count":20019061,"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":["live","opensource","rust","streaming","svelte","video"],"created_at":"2025-03-04T04:02:19.908Z","updated_at":"2025-03-04T04:02:20.693Z","avatar_url":"https://github.com/ScuffleCloud.png","language":"Rust","funding_links":["https://github.com/sponsors/scufflecloud","https://opencollective.com/scuffle"],"categories":["Rust"],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n    \u003ch1\u003eScuffle\u003c/h1\u003e\n    \u003ch3\u003eA next-generation open-source cloud provider\u003c/h3\u003e\n\u003c/div\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://twitter.com/scufflecloud\"\u003e\u003cimg height=\"30\" src=\"https://img.shields.io/badge/Twitter-000000?style=for-the-badge\u0026logo=x\u0026logoColor=white\"\u003e\u003c/a\u003e\n    \u0026nbsp;\n    \u003ca href=\"https://bsky.app/profile/scuffle.cloud\"\u003e\u003cimg height=\"30\" src=\"https://img.shields.io/badge/Bluesky-00A0FF?style=for-the-badge\u0026logo=bluesky\u0026logoColor=white\"\u003e\u003c/a\u003e\n    \u0026nbsp;\n    \u003ca href=\"https://discord.gg/scuffle\"\u003e\u003cimg height=\"30\" src=\"https://img.shields.io/badge/Discord-5865f2?style=for-the-badge\u0026logo=discord\u0026logoColor=white\"\u003e\u003c/a\u003e\n    \u0026nbsp;\n    \u003ca href=\"https://linkedin.com/company/scufflecloud\"\u003e\u003cimg height=\"30\" src=\"https://img.shields.io/badge/LinkedIn-0A66C2?style=for-the-badge\u0026logo=linkedin\u0026logoColor=white\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://opencollective.com/scuffle\"\u003e\u003cimg height=\"30\" src=\"https://img.shields.io/badge/support us-764bd1?style=for-the-badge\u0026logo=opencollective\u0026logoColor=white\u0026labelColor=gray\"/\u003e\u003c/a\u003e\n    \u0026nbsp;\n    \u003ca href=\"https://jira.scuffle.cloud\"\u003e\u003cimg height=\"30\" src=\"https://img.shields.io/badge/issue tracker-0052CC?style=for-the-badge\u0026logo=jira\u0026logoColor=white\u0026labelColor=gray\"/\u003e\u003c/a\u003e\n    \u0026nbsp;\n    \u003ca href=\"#\"\u003e\u003cimg height=\"30\" src=\"https://img.shields.io/badge/made with ❤️-f0a63e?style=for-the-badge\u0026logo=rust\u0026logoColor=white\u0026labelColor=gray\"/\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://codecov.io/gh/ScuffleCloud/scuffle\"\u003e\u003cimg height=\"30\" src=\"https://img.shields.io/codecov/c/github/ScuffleCloud/scuffle?logo=codecov\u0026token=LJCYSZR4IV\u0026style=for-the-badge\"/\u003e\u003c/a\u003e\n    \u0026nbsp;\n    \u003ca href=\"https://github.com/ScuffleCloud/scuffle/actions?query=branch%3Amain\"\u003e\u003cimg height=\"30\" src=\"https://img.shields.io/github/check-runs/ScuffleCloud/Scuffle/main?style=for-the-badge\u0026logo=githubactions\u0026logoColor=white\"/\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003e [!WARNING]  \n\u003e This repository is under active development and may not be stable.\n\n---\n\nWelcome to **Scuffle**—a next-generation **open-source cloud provider**! 🚀\n\nWe're on a mission to revolutionize **video streaming solutions** with cutting-edge tools and libraries. Dive in and explore what we have to offer! 🔗 [Visit our website](https://scuffle.cloud) to learn more.\n\n## 🛠️ Crates\n\nThis repository houses a collection of crates, purpose-built libraries designed to simplify development and enhance functionality:\n\n- ⚡ **[scuffle-batching](./crates/batching)**:  Optimized batching and dataloading for external services.\n- 🚀 **[scuffle-bootstrap](./crates/bootstrap)**:  A utility crate for creating binaries.\n  - 🔧 **[scuffle-bootstrap-derive](./crates/bootstrap/derive)**:  Derive macros for `scuffle-bootstrap`.\n  - 🔭 **[scuffle-bootstrap-telemetry](./crates/bootstrap/telemetry)**:  Telemetry utilities for `scuffle-bootstrap`.\n- 📦 **[scuffle-bytes-util](./crates/bytes-util)**:  Some helpful utilities for working with bits and bytes.\n- 🧭 **[scuffle-context](./crates/context)**:  Go-like context utilities for Rust.\n- ⌛ **[scuffle-future-ext](./crates/future-ext)**:  Extensions for working with futures.\n- 📡 **[scuffle-h3-webtransport](./crates/h3-webtransport)**:  Enhanced fork of the [h3-webtransport](https://crates.io/crates/h3-webtransport) crate tailored for Scuffle.\n- 🦈 **[scuffle-http](./crates/http)**:  A high-performance HTTP server supporting HTTP/1.1, HTTP/2, and HTTP/3.\n- 📊 **[scuffle-metrics](./crates/metrics)**:  Helper crate to instrument your code with metrics.\n  - 🔧 **[scuffle-metrics-derive](./crates/metrics/derive)**:  Derive macros for `scuffle-metrics`.\n- 📦 **[postcompile](./crates/postcompile)**:  A macro for compiling Rust code at runtime. Useful for snapshot testing.\n- 📈 **[scuffle-pprof](./crates/pprof)**:  Helper crate for adding pprof support to your application.\n- ⚙️ **[scuffle-settings](./crates/settings)**:  Tools for managing configuration from environment variables or config files.\n- 📶 **[scuffle-signal](./crates/signal)**:  Ergonomic async signal handling.\n\n### 🎥 Multimedia Crates\n\nApart from utility crates, we also offer a range of multimedia crates to encode, decode, and transmux media files and streams:\n\n- 🔉 **[scuffle-aac](./crates/aac)**:  A crate for decoding AAC audio headers.\n- 🗃️ **[scuffle-amf0](./crates/amf0)**:  A pure-rust implementation of AMF0 encoder and decoder.\n- 🎥 **[scuffle-av1](./crates/av1)**:  A crate for decoding and encoding AV1 video headers.\n- 🧮 **[scuffle-expgolomb](./crates/expgolomb)**:  A set of helper functions to encode and decode exponential-golomb values.\n- 🎞️ **[scuffle-ffmpeg](./crates/ffmpeg)**:  A safe Rust wrapper around FFmpeg C-bindings.\n- 🎥 **[scuffle-flv](./crates/flv)**:  A pure Rust implementation of the FLV format, allowing for demuxing of FLV files or streams.\n\u003c!-- - 🎥 **[scuffle-h264](./crates/h264)**: --\u003e\n\u003c!-- - 🎥 **[scuffle-h265](./crates/h265)**: --\u003e\n\u003c!-- - 🎥 **[scuffle-mp4](./crates/mp4)**: --\u003e\n\u003c!-- - 🎥 **[scuffle-rtmp](./crates/rtmp)**: --\u003e\n\u003c!-- - 🎥 **[scuffle-transmuxer](./crates/transmuxer)**: --\u003e\n\n---\n\n## 🤝 Join the Scuffle Community\n\nWe ❤️ contributions! Check out our [**CONTRIBUTING.md**](./CONTRIBUTING.md) for detailed guidelines on submitting improvements or bug fixes.\n\nJoin our [Discord](https://discord.gg/scuffle) to chat with the team and other contributors.\n\n### Sign the Contributor License Agreement (CLA)\n\nTo contribute, please sign our [Contributor License Agreement](./CLA.md).  \nIt's quick and easy—[sign here](https://cla.scuffle.cloud) before submitting a pull request.\n\n### Code of Conduct\n\nWe believe in fostering an inclusive and respectful community.  \nPlease read our [**Code of Conduct**](./CODE_OF_CONDUCT.md) for more details.\n\n## 💖 Support Us\n\nIf you find Scuffle valuable, consider supporting us on [**Open Collective**](https://opencollective.com/scuffle). Your contributions help us continue to improve and maintain this open-source project.\n\n[![Open Collective](https://a11ybadges.com/badge?logo=opencollective)](https://opencollective.com/scuffle)\n\n---\n\n## 📜 Licensing Overview\n\nScuffle uses **different licenses** for various components. Here's a quick general overview:\n\n- **Libraries**: Licensed under [MIT](./LICENSE.MIT) or [Apache-2.0](./LICENSE.Apache-2.0).\n- **Executable Binaries**: Licensed under [AGPL-3.0](./LICENSE.AGPL-3.0).\n\nEach component includes specific licensing details in its `README.md` and corresponding license files. For any questions, feel free to [open an issue](https://github.com/ScuffleCloud/scuffle/issues) or email us at [legal@scuffle.cloud](mailto:legal@scuffle.cloud).\n\n---\n\n## 🛡️ Security Matters\n\nYour security is our priority. 🔒 Refer to our [**Security Policy**](./.github/SECURITY.md) for guidelines on reporting vulnerabilities.\n\n---\n\n## 📋 Additional Resources\n\n- 🔍 [**Public Issue Tracker**](https://jira.scuffle.cloud)\n- 📊 [**Kanban Board**](https://scuffle.notion.site)\n- 📰 [**Scuffle Blog**](https://bytes.scuffle.cloud)\n\n---\n\n## ⭐ Star History\n\n[![Star History Chart](https://api.star-history.com/svg?repos=scufflecloud/scuffle\u0026type=Date)](https://star-history.com/#scufflecloud/scuffle\u0026Date)\n\n---\n\n*Thank you for being part of our journey! Let's build something amazing together.* ✨\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FScuffleCloud%2Fscuffle","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FScuffleCloud%2Fscuffle","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FScuffleCloud%2Fscuffle/lists"}