Platform Overview ================= The Pipes API provides an SDK for managing peer-to-peer nodes on a network. The platform takes care of the complexities of connecting nodes, routing data, synchronizing node state, and encrypting data en route and at rest, leaving the developer an easy-to-use API for building peer-to-peer applications. The platform supports: - Creating a private and secure (virtual) network - Broadcasting messages/objects to all nodes in a network - Sending messages/objects to a specific node. (All messages/objects are encrypted enroute; intermediate nodes cannot access.) - Synchronization of long-term application state (history) between nodes on the network, including support for offline usage and synchronization at reconnection with peers - Streaming audio, video, and screensharing connections between any nodes connected to the same network, including multiplexing and mixing - Network port forwarding and general data connections between any nodes connected to the same network - Storage, transfer/sharing, archival, and replication of files - Presence status for identifying which nodes have joined the network and which are currently accessible/online - Notification system for sending push notifications to users via configurable channels (mobile device, SMS, email, etc) upon certain events - Identity management, including synchronization of user data across multiple devices/nodes Terminology ----------- Some terminology: - Node: IP-enabled participant in a Pipes network - Node ID: the identifier of a Node, which must be unique on the network - Peer: a Node from the perspective of another Node to which it is directly connected (i.e., via direct establishment of a TCP connection) - Network: a collection of transitively connected Nodes - Packet: an atomic unit of communication that is communicated across the Network. Packets can contain arbitrary data. - Packet ID: typically the SHA256 hash of the Packet data, used for identification of packets and error checking - Pipeline: a communication channel that supports the broadcast of messages to all Nodes on a Network. Pipelines are either Persistent or Live. - Persistent Pipeline: a Pipeline whose Packet history is maintained on, and synchronized across, all Nodes, and can be obtained by any new Node joining the Network. Used to guarantee delivery regardless of whether Peer is on the network when the Packet is first created. - Live Pipeline: a Pipeline that only attempts delivery to active (online) Nodes. - Point-to-Point Pipeline: a Pipeline that is used by only two Nodes in the Network. The Nodes do not have to be Peers, the Network takes care of the required routing. The Pipes API is an asynchronous API: objects (messages) can be sent from the client or back to the client at any time. Some objects will be sent in response to an API request, but many will happen asynchronously. The API provides: - Networks - maintaining the list of known networks - network discovery - network connection - Network Metadata - connected peers - known and currently reachable nodes - security protocols - channels, services, applications - Pipelines: - name, metadata (incl. live or persistent), encryption - real-time and persisted/synchronized state - Messaging - ability to broadcast and send point-to-point messages - ability to subscribe to notifications for incoming messages - point-to-point connections for streaming audio, video, file transfer, and other network data