Research project: Tent.io

What is the project?

Tent is a protocol for event-­oriented data storage and sharing. Users store all of their information in one place under their control, they can use different applications on different devices and change service providers at will. Users decide when, what, and with whom to share and on what terms other entities have access to their information.

Tent was designed with a specific set of patterns and structures in mind.

  • Users should remain in control and possession of their data at all times.
  • Tent is decentralised. Anyone can run their own Tent server and each user is responsible for their own server.
  • Tent considers users’ privacy and security to be of paramount importance. Tent keeps private information private and makes public broadcasts difficult to censor or hide.
  • In Tent nearly everything is represented as a series of posts.
  • Tent is the one place where all of a user’s data is stored. Public and private, published and personal, media and transactional information, human and computer readable, all should be in this single data store.

The most alluring benefit of Tent is the principle that users stay in control. When software companies are sold or shut down, products are often discontinued or merged into other lines. User data can be lost and terms of service are often changed to the detriment of users. Applications that use Tent for storage and communication can avoid this trap entirely. Users control the only copy of their own data and have the original application, so there’s nothing to discontinue or unplug. Users can keep using the application with their data as long as they wish.

Just like Web servers, anyone can run a Tent server to store all of their data. Dedicated Tent hosts have started to appear for those users wishing to entrust their Tent data to a third party. The Tent protocol ensures that users’ data is never locked down and always available for export and movement between Tent servers.

Tent enables applications to analyse and handle sensitive data without taking responsibility for storing copies of that information. Users can keep their data private and developers can explore domains that were previously inaccessible.

Tent is an open protocol and all open source software released by Tent.io is published under the MIT license. The creators are committed to governing Tent in a similar way to HTTP to prevent fragmentation, ensure clear use of Tent-­related terms and branding, and keep Tent free and open.

While Tent remains in alpha status early adopters should expect changes to break backwards compatibility and will have greater difficulty migrating between versions. That said most of the backwards compatibility breaking changes have been pushed into version 0.3 with the aim of easing migrations between future versions. Continuing at the current pace, a release candidate for Tent 1.0 is expected in the first quarter of 2014 though this might slip depending on the demands of the protocol development team.

Tent has many open source components that accept pull requests including tentd, the reference server implementation, TentStatus, a Tent microblogging application, and TentAdmin, a server administration application. Most of these applications were developed to demonstrate basic functionality and have been shipped with a limited feature set.

There is an active community and the core team welcome discussion on everything from protocol design to application ideas and use cases.

Who is using it?

Currently there are a small number of early adopters using Tent. All of these early adopters are focusing on social networking and blogging type applications. The most successful application, based on number of users, is Tent.is which is run by the team behind the Tent protocol. Tent.is is based on the open source TentStatus which supports status posts similar to Twitter. Other applications such as Zelten, Essayist, Reevio and Campr focus on sharing social content in varying guises from small status updates to longer blog style posts.

Technical overview

Tent is a distributed persistent message channel and JSON document store with permission control built in to the protocol. Tent uses HTTPS and JSON to transport posts between servers and applications. You can think of Tent as a protocol with which to create the data model for applications.

Users in Tent are known as entities. They authorise applications, create relationships, read and publish posts. Entities are identified by an Entity URL, an HTTP(S) URL that has linked metadata to facilitate discovery. Discovery is handled by Web linking in the same way as is used in the Atom format and many REST based APIs. Each user (entity) has one or more servers that handle the storage and dissemination of their posts.

Everything in Tent is a post, all application data. Different applications create data that can be valuable to each other. Posts can be public like a blog or directed only at certain people. Application developers can invent their own types of posts, for example likes, comments, events, photos, check‐ins, or anything else you can think of. This simplifies things somewhat but does require careful thought into post type use and creation. Where possible, applications should use standard post types to facilitate this process. However, care should be taken when reusing existing post types. There may be a temptation to shoehorn data into existing post types that do not precisely fit the requirements of your application. Specific use cases may require the creation of new post types.

Posts are represented as JSON, and consist of three logical components, metadata, content, and binary attachments. The full schema is available.

Tent is primarily a tool for constructing the data model for applications. Users control their Tent data so applications must first be authorised before they can modify data or access private posts. Authorisation in Tent is executed with OAuth 2.

Entities create relationships when their posts mention other entities. Subscriptions build on relationships providing a mechanism to request that a subset of posts get pushed when they are published by an entity. Notifications are the method by which posts are sent to entities via HTTP webhooks based on subscriptions and mentions.

Libraries are available in many popular languages although currently only Ruby & Go have first class support.

Tent is great at representing and supporting one‐to-­one and one‐to-­many relationships, it is not the best solution for representing many-­to­‐many relationships due to geometric scaling issues.

Some applications fully embrace Tent in its entirety. These applications use Tent for communication between users, data and file storage, sign-­‐in, social graph, cross-­‐device sync, and all other transactions. Tent can handle communication, storage, and sign­‐in. Developers should look to make use of all of these features in order for the application and its end users to get the most benefit from Tent.

Tent is great for developers as it removes the need for centralised developer-­‐supported servers. Without centralised servers, the application can scale gracefully and there is no ongoing cost to developers. Revenue models such as advertisements or subscription plans that cover the ongoing cost of operation can be abolished. If a developer abandons a project, users are unaffected and the service continues operation.

There is a plan for Tent posts to facilitate the attachment of licenses. This idea is even more powerful when Tent is used for hosted applications. Imagine Facebook or Google following a user’s Tent and that user telling the company that their posts were only available under a display-­‐only license which allowed content to be shown to other human users, but not content analysed or data mined and sold to advertisers.

How it federates

The creators of Tent do not consider it to be a federating system. They prefer to describe it as a decentralised data store. Any Tent server can connect to any other Tent server. All features are available to any server and anyone can host their own Tent server. That is not to say that you could not create a federated system using Tent. Subscriptions and notifications provide mechanisms by which content can be shared between Tent enabled applications.

Comparison with other offerings e.g. buddycloud

Buddycloud is a complete system for sharing information, be that status updates, media or any other information with a heavy focus on social networking. Tent is a protocol and API purely focused on the storage and dissemination of information. Tent could be used in a system such as Buddycloud, as many of the initial Tent-­enabled applications demonstrate. However, there is a much wider scope for Tent as the core data model for a variety of applications.

Applications such as fitness trackers, photo editors, music collaboration tools and calendars could all be backed by Tent to enhance the experience for the developer and end users. The potential of Tent is unlocked when you start thinking about Tent as a decentralised data model rather than a social data store. Tent liberates users’ data regardless of the type of data or application used to create or consume it.

Unfortunately, since this post was written Tent appears to be discontinued, with no updates to the tent.io site since 2016 and an expired certificate as of 2018.