[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-5723":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":17,"stars30d":18,"stars90d":16,"forks30d":16,"starsTrendScore":19,"compositeScore":20,"rankGlobal":10,"rankLanguage":10,"license":21,"archived":22,"fork":22,"defaultBranch":23,"hasWiki":24,"hasPages":22,"topics":25,"createdAt":10,"pushedAt":10,"updatedAt":29,"readmeContent":30,"aiSummary":31,"trendingCount":16,"starSnapshotCount":16,"syncStatus":32,"lastSyncTime":33,"discoverSource":34},5723,"webrtc","webrtc-rs\u002Fwebrtc","webrtc-rs","Async-friendly WebRTC implementation in Rust","https:\u002F\u002Fwebrtc.rs",null,"Rust",5050,487,75,14,0,8,32,4,39.07,"Apache License 2.0",false,"master",true,[26,27,28,5],"async","rtc","rust","2026-06-12 02:01:14","\u003Ch1 align=\"center\">\n \u003Ca href=\"https:\u002F\u002Fwebrtc.rs\">\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fwebrtc-rs\u002Fwebrtc-rs.github.io\u002Fmaster\u002Fres\u002Fwebrtc.rs.png\" alt=\"WebRTC.rs\">\u003C\u002Fa>\n \u003Cbr>\n\u003C\u002Fh1>\n\u003Cp align=\"center\">\n \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fwebrtc-rs\u002Fwebrtc\u002Factions\">\n  \u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fwebrtc-rs\u002Fwebrtc\u002Fworkflows\u002Fcargo\u002Fbadge.svg\">\n \u003C\u002Fa>\n \u003Ca href=\"https:\u002F\u002Fcodecov.io\u002Fgh\u002Fwebrtc-rs\u002Fwebrtc\">\n  \u003Cimg src=\"https:\u002F\u002Fcodecov.io\u002Fgh\u002Fwebrtc-rs\u002Fwebrtc\u002Fbranch\u002Fmaster\u002Fgraph\u002Fbadge.svg\">\n \u003C\u002Fa>\n \u003Ca href=\"https:\u002F\u002Fdeps.rs\u002Frepo\u002Fgithub\u002Fwebrtc-rs\u002Fwebrtc\">\n  \u003Cimg src=\"https:\u002F\u002Fdeps.rs\u002Frepo\u002Fgithub\u002Fwebrtc-rs\u002Fwebrtc\u002Fstatus.svg\">\n \u003C\u002Fa>\n \u003Ca href=\"https:\u002F\u002Fcrates.io\u002Fcrates\u002Fwebrtc\">\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fcrates\u002Fv\u002Fwebrtc.svg\">\n \u003C\u002Fa>\n \u003Ca href=\"https:\u002F\u002Fdocs.rs\u002Fwebrtc\">\n  \u003Cimg src=\"https:\u002F\u002Fdocs.rs\u002Fwebrtc\u002Fbadge.svg\">\n \u003C\u002Fa>\n \u003Ca href=\"https:\u002F\u002Fdoc.rust-lang.org\u002F1.6.0\u002Fcomplement-project-faq.html#why-dual-mitasl2-license\">\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-MIT%2FApache--2.0-blue\" alt=\"License: MIT\u002FApache 2.0\">\n \u003C\u002Fa>\n \u003Ca href=\"https:\u002F\u002Fdiscord.gg\u002F4Ju8UHdXMs\">\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fdiscord\u002F800204819540869120?logo=discord\" alt=\"Discord\">\n \u003C\u002Fa>\n \u003Ca href=\"https:\u002F\u002Ftwitter.com\u002FWebRTCrs\">\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Ftwitter\u002Furl\u002Fhttps\u002Ftwitter.com\u002Fwebrtcrs.svg?style=social&label=%40WebRTCrs\" alt=\"Twitter\">\n \u003C\u002Fa>\n\u003C\u002Fp>\n\u003Cp align=\"center\">\n Async-friendly WebRTC implementation in Rust\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n\u003Cstrong>Sponsored with 💖 by\u003C\u002Fstrong>\u003Cbr>\n\u003C\u002Fp>\n\u003Cp align=\"center\">\n\u003Cstrong>Gold Sponsors:\u003C\u002Fstrong>\u003Cbr>\n\u003Ca href=\"https:\u002F\u002Fwww.recall.ai\" target=\"_blank\">\n\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fwebrtc-rs\u002Fwebrtc-rs.github.io\u002Fmaster\u002Fres\u002Frecall_md.svg\"\nalt=\"Recall.ai\">\n\u003C\u002Fa>\u003Cbr>\n\u003Cp align=\"center\">\n\u003Cstrong>Silver Sponsors:\u003C\u002Fstrong>\u003Cbr>\n\u003Ca href=\"https:\u002F\u002Fgetstream.io\u002Fvideo\u002Fvoice-calling\u002F?utm_source=https:\u002F\u002Fgithub.com\u002Fwebrtc-rs\u002Fwebrtc&utm_medium=sponsorship&utm_content=&utm_campaign=webrtcRepo_July2023_video_klmh22\" target=\"_blank\">\n\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fwebrtc-rs\u002Fwebrtc-rs.github.io\u002Fmaster\u002Fres\u002Fstream-logo.png\" height=\"50\" alt=\"Stream Chat\">\n\u003C\u002Fa>\u003Cbr>\n\u003Ca href=\"https:\u002F\u002Fchannel.io\u002F\" target=\"_blank\">\n\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fwebrtc-rs\u002Fwebrtc-rs.github.io\u002Fmaster\u002Fres\u002FChannelTalk_logo_md.png\" alt=\"ChannelTalk\">\n\u003C\u002Fa>\u003Cbr>\n\u003Cstrong>Bronze Sponsors:\u003C\u002Fstrong>\u003Cbr>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FAdrianEddy\" target=\"_blank\">AdrianEddy\u003C\u002Fa>\u003Cbr>\n\u003C\u002Fp>\n\n\u003C!--details>\n\u003Csummary>\u003Cb>Table of Content\u003C\u002Fb>\u003C\u002Fsummary>\n\n- [Overview](#overview)\n- [Open Source License](#open-source-license)\n- [Contributing](#contributing)\n\n\u003C\u002Fdetails-->\n\n## Overview\n\nWebRTC.rs is an async-friendly WebRTC implementation in Rust, originally inspired by and largely rewriting the Pion\nstack. The project is currently evolving into a clean, ergonomic, runtime-agnostic implementation that works with any\nasync runtime (Tokio, async-std, smol, embassy).\n\n**Architecture:**\n\n- **[rtc](https:\u002F\u002Fgithub.com\u002Fwebrtc-rs\u002Frtc)**: Sans-I\u002FO protocol core with complete WebRTC stack (95%+ W3C API\n  compliance)\n- **webrtc** (this crate): Async-friendly API with runtime abstraction layer\n\n**📖 Learn more:** Read\nour [architecture blog post](https:\u002F\u002Fwebrtc.rs\u002Fblog\u002F2026\u002F01\u002F31\u002Fasync-friendly-webrtc-architecture.html) for design\ndetails and roadmap.\n\n### 🚨 Important Notice: v0.17.x Feature Freeze & v0.20.0+ Development\n\n**v0.17.x is the final feature release of the Tokio-coupled async WebRTC implementation.**\n\n#### Current Status (February 2026)\n\n- **v0.17.x branch**: Receives **bug fixes only** (no new features). Use this for Tokio-based production applications.\n- **Master branch**: Under active development for **v0.20.0** with new Sans-I\u002FO architecture and runtime abstraction.\n\n#### **What's Changing in upcoming v0.20.0+?**\n\nThe new architecture will address critical issues in v0.17.x:\n\n- ❌ Callback hell and Arc explosion\n- ❌ Resources leak in callback\n- ❌ Tight Tokio coupling (cannot use async-std, smol, embassy)\n\n**v0.20.0+ will provide:**\n\n✅ **Runtime Independence**\n\n- Support for Tokio, async-std, smol, embassy via Quinn-style runtime abstraction\n- Feature flags: `runtime-tokio` (default), `runtime-async-std`, `runtime-smol`, `runtime-embassy`\n\n✅ **Clean Event Handling**\n\n- Trait-based event handlers with native `async fn in trait`\n- No more callback Arc cloning or `Box::new(move |...| Box::pin(async move { ... }))`\n- Centralized state management with `&mut self`\n\n✅ **Sans-I\u002FO Foundation**\n\n- Protocol logic completely separate from I\u002FO (via [rtc](https:\u002F\u002Fgithub.com\u002Fwebrtc-rs\u002Frtc) crate)\n- Deterministic testing without real network I\u002FO\n- Zero-cost abstractions\n\n#### **How to Provide Feedback**\n\nWe're actively designing v0.20.0+ and welcome your input:\n\n- Review the [architecture blog post](https:\u002F\u002Fwebrtc.rs\u002Fblog\u002F2026\u002F01\u002F31\u002Fasync-friendly-webrtc-architecture.html)\n- Join discussions on [GitHub Issues](https:\u002F\u002Fgithub.com\u002Fwebrtc-rs\u002Fwebrtc\u002Fissues)\n- Chat with us on [Discord](https:\u002F\u002Fdiscord.gg\u002F4Ju8UHdXMs)\n\n**For production use:** Stick with v0.17.x branch until v0.20.0+ is stable.  \n**For early adopters:** Follow master branch development and provide feedback!\n\n## Building and Testing\n\n```bash\n# Update rtc submodule first\ngit submodule update --init --recursive\n\n# Build the library\ncargo build\n\n# Run tests\ncargo test\n\n# Build documentation\ncargo doc --open\n\n# Run examples\ncargo run --example data-channels\n```\n\n## Semantic Versioning\n\nThis project follows [Semantic Versioning](https:\u002F\u002Fsemver.org\u002F):\n\n- **Patch** (`0.x.Y`): Bug fixes and internal improvements with no public API changes.\n- **Minor** (`0.X.0`): Backwards-compatible additions or deprecations to the public API.\n- **Major** (`X.0.0`): Breaking changes to the public API.\n\nWhile the version is `0.x`, the minor version acts as the major — i.e., a minor bump may include breaking changes. Once\n`1.0.0` is released, full semver stability guarantees apply.\n\nPre-release versions are published with the following suffixes, in order of increasing stability:\n\n- **`-alpha.N`**: Early preview. API is unstable and may change significantly.\n- **`-beta.N`**: Feature-complete for the release. API may still have minor changes.\n- **`-rc.N`**: Release candidate. No further API changes are expected unless critical issues are found.\n\nFor example: `1.0.0-alpha.1` → `1.0.0-beta.1` → `1.0.0-rc.1` → `1.0.0`.\n\n## Open Source License\n\nDual licensing under both MIT and Apache-2.0 is the currently accepted standard by the Rust language community and has\nbeen used for both the compiler and many public libraries since (\nsee \u003Chttps:\u002F\u002Fdoc.rust-lang.org\u002F1.6.0\u002Fcomplement-project-faq.html#why-dual-mitasl2-license>). In order to match the\ncommunity standards, webrtc-rs is using the dual MIT+Apache-2.0 license.\n\n## Contributing\n\nContributors or Pull Requests are Welcome!!!\n","webrtc-rs\u002Fwebrtc 是一个用 Rust 编写的异步友好的 WebRTC 实现。该项目提供了完整的 WebRTC 栈，支持 95% 以上的 W3C API，并且与任何异步运行时（如 Tokio、async-std、smol 和 embassy）兼容。其核心功能包括高效的实时音视频通信和数据传输能力，同时保持了代码的清晰性和易用性。适合用于需要高性能、低延迟的实时通信场景，例如在线会议、远程教育、游戏直播等。",2,"2026-06-11 03:04:54","top_language"]