#http-client #client-server #http-server #tls #limited #io #transport

no-std http_io

A library with limited dependencies containing an HTTP client and server

20 releases

0.2.18 Dec 4, 2022
0.2.17 Sep 10, 2022
0.2.15 Aug 19, 2022
0.2.10 Jul 29, 2021
0.1.0 Mar 13, 2019

#1430 in Network programming

39 downloads per month
Used in 4 crates (2 directly)


3.5K SLoC

http_io Latest Version

Crate containing HTTP client and server.

  • Designed to have limited dependencies, supports #![no_std].
  • Focus on streaming IO.
  • Support for providing your own transport.
  • Supports HTTPS

The no_std build requires nightly since it relies on the alloc crate.


use http_io::error::Result;
use std::fs::File;
use std::io;

fn main() -> Result<()> {
    // Stream contents of url to stdout
    let mut body = http_io::client::get("https://postman-echo.com/get")?;
    io::copy(&mut body, &mut std::io::stdout())?;

    // Stream contents of file to remote server
    let file = File::open("src/client.rs")?;
    http_io::client::put("https://postman-echo.com/put", file)?;

Choosing a TLS backend

By default http_io uses native-tls as its library for TLS (HTTPS support). It supports two other TLS libraries, rustls and openssl. These other "back-ends" can be selected using feaures

$ # If you want to use `rustls`:
$ cargo build --no-default-features --features std,ssl-rustls
$ # If you want to use `openssl`:
$ cargo build --no-default-features --features std,ssl-openssl


~158K SLoC