This is the core messenging protocol used by Bouce, implemented with the TLJ communication library and I2P. Bounce aims to enable peer to peer communication that protects the content and metadata of conversations without sacrificing a pleasant interface and multi-device support. Anonymity, authentication, and encryption are handled by the I2P network, on top of which Bounce adds multi-device support and a user interface. An I2P router is embedded in every instance of Bounce. Contacts are defined as collections of Devices that are owned by the same person. When installing Bounce for the first time, a user's Contact is created and contains only that one device. On subsequent installations, the user can select to join the new Device to the existing identity by pairing devices. I2P provides end to end encrypted communication between each device; to maintain multi-device support bounce replicates messages across all the relevant devices.