Universal Peer to Peer (UP2P) is an XML and web based peer to peer file sharing framework. UP2P uses XML meta-data to describe user defined arbitrary data types which can then be easily searched and shared through a simple web browser interface. UP2P can be used to share anything from simple image or music files to complex and dynamic content such as flash games or wiki articles. This is achieved by allowing content creators to share special assets which describe how a specific data type should be processed, stored, and displayed to users. UP2P offers a simple interface to a highly flexible distributed network where every peer is also a content creator.

UP2P is available to download in both source and deployed binary distributions. In addition to these releases a live demo node [currently down – May 2013 – to be fixed – apologies!] is available as well as a screencast demo which can be viewed below. UP2P is primarily written in Java and runs in the Apache Tomcat JSP/Servlet engine. As such, UP2P should be compatible with any OS supported by Apache Tomcat.

UP2P is distributed under the GNU General Public License and is available for anyone to use or develop.

UP2P Applications:

Screencast Demo

How Does It Work?

Data in UP2P is shared as XML meta-data documents which may have any number of arbitrary file attachments. In order to share a new type of data on the UP2P network a user must create a “community” which describes the data type. The community definition includes properties describing the data type to be shared, as well as properties of the community itself (such as a description, category, tags, etc.). The community definition contains an XML schema that the data type’s meta-data must match, as well as XSLT and CSS stylesheets, HTML pages, and any other arbitrary attachments which are needed to process, search for, and display the community’s resources.

Before a peer can share a specific data type they must join the community corresponding to the desired data type. The community definition is downloaded from the network to the peer’s local UP2P node. This includes any community attachments which are required to process, search for, and display the data type. Once a peer joins a community they are able to search the network for resources shared by other peers in the same community, and any locally stored resources will be shared with all other peers in the same community. Each UP2P peer can be a member of any number of communities, and therefore can share many data types in parallel. Network searches are propagated only to those nodes which have subscribed to the community being searched, and many communities can be shared through the same network infrastructure.

Since resources are shared along with XML meta-data searches can be performed which are highly specific to the resource in question. For example, a node serving a photography community may allow users to search for images based on the brand of camera used, the resolution of the image, or the date a photograph was taken. The same node could simultaneously serve a wiki article community which allowed for searches based on article versioning history, or searches based on the cross-references between articles. The searchable terms of a community are defined by the content creator of the community. UP2P provides built in facilities to perform text searches on article meta-data, as well as searches based on relational links between resources (For example, a community representing a database of actors may support searches such as “find all actors who have co-starred with Burt Reynolds”).