Make peer-2-peer global works
We provide bindings to the following languages:
We provide many examples, which you can find at Example
- DHT simple store
// create lattica instance let mut lattica = network::Lattica::builder() .with_bootstrap_nodes(bootstrap_nodes.clone()) .build().await?; // put record let current_time = common::time::get_current_timestamp(); let expiration_time = current_time + 600.0; lattica.store_simple("greeting", "Hello, World!".as_bytes().to_vec(), expiration_time).await?; // get record let result = lattica.get_with_subkey("greeting").await?;- DHT subkey store
// create lattica instance let mut lattica = network::Lattica::builder() .with_bootstrap_nodes(bootstrap_nodes.clone()) .build().await?; // put subkey record lattica.store_subkey("party_vote", "alice", "yes".as_bytes().to_vec(), expiration_time).await?; lattica.store_subkey("party_vote", "bob", "yes".as_bytes().to_vec(), expiration_time).await?; lattica.store_subkey("party_vote", "carol", "no".as_bytes().to_vec(), expiration_time).await?; lattica.store_subkey("party_vote", "david", "maybe".as_bytes().to_vec(), expiration_time).await?; // get subkey record lattica.get_with_subkey("party_vote").await?- BitSwap
// create lattica instance let mut lattica = network::Lattica::builder() .with_bootstrap_nodes(bootstrap_nodes.clone()) .build().await?; // put block let cid = lattica.put_block(&BytesBlock("hello".as_bytes().to_vec())).await?; // get block let block = lattica.get_block(&cid).await?; // remove block lattica.remove_block(&cid).await?;- RPC
use lattica::{rpc}; // define RPC request response struct EchoRequest { message: String, } struct EchoResponse { echo: String, timestamp: u64, } // define Service struct ExampleService { service_name: String, } impl ExampleService { fn new() -> Self { Self { service_name: "ExampleService".to_string(), } } } impl rpc::RpcService for ExampleService { fn service_name(&self) -> &str { &self.service_name } fn methods(&self) -> Vec<String> { vec!["echo".to_string()] } async fn handle_request(&self, method: &str, request: rpc::RpcRequest) -> Result<rpc::RpcResponse, String> { match method { "echo" => { let echo_req: EchoRequest = bincode::decode_from_slice(&request.data, bincode::config::standard()) .map(|(data, _)| data) .map_err(|e| format!("Failed to decode echo request: {}", e))?; let response = EchoResponse { echo: format!("Echo: {}", echo_req.message), timestamp: std::time::SystemTime::now() .duration_since(std::time::UNIX_EPOCH) .unwrap() .as_secs(), }; let response_data = bincode::encode_to_vec(&response, bincode::config::standard()) .map_err(|e| format!("Failed to encode echo response: {}", e))?; Ok(rpc::RpcResponse { id: request.id, data: response_data, compression: None, }) } _ => Err(format!("Unknown method: {}", method)), } } } // create lattica instance let mut lattica = network::Lattica::builder() .with_bootstrap_nodes(bootstrap_nodes.clone()) .with_kad(true) .build().await?; // client call let echo_request = EchoRequest {message: "Hello from client!".to_string()}; let request_data = bincode::encode_to_vec(&echo_request, bincode::config::standard())?; match lattica.call(peer_id, "ExampleService.echo".to_string(), request_data).await { Ok(response) => { let echo_response: EchoResponse = bincode::decode_from_slice(&response.data, bincode::config::standard()) .map(|(data, _)| data)?; println!("Echo response: {:?}", echo_response); } Err(e) => println!("Echo RPC failed: {}", e), }We provide a project called lattica-tools, which includes startup programs for common components such as relay and rendezvous.
You can find it at https://github.com/GradientHQ/lattica-tools.
Supports direct connection upgrade through relay (DCUTR) with multiple protocols for efficient NAT traversal, enabling seamless peer-to-peer connections across different network topologies.
Decentralized Content Delivery Network (DCDN) using content addressing for efficient and scalable content distribution across the peer-to-peer network.
Distributed reinforcement learning across the peer-to-peer network, enabling collaborative RL training and policy optimization without centralized infrastructure.
Distributed AI inference capabilities allowing edge devices to collaborate on AI computation tasks, reducing latency and improving performance.
Copyright 2025 Gradient, INC.
This project is licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this project by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.



