#async #serde #serialization


Send and receive Serde encodable types over the network using Tokio. This library is used as a building block for serialization format specific libraries

12 releases (breaking)

0.8.0 Dec 24, 2020
0.7.1 Oct 31, 2020
0.6.1 Mar 23, 2020
0.6.0 Dec 8, 2019
0.0.0 Mar 14, 2017

#71 in Encoding

Download history 2654/week @ 2020-12-29 6200/week @ 2021-01-05 5471/week @ 2021-01-12 4216/week @ 2021-01-19 4248/week @ 2021-01-26 3967/week @ 2021-02-02 4078/week @ 2021-02-09 3859/week @ 2021-02-16 4244/week @ 2021-02-23 4142/week @ 2021-03-02 5457/week @ 2021-03-09 4818/week @ 2021-03-16 4923/week @ 2021-03-23 7871/week @ 2021-03-30 13825/week @ 2021-04-06 8250/week @ 2021-04-13

17,586 downloads per month
Used in 36 crates (12 directly)


338 lines

Tokio Serialize / Deserialize

Utilities needed to easily implement a Tokio transport using serde for serialization and deserialization of frame values.



To use tokio-serde, first add this to your Cargo.toml:

tokio-serde = "0.8"

Next, add this to your crate:

use tokio_serde::{Serializer, Deserializer, Framed};


This project is licensed under either of

at your option.


Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in iovec by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.


This crate provides the utilities needed to easily implement a Tokio transport using serde for serialization and deserialization of frame values.


This crate provides transport combinators that transform a stream of frames encoded as bytes into a stream of frame values. It is expected that the framing happens at another layer. One option is to use a length delimited framing transport.

The crate provides two traits that must be implemented: Serializer and Deserializer. Implementations of these traits are then passed to Framed along with the upstream Stream or Sink that handles the byte encoded frames.

By doing this, a transformation pipeline is built. For reading, it looks something like this:

  • tokio_serde::Framed
  • tokio_util::codec::FramedRead
  • tokio::net::TcpStream

The write half looks like:

  • tokio_serde::Framed
  • tokio_util::codec::FramedWrite
  • tokio::net::TcpStream


For an example, see how JSON support is implemented:


~30K SLoC