#connection-pool #pool #no-alloc #non-blocking #no-std

no-std swimming

Dive into Efficiency with Swimming: A High-Performance, No-Nonsense Connection Pool

3 releases

0.1.2 Apr 1, 2024
0.1.1 Mar 4, 2024
0.1.0 Mar 4, 2024

#464 in Concurrency

Download history 234/week @ 2024-03-04 7/week @ 2024-03-11 206/week @ 2024-04-01

222 downloads per month


463 lines


swimming is a no_std, no_alloc, high-performance, asynchronous, thread-safe, and fair connection pooling crate for Rust. It provides a simple and efficient way to manage and reuse connections in your applications.


  • no_std and no_alloc compatibility
  • High performance with lazy and eager connection initialization
  • Asynchronous and thread-safe operations
  • Fair connection retrieval mechanism
  • Flexible and extensible design
  • Robust error handling
  • Environment agnostic


To use swimming in your Rust project, add the following to your Cargo.toml file:

swimming = "0.1.2"


Here's a simple example of how to use swimming:

use swimming::{Pool, Connection};
use std::net::SocketAddr;

struct MyConnection;

impl Connection for MyConnection {
    type Context = SocketAddr;
    type Error = ();

    async fn create(_ctx: &SocketAddr) -> Result<Self, Self::Error> {

    fn needs_health_check(&mut self, _ctx: &SocketAddr) -> bool {

    async fn health_check(&mut self, _ctx: &SocketAddr) -> Result<(), ()> {

async fn example() {
    // create the pool providing the context, in general usage this would be details primarily pertinent to creating
    // the connection. 
    let pool = Pool::<MyConnection, 10>::new("".parse().unwrap());

    let conn = pool.get().await.unwrap();
    // Use the connection...

For more detailed usage examples and API documentation, please refer to the Pool's documentation.


This crate is licensed under the MIT or Apache 2.0 license at your preference.


~366K SLoC