Global-Scale Media Server written in Rust (WebRTC/RTMP/SIP)

Overview

codecov Rust

8xFF Media Server: Global-Scale Ultra-Low Latency Streaming Server written in Rust

A media server that supports multiple protocols, including WebRTC, RTMP, and SIP. It is designed to handle media streaming at a planet-scale level, making it suitable for large-scale applications. It is designed with SAN-I/O in mind.

Status: Active Development

This server is the next version of media-server, which is used in some SaaS services like Video Call, Elearning, and Broadcasting companies in Vietnam. We are working on it to create a more robust and extensible media-server for multi-purpose usage. This project is in active development, and the API can change.

We have a release plan scheduled for the end of 2023.

What Makes it Different from Other Media Servers

  • First, it is written in Rust. After a long time writing media-servers with C++, we decided to switch entirely to Rust for safety but remain performance. The Rust ecosystem also supports us a lot.
  • Next, it uses an ultra-low latency SDN as a data transfer layer with native Pub/Sub style, which allows us to create a huge media server system across many regions. Imagine a user can access any server that is closest to them, then SDN takes care of the others. That allows us to create something like Earth Region or Planet Region. It seems to be liked by Cloudflare interconnected network. More information about SDN an be found at SDN Routing

Interconnected network

With the above reasons, 8xFF Media Server's vision is to create a full-featured solution for:

  • Overseas video conferences
  • Large webinars/broadcasting
  • High-quality communication applications

Features

  • Planet-level Scalable, decentralized WebRTC SFU (Selective Forwarding Unit)
  • Modern, full-featured client SDKs
  • Built for production
  • Easy to deploy: single binary, Docker, or Kubernetes
  • Advanced features including:

Why Rust

We chose Rust for this project due to its exceptional performance and safety features. Rust is a system programming language that guarantees thread safety without needing a garbage collector. It provides low-level control over system resources, making it ideal for system-level tasks, such as implementing a high-performance networking system.

Why SAN-I/O

Media Server will receive huge data transfer and run for very long time, we must avoid bugs as much as possible to avoid interrupting sensitive applications like Video/Audio calls, or large webinar sessions. If logic code depends on I/O, it will be harder for testing, so we chose San-I/O model to decouple logic and I/O as much as possible for easier testing purposes.

Docs

TODO

Live Demos & Samples

TODO

SDKs

  • JS (public soon)
  • React (public soon)
  • React Native (public soon)
  • Rust (public soon)
  • Flutter (contributor welcome)
  • Native iOS (contributor welcome)
  • Native Android (contributor welcome)
Comments
  • Bump runner from `6dd98f5` to `a6f1998`

    Bump runner from `6dd98f5` to `a6f1998`

    Bumps runner from 6dd98f5 to a6f1998.

    Commits

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 2
  • Bump criterion from 0.4.0 to 0.5.1

    Bump criterion from 0.4.0 to 0.5.1

    Bumps criterion from 0.4.0 to 0.5.1.

    Changelog

    Sourced from criterion's changelog.

    [0.5.1] - 2023-05-26

    Fixed

    • Quick mode (--quick) no longer crashes with measured times over 5 seconds when --noplot is not active

    [0.5.0] - 2023-05-23

    Changed

    • Replaced lazy_static dependency with once_cell
    • Improved documentation of the html_reports feature
    • Replaced atty dependency with is-terminal
    • MSRV bumped to 1.64
    • Upgraded clap dependency to v4
    • Upgraded tempfile dependency to v3.5.0

    Fixed

    • Quick mode (--quick) no longer outputs 1ms for measured times over 5 seconds
    • Documentation updates
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 2
  • Bump str0m from `1f1f586` to `57e524b`

    Bump str0m from `1f1f586` to `57e524b`

    Bumps str0m from 1f1f586 to 57e524b.

    Commits

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • Bump serde from 1.0.190 to 1.0.191

    Bump serde from 1.0.190 to 1.0.191

    Bumps serde from 1.0.190 to 1.0.191.

    Release notes

    Sourced from serde's releases.

    v1.0.191

    • Documentation improvements
    Commits
    • 59892e7 Release 1.0.191
    • 97dd07a Merge pull request #2647 from dtolnay/doccfg
    • c8bc97c Document "rc" and "unstable" features on docs.rs
    • 9dacfbb Fill in more doc(cfg) attributes
    • 05c2509 Relocate cfg attrs into deref_impl
    • 64f949b Relocate cfg attrs into parse_ip_impl and parse_socket_impl
    • 3f339de Relocate cfg attrs into seq_impl and map_impl
    • 215c2b7 Relocate cfg attrs into forwarded_impl macro
    • ce8fef7 Show that derives are specific to feature="derive" in documentation
    • 0726b2c Enable feature(doc_cfg) during docs.rs documentation build
    • See full diff in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • Bump rustix from 0.37.24 to 0.37.27

    Bump rustix from 0.37.24 to 0.37.27

    Bumps rustix from 0.37.24 to 0.37.27.

    Commits
    • b38dc51 chore: Release rustix version 0.37.27
    • a2d9c8e Fix p{read,write}v{,v2}'s encoding of the offset argument on Linux. (#896) (#...
    • dce2777 chore: Release rustix version 0.37.26
    • 06dbe83 Fix sendmsg_unix's address encoding. (#885) (#886)
    • 00b84d6 chore: Release rustix version 0.37.25
    • cad15a7 Fixes for Dir on macOS, FreeBSD, and WASI.
    • df3c3a1 Merge pull request from GHSA-c827-hfw6-qwvm
    • See full diff in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the Security Alerts page.
    dependencies 
    opened by dependabot[bot] 1
  • Update actions/checkout action to v4

    Update actions/checkout action to v4

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | actions/checkout | action | major | v2 -> v4 |


    Release Notes

    actions/checkout (actions/checkout)

    v4

    Compare Source

    v3

    Compare Source


    Configuration

    đź“… Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    â™» Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 1
  • Update Rust crate sorted-vec to 0.8 - autoclosed

    Update Rust crate sorted-vec to 0.8 - autoclosed

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | sorted-vec | dependencies | minor | 0.7 -> 0.8 |


    Configuration

    đź“… Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    â™» Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 1
  • Bump serde from 1.0.188 to 1.0.190

    Bump serde from 1.0.188 to 1.0.190

    Bumps serde from 1.0.188 to 1.0.190.

    Release notes

    Sourced from serde's releases.

    v1.0.190

    • Preserve NaN sign when deserializing f32 from f64 or vice versa (#2637)

    v1.0.189

    • Fix "cannot infer type" error when internally tagged enum contains untagged variant (#2613, thanks @​ahl)
    Commits
    • edb1a58 Release 1.0.190
    • 11c2917 Merge pull request #2637 from dtolnay/nansign
    • 6ba9c12 Float copysign does not exist in libcore yet
    • d2fcc34 Ensure f32 deserialized from f64 and vice versa preserve NaN sign
    • a091a07 Add float NaN tests
    • bb4135c Fix unused imports
    • 8de84b7 Resolve get_first clippy lint
    • 9cdf332 Remove 'remember to update' reminder from Cargo.toml
    • e94fc65 Release 1.0.189
    • b908487 Remove double nesting of first_attempt
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • Bump async-trait from 0.1.73 to 0.1.74

    Bump async-trait from 0.1.73 to 0.1.74

    Bumps async-trait from 0.1.73 to 0.1.74.

    Release notes

    Sourced from async-trait's releases.

    0.1.74

    • Documentation improvements
    Commits
    • 265979b Release 0.1.74
    • 5e67709 Fix doc test when async fn in trait is natively supported
    • ef144ae Update ui test suite to nightly-2023-10-15
    • 9398a28 Test docs.rs documentation build in CI
    • 8737173 Update ui test suite to nightly-2023-09-24
    • 5ba643c Test dyn Trait containing async fn
    • 247c8e7 Add ui test testing the recommendation to use async-trait
    • 799db66 Update ui test suite to nightly-2023-09-23
    • 0e60248 Update actions/checkout@v3 -> v4
    • 7fcbc83 Update ui test suite to nightly-2023-08-29
    • See full diff in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • Bump lz4_flex from 0.9.5 to 0.11.1

    Bump lz4_flex from 0.9.5 to 0.11.1

    Bumps lz4_flex from 0.9.5 to 0.11.1.

    Release notes

    Sourced from lz4_flex's releases.

    0.11

    Documentation

    • Docs: add decompress block example

    Fixes

    • Handle empty input in Frame Format #120
    Empty input was ignored previously and didn't write anything. Now an empty Frame is written. This improves compatibility with the reference implementation and some corner cases.
    
    • Fix: Small dict leads to panic #133
    compress_into_with_dict panicked when the dict passed was smaller than 4 bytes. A match has the minimum length of 4 bytes, smaller dicts will be ignored now.
    

    Features

    • [breaking] invert checked-decode to unchecked-decode #134
    invert `checked-decode` feature flag to `unchecked-decode`
    Previously setting `default-features=false` removed the bounds checks from the
    `checked-decode` feature flag. `unchecked-decode` inverts this, so it will needs to be
    deliberately deactivated.
    

    To migrate, just remove the checked-decode feature flag.

    • Allow to pass buffer larger than size #78
    This removes an unnecessary check in the decompression, when the passed buffer is too big.
    
    • Add auto_finish to FrameEncoder #95 #100
    Empty input was ignored previously and didn't write anything. Now an empty Frame is written. This improves compatibility with the reference implementation and some corner cases.
    
    • Autodetect frame blocksize #81
    The default blocksize of FrameInfo is now auto instead of 64kb, it will detect the blocksize
    depending of the size of the first write call. This increases
    compression ratio and speed for use cases where the data is larger than
    64kb.
    
    This adds in fluent API style construction for FrameInfo. Now you can do
    

    let info = FrameInfo::new() .block_size(BlockSize::Max1MB) .content_checksum(true);

    ... (truncated)

    Changelog

    Sourced from lz4_flex's changelog.

    0.11.1 (2023-06-19)

    0.11.0 (2023-06-18)

    Documentation

    • Docs: add decompress block example

    Fixes

    • Handle empty input in Frame Format #120
    Empty input was ignored previously and didn't write anything. Now an empty Frame is written. This improves compatibility with the reference implementation and some corner cases.
    
    • Fix: Small dict leads to panic #133
    compress_into_with_dict panicked when the dict passed was smaller than 4 bytes. A match has the minimum length of 4 bytes, smaller dicts will be ignored now.
    

    Features

    • [breaking] invert checked-decode to unchecked-decode #134
    invert `checked-decode` feature flag to `unchecked-decode`
    Previously setting `default-features=false` removed the bounds checks from the
    `checked-decode` feature flag. `unchecked-decode` inverts this, so it will needs to be
    deliberately deactivated.
    

    To migrate, just remove the checked-decode feature flag.

    • Allow to pass buffer larger than size #78
    This removes an unnecessary check in the decompression, when the passed buffer is too big.
    
    • Add auto_finish to FrameEncoder #95 #100
    Empty input was ignored previously and didn't write anything. Now an empty Frame is written. This improves compatibility with the reference implementation and some corner cases.
    
    • Autodetect frame blocksize #81
    The default blocksize of FrameInfo is now auto instead of 64kb, it will detect the blocksize
    depending of the size of the first write call. This increases
    compression ratio and speed for use cases where the data is larger than
    64kb.
    </tr></table> 
    

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • Bump serde_json from 1.0.107 to 1.0.108

    Bump serde_json from 1.0.107 to 1.0.108

    ⚠️ Dependabot is rebasing this PR ⚠️

    Rebasing might not happen immediately, so don't worry if this takes some time.

    Note: if you make any changes to this PR yourself, they will take precedence over the rebase.


    Bumps serde_json from 1.0.107 to 1.0.108.

    Release notes

    Sourced from serde_json's releases.

    v1.0.108

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • Dont use unsafe in webrtc transport

    Dont use unsafe in webrtc transport

    https://github.com/8xFF/decentralized-media-server/blob/f6eadb47e7c9845f3ce913ce54d17711bd7a7928/transports/webrtc/src/transport.rs#L270-L273

    This can be avoid by using buf: [u8; 2000] instead. Each cycle we dont need to reset length, just write from beginning then parse slice to Str0m

    opened by giangndm 0
  • Bump env_logger from 0.10.0 to 0.10.1

    Bump env_logger from 0.10.0 to 0.10.1

    Bumps env_logger from 0.10.0 to 0.10.1.

    Changelog

    Sourced from env_logger's changelog.

    [0.10.1] - 2023-11-10

    Commits
    • 36623f5 chore: Release env_logger version 0.10.1
    • 8a033d8 chore: Fix packaging
    • 9df7e6c Merge pull request #241 from ChrisDenton/simple-insert
    • 46ccdd9 perf: Replace HashMap with a Vec
    • bdc96a4 Merge pull request #249 from atouchet/v10
    • 983837c Update links and remove broken badge
    • dcd220d Update listed version number
    • 36b1508 Merge pull request #260 from y-yagi/2018-edition
    • 6f64347 Merge pull request #282 from epage/syntax
    • b297357 chore: Update docs and examples to 2018 edition
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • Bump serde from 1.0.191 to 1.0.192

    Bump serde from 1.0.191 to 1.0.192

    Bumps serde from 1.0.191 to 1.0.192.

    Release notes

    Sourced from serde's releases.

    v1.0.192

    Commits
    • 4676abd Release 1.0.192
    • 35700eb Merge pull request #2646 from robsdedude/fix/2643/allow-tag-field-in-untagged
    • 589549d Allow internal tag field in untagged variant
    • See full diff in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • Bump runner from `6dd98f5` to `c90ea69`

    Bump runner from `6dd98f5` to `c90ea69`

    Bumps runner from 6dd98f5 to c90ea69.

    Commits
    • c90ea69 Update Rust crate async-bincode to 0.7.2 (#44)
    • 8f8fa64 Update actions/checkout action to v4 (#36)
    • 7c2612c Update Rust crate unsigned-varint to 0.8 (#34)
    • 62bb5a4 Update Rust crate percent-encoding to 2.3.0 (#33)
    • c848c2d Update Rust crate url to 2.4.1 (#35)
    • 40c48b2 Update Rust crate clap to 4.4.8 (#30)
    • dc2cc50 refactor to use cross-service sdk in pub-sub (#43)
    • 0448da6 Update support for SDK Internal events, And added some unit tests for Network...
    • 7072dfc Update Rust crate serde to 1.0.192 (#40)
    • e5be4ac Update Rust crate data-encoding to 2.4 (#32)
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Bump clap from 4.4.7 to 4.4.8

    Bump clap from 4.4.7 to 4.4.8

    Bumps clap from 4.4.7 to 4.4.8.

    Release notes

    Sourced from clap's releases.

    v4.4.8

    [4.4.8] - 2023-11-10

    Features

    • Add Command::flatten_help to allow git stash -h like help for subcommands
    Changelog

    Sourced from clap's changelog.

    [4.4.8] - 2023-11-10

    Features

    • Add Command::flatten_help to allow git stash -h like help for subcommands
    Commits
    • 3aeea91 chore: Release
    • 1add9a7 docs: Update changelog
    • 6b2a2cc Merge pull request #5206 from epage/flatten
    • 9c0f7a7 fix(help): Recurse help flattening
    • 4bef91c refactor(help): Pull out flat subcommands
    • c9a7ef0 fix(help): Gloss over globals with flatten
    • 9e5f93d fix(help): Be consistent in long/short help
    • 66d2bcb feat(help): Allow flattening help
    • 3383242 Merge pull request #5205 from epage/flatten-refactor
    • caf5cdc feat(help): Allow flattening usage
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
Owner
8xFF
Open Source Global-Scale SDN for ultra-low latency applications
8xFF
Platform independent data channels for WebRTC/Rust.

preach Platform independent data channels Preach provides an abstraction for WebRTC data channels that runs on both native and web platforms. Preach m

Douglas Dwyer 3 Apr 16, 2023
Static low-bandwidth search at scale

Pagefind Pagefind is a fully static search library that aims to perform well on large sites, while using as little of your users' bandwidth as possibl

CloudCannon 657 Dec 30, 2022
A SCALE-compatible collection of bits

scale-bits · This small utility crate provides two separate things: A Bits type that can be SCALE encoded and decoded, and is fully SCALE compatible w

Parity Technologies 3 Sep 25, 2022
a playground for exploring media capture, processing and publishing with rust

vidrs: a playground for exploring media capture, processing and publishing with rust How to use On a MacOS system with an attached camera you can call

Gilbert Röhrbein 6 Jan 2, 2023
A simple local storage media library manager.

OFFFLIX A simple application to auto manage series on your local storage. Features Resume watching Play next episode Auto increment season Play random

null 33 Mar 7, 2023
🚀simple server that returns error codes with their respective messages and debug information, written in rust 🦀

ErrorServer ?? A simple & lightweight server that returns a HTML page of the error code with its respective message and debug information, written in

Jakob 2 Dec 15, 2022
VoceChat is a superlight rust written social server. Easy integration to your site/app.

Re-decentralized the Internet through personal cloud computing. VoceChat is the lightest chat server prioritizes private hosting! Easy integratation t

Privoce 134 Feb 22, 2023
Stardust XR Reference Server, now in Rust :D

Stardust XR Reference Server This project is a usable Linux display server that reinvents human-computer interaction for all kinds of XR, from putting

Stardust XR 9 Dec 20, 2022
A collection of crates to make minecraft development (client, server) with rust possible.

rust-craft rust-craft is a collection of crates to make minecraft development (client, server) with rust possible. Motivation There's no better way of

JoĂŁo Victor 15 Mar 23, 2023
đź“© steamworks.DownloadUGC for the server!

gmsv_workshop This module allows for servers to use the steamworks.DownloadUGC and steamworks.FileInfo functions, enabling runtime downloading & mount

William 27 Dec 24, 2022
JackTheBox allows for client & server modifications to s&box independent of the current gamemode

JackTheBox allows for client & server modifications to s&box independent of the current gamemode (or even in the absence of a gamemode).

dank 5 Sep 27, 2022
Diosic is an open source web-based music collection server and streamer

Diosic is an open source web-based music collection server and streamer. Mainly suitable for users who need to deploy on servers with low hardware specifications.

Jinker 45 Jan 28, 2023
Simple autoclicker written in Rust, to learn the Rust language.

RClicker is an autoclicker written in Rust, written to learn more about the Rust programming language. RClicker was was written by me to learn more ab

null 7 Nov 15, 2022
Rust programs written entirely in Rust

mustang Programs written entirely in Rust Mustang is a system for building programs built entirely in Rust, meaning they do not depend on any part of

Dan Gohman 561 Dec 26, 2022
clone of grep cli written in Rust. From Chapter 12 of the Rust Programming Language book

minigrep is a clone of the grep cli in rust Minigrep will find a query string in a file. To test it out, clone the project and run cargo run body poem

Raunak Singh 1 Dec 14, 2021
The Rust Compiler Collection is a collection of compilers for various languages, written with The Rust Programming Language.

rcc The Rust Compiler Collection is a collection of compilers for various languages, written with The Rust Programming Language. Compilers Language Co

null 2 Jan 17, 2022
Game Boy Emulator written in Rust, as a way to fully grasp the Rust programming language

Flan's Game Boy Emulator Game Boy Emulator written in Rust, as a way to get hands-on with the Rust programming language, and creating a proper project

Flan 3 Dec 31, 2022
Nixt is an interpreted programming language written in Rust

Nixt Nixt is an interpreted lisp inspired programming language written in Rust Index About Examples Installation Build About Nixt goal is to provide a

Wafelack 17 Jul 18, 2022
Fegeya Elitebuild, small, powerful build system. Written in Rust.

Fegeya Elitebuild Small, powerful, work-in-progress build system. Written in Rust. Features: No functions (all are built-ins) All variables are global

Ferhat Geçdoğan 25 Nov 9, 2022