I2CP operates as a message-based protocol, facilitating communication between two primary components: the (the application) and the Router (the I2P node).

I2CP is essential for the I2P ecosystem because it provides a consistent API for various programming languages. While the primary I2P router is written in Java, I2CP allows clients written in C++, Python, or Go to interface with it seamlessly. This has enabled the integration of I2P into diverse projects, such as the Monero cryptocurrency for transaction privacy.

: Since I2P is a packet-switched network where messages can be lost or delayed, I2CP is inherently asynchronous, allowing applications to manage their own reliability or use the built-in streaming library for TCP-like behavior. The Initialization Process

Instructs the router to deliver a payload to a specific I2P Destination.

Notifies the client that a new message has been received from the network.

Sent by the router when it needs the client to sign a new set of tunnels for inbound traffic. Significance for Developers

: The client application and the I2P router can reside on the same machine or different ones, communicating over a local or network socket.

: The router builds inbound tunnels and requests a "LeaseSet" from the client. This LeaseSet serves as a signed set of "entry points" that other peers can use to reach the application anonymously. Key I2CP Message Types Message Type SendMessage