#buffer #networking #buf #vec #byte-buffer #read-write #io


The simple to use, growable, contiguous buffer object with right assumptions and interface. Tuned for using it for network buffers.

15 releases

Uses old Rust 2015

0.4.1 Apr 14, 2018
0.4.0 Mar 18, 2017
0.3.8 Dec 12, 2016
0.3.7 Nov 24, 2016
0.1.0 Jul 24, 2015

#365 in Memory management

Download history 117/week @ 2024-03-13 91/week @ 2024-03-20 111/week @ 2024-03-27 132/week @ 2024-04-03 65/week @ 2024-04-10 84/week @ 2024-04-17 92/week @ 2024-04-24 75/week @ 2024-05-01 88/week @ 2024-05-08 90/week @ 2024-05-15 83/week @ 2024-05-22 72/week @ 2024-05-29 63/week @ 2024-06-05 59/week @ 2024-06-12 88/week @ 2024-06-19 49/week @ 2024-06-26

269 downloads per month
Used in 20 crates (8 directly)


867 lines


Documentation | Github | Crate

The network buffer for usage in asynchronous network applications. Has right interface for reading from network into the Buf and for parsing packets directly from it. It also has capacity management tuned for network application (i.e. it starts growing fast, but deallocated for idle connections).


Licensed under either of


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



Documentation | Github | Crate

This module currently includes single Buf struct for holding buffers. Comparing to Vec class buffer has different allocation policy and has a marker of consumed data (i.e. already processed by protocol parser or already written to socket)

The Buf is deemed good both for input and output network buffer.

It also contains helper methods read_from and write_to which are used to read and append bytes from stream that implements Read and write bytes from buffer to a stream which implements Write respectively.

Note there are basically three ways to fill the buffer:

  • Buf::read_from -- preallocates some chunk and gives it to object implemeting Read
  • Write::write -- writes chunk to buffer assuming more data will follow shortly, i.e. it does large preallocations
  • Buf::extend -- writes chunk to buffer assuming it will not grow in the near perspective, so it allocates minimum chunk to hold the data

In other words you should use:

  • Buf::read_from -- to read from the network
  • Write::write -- when you are constructing object directly to the buffer incrementally
  • Buf::extend -- when you put whole object in place and give it to the network code for sending

More documentation is found in Buf object itself

No runtime deps