Tent is decentralized, not federated or centralized. Any Tent server can connect
+ to any other Tent server. All features are available to any server as
+ first-class citizens. Anyone can host their own Tent server. Tent servers can
+ also be run as Tor hidden services to create a social darknet for at-risk
+ organizers and activists. Anyone can write applications that connect to Tent in
+ order to display or create user content.
+
+
Relationships are between users, independent of their service providers, so
+ users take their data and relationships with them when they change Tent service
+ providers. Every user decides which other users can follow them and what
+ information will be shared with each of their followers.
+
+
You are your memories and relationships
+
+
We use social networks to advertise our identities, communicate with friends,
+ families, co-workers, customers, and brands. The content we create in the form
+ of messages, uploaded media, and social graphs is not only valuable, it has come
+ to define each of us. This information, our relationships and our data needs to
+ be under our own control. When a user leaves a social service provider for any
+ reason, that user should be able to take their relationships, not just a copy of
+ their data, with them. Tent lets them.
+
+
Planning for the Future
+
+
Tent supports extensible formats for post types and profile information. As
+ developers' needs change they are free to create new open formats for data
+ exchange. Tent is built on HTTPS, JSON and OAuth, each of which handles hundreds
+ of millions of transactions online each day. We designed Tent to grow and adapt
+ with its users.
+
+
The Tent Ecosystem
+
+
Tent is not specifying the economics of an ecosystem. There will be many options
+ for users, from free to paid to self hosted, from ad-supported to
+ advertising-free, with providers that serve different market segments and
+ types of users. Since anyone can set up a Tent server or become a service
+ provider, niche needs should quickly be met, based on demand.
+
+
There are many spectrums of need:
+
+
+
+
+
technically experienced
+
inexperienced
+
+
+
rich
+
poor
+
+
+
ad tolerant
+
ad intolerant
+
+
+
verified
+
pseudonyms
+
+
+
public
+
private
+
+
+
centralized
+
distributed
+
+
+
+
+
Next steps
+
+
The first Tent server implementation will be available as an open source
+ repository very soon. A hosted version for users unwilling or unable to host
+ their own will follow quickly.
+
+
In the meantime, we encourage anyone with feedback or suggestions on the protocol or who is developing apps or services supporting Tent to add your services to the list in the GitHub repository via pull request. The
+ same goes for post-types and profile info-types: a community site will launch
+ soon, for now, use pull requests or reach out directly: info@tent.io
Every user has the right to freedom of expression.
+
+
Free speech is a necessary feature of all open societies. Speech can not be free
+ if communication is centralized or intermediated. Users must be able to say
+ anything to anyone they want on their own terms.
+
+
Every user has the right to control their own data.
+
+
This includes who can access the data they create and how that data is later
+ used.
+
+
Every user has the right to choose and change their social services providers.
+
+
This includes the right to negotiate reasonable terms of service collectively or
+ individually.
+
+
Every user has the right to host their own social services.
+
+
All social service providers must be treated equally, regardless of the number
+ of user accounts hosted.
+
+
Every user has the right to communicate with any other user, regardless of their service provider.
+
+
No service provider shall interfere with the communications of any group or pair of users, or exclude any users on the basis of their service provider.
+
+
Every user has the right to take their data and relationships with them.
+
+
User relationships, like content, belong to the user. When changing service
+ providers, users have a right to transfer their relationships and data, and for
+ those relationships and data to be forgotten by the former provider.
+
+
Every user has the right to choose their own name.
+
+
Pesudonyms, multiple accounts, and anonymity are an integral part of
+ communications and must not be restricted.
+
+
Different users have different needs.
+
+
No single company, product, or platform can solve them all equally. The only
+ ecosystems capable of serving these needs are protocol-based and decentralized.
+ No user's needs need be served poorly for others' needs to be served.
+
+
Communication must be decentralized.
+
+
Only decentralized systems provide protection from outside control.
+ Decentralized systems limit the consequences of a single element failing.
+ Centralized systems by nature limit what can be shared and by whom. In
+ distributed systems, users have the power.
+
+
Communication protocols must be standardized.
+
+
All communication from spoken language to digital packets requires a basic set
+ of shared ideas. Global communication systems require a greater degree of detail
+ to be interoperable. These standards must be available to and extensible by the
+ community of users in order to adapt to changing needs.
+
+
The internet is capable of more.
+
+
Closed and fragmented systems have stifled growth and change. An open social web
+ will create a new generation of tools, services, and content impossible in
+ today's systems.
+
+
Conversations change the world.
+
+
Every revolution, whether political, scientific, or ideological began as
+ a conversation. The rules, conventions, and ethics of communication can be
+ determined only by those participating. Conversation is too important to trust
+ to any third party.
+
+
We're introducing Tent, an open protocol for distributed social networks.
+ Everyone controls what happens to their content.
+
+
+
+
\ No newline at end of file
diff --git a/output/blog.xml b/output/blog.xml
new file mode 100644
index 0000000..e101b3b
--- /dev/null
+++ b/output/blog.xml
@@ -0,0 +1,186 @@
+
+
+ http://tent.io/
+ Tent
+ 2012-08-22T18:05:00Z
+
+
+
+ Tent
+ http://tent.io
+
+
+ tag:tent.io,2012-08-22:/blog/introducing-tent.html
+ Introducing Tent
+ 2012-08-22T18:05:00Z
+ 2012-08-22T18:05:00Z
+
+ <p>Tent is a new protocol for open, distributed social networking.</p>
+
+<p><em>What we believe</em> – <a href="/blog/the-tent-manifesto">The Tent Manifesto</a></p>
+
+<h3>What makes Tent different?</h3>
+
+<p>Tent is decentralized, not federated or centralized. Any Tent server can connect
+to any other Tent server. All features are available to any server as
+first-class citizens. Anyone can host their own Tent server. Tent servers can
+also be run as Tor hidden services to create a social darknet for at-risk
+organizers and activists. Anyone can write applications that connect to Tent in
+order to display or create user content.</p>
+
+<p>Relationships are between users, independent of their service providers, so
+users take their data and relationships with them when they change Tent service
+providers. Every user decides which other users can follow them and what
+information will be shared with each of their followers.</p>
+
+<h3>You are your memories and relationships</h3>
+
+<p>We use social networks to advertise our identities, communicate with friends,
+families, co-workers, customers, and brands. The content we create in the form
+of messages, uploaded media, and social graphs is not only valuable, it has come
+to define each of us. This information, our relationships and our data needs to
+be under our own control. When a user leaves a social service provider for any
+reason, that user should be able to take their relationships, not just a copy of
+their data, with them. Tent lets them.</p>
+
+<h3>Planning for the Future</h3>
+
+<p>Tent supports extensible formats for post types and profile information. As
+developers' needs change they are free to create new open formats for data
+exchange. Tent is built on HTTPS, JSON and OAuth, each of which handles hundreds
+of millions of transactions online each day. We designed Tent to grow and adapt
+with its users.</p>
+
+<h3>The Tent Ecosystem</h3>
+
+<p>Tent is not specifying the economics of an ecosystem. There will be many options
+for users, from free to paid to self hosted, from ad-supported to
+advertising-free, with providers that serve different market segments and
+types of users. Since anyone can set up a Tent server or become a service
+provider, niche needs should quickly be met, based on demand.</p>
+
+<p>There are many spectrums of need:</p>
+
+<table class="table table-bordered">
+ <tbody>
+ <tr>
+ <td>technically experienced</td>
+ <td>inexperienced</td>
+ </tr>
+ <tr>
+ <td>rich</td>
+ <td>poor</td>
+ </tr>
+ <tr>
+ <td>ad tolerant</td>
+ <td>ad intolerant</td>
+ </tr>
+ <tr>
+ <td>verified</td>
+ <td>pseudonyms</td>
+ </tr>
+ <tr>
+ <td>public</td>
+ <td>private</td>
+ </tr>
+ <tr>
+ <td>centralized</td>
+ <td>distributed</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2>Next steps</h2>
+
+<p>The first Tent server implementation will be available as an open source
+repository very soon. A hosted version for users unwilling or unable to host
+their own will follow quickly.</p>
+
+<p>In the meantime, we encourage anyone with feedback or suggestions on the protocol or who is developing apps or services supporting Tent to add your services to the list in the GitHub repository via pull request. The
+same goes for post-types and profile info-types: a community site will launch
+soon, for now, use pull requests or reach out directly: <a href="mailto:info@tent.io">info@tent.io</a></p>
+
+<p>Read more about Tent in the <a href="http://tent.io">FAQ</a> and <a href="/docs/">developer documentation</a>.</p>
+
+
+
+ tag:tent.io,2012-08-22:/blog/the-tent-manifesto.html
+ The Tent Manifesto
+ 2012-08-22T18:00:00Z
+ 2012-08-22T18:00:00Z
+
+ <h3>Every user has the right to freedom of expression.</h3>
+
+<p>Free speech is a necessary feature of all open societies. Speech can not be free
+if communication is centralized or intermediated. Users must be able to say
+anything to anyone they want on their own terms.</p>
+
+<h3>Every user has the right to control their own data.</h3>
+
+<p>This includes who can access the data they create and how that data is later
+used.</p>
+
+<h3>Every user has the right to choose and change their social services providers.</h3>
+
+<p>This includes the right to negotiate reasonable terms of service collectively or
+individually.</p>
+
+<h3>Every user has the right to host their own social services.</h3>
+
+<p>All social service providers must be treated equally, regardless of the number
+of user accounts hosted.</p>
+
+<h3>Every user has the right to communicate with any other user, regardless of their service provider.</h3>
+
+<p>No service provider shall interfere with the communications of any group or pair of users, or exclude any users on the basis of their service provider.</p>
+
+<h3>Every user has the right to take their data and relationships with them.</h3>
+
+<p>User relationships, like content, belong to the user. When changing service
+providers, users have a right to transfer their relationships and data, and for
+those relationships and data to be forgotten by the former provider.</p>
+
+<h3>Every user has the right to choose their own name.</h3>
+
+<p>Pesudonyms, multiple accounts, and anonymity are an integral part of
+communications and must not be restricted.</p>
+
+<h3>Different users have different needs.</h3>
+
+<p>No single company, product, or platform can solve them all equally. The only
+ecosystems capable of serving these needs are protocol-based and decentralized.
+No user's needs need be served poorly for others' needs to be served.</p>
+
+<h3>Communication must be decentralized.</h3>
+
+<p>Only decentralized systems provide protection from outside control.
+Decentralized systems limit the consequences of a single element failing.
+Centralized systems by nature limit what can be shared and by whom. In
+distributed systems, users have the power.</p>
+
+<h3>Communication protocols must be standardized.</h3>
+
+<p>All communication from spoken language to digital packets requires a basic set
+of shared ideas. Global communication systems require a greater degree of detail
+to be interoperable. These standards must be available to and extensible by the
+community of users in order to adapt to changing needs.</p>
+
+<h3>The internet is capable of more.</h3>
+
+<p>Closed and fragmented systems have stifled growth and change. An open social web
+will create a new generation of tools, services, and content impossible in
+today's systems.</p>
+
+<h3>Conversations change the world.</h3>
+
+<p>Every revolution, whether political, scientific, or ideological began as
+a conversation. The rules, conventions, and ethics of communication can be
+determined only by those participating. Conversation is too important to trust
+to any third party.</p>
+
+<p>We're <a href="/blog/introducing-tent">introducing Tent</a>, an open protocol for distributed social networks.
+Everyone controls what happens to their content.</p>
+
+
+
+
diff --git a/output/blog/introducing-tent.html b/output/blog/introducing-tent.html
new file mode 100644
index 0000000..b1bbca5
--- /dev/null
+++ b/output/blog/introducing-tent.html
@@ -0,0 +1,116 @@
+
+
+
+ Introducing Tent · Tent - the decentralized social web
+
+
+
+
+
+
Tent is decentralized, not federated or centralized. Any Tent server can connect
+ to any other Tent server. All features are available to any server as
+ first-class citizens. Anyone can host their own Tent server. Tent servers can
+ also be run as Tor hidden services to create a social darknet for at-risk
+ organizers and activists. Anyone can write applications that connect to Tent in
+ order to display or create user content.
+
+
Relationships are between users, independent of their service providers, so
+ users take their data and relationships with them when they change Tent service
+ providers. Every user decides which other users can follow them and what
+ information will be shared with each of their followers.
+
+
You are your memories and relationships
+
+
We use social networks to advertise our identities, communicate with friends,
+ families, co-workers, customers, and brands. The content we create in the form
+ of messages, uploaded media, and social graphs is not only valuable, it has come
+ to define each of us. This information, our relationships and our data needs to
+ be under our own control. When a user leaves a social service provider for any
+ reason, that user should be able to take their relationships, not just a copy of
+ their data, with them. Tent lets them.
+
+
Planning for the Future
+
+
Tent supports extensible formats for post types and profile information. As
+ developers' needs change they are free to create new open formats for data
+ exchange. Tent is built on HTTPS, JSON and OAuth, each of which handles hundreds
+ of millions of transactions online each day. We designed Tent to grow and adapt
+ with its users.
+
+
The Tent Ecosystem
+
+
Tent is not specifying the economics of an ecosystem. There will be many options
+ for users, from free to paid to self hosted, from ad-supported to
+ advertising-free, with providers that serve different market segments and
+ types of users. Since anyone can set up a Tent server or become a service
+ provider, niche needs should quickly be met, based on demand.
+
+
There are many spectrums of need:
+
+
+
+
+
technically experienced
+
inexperienced
+
+
+
rich
+
poor
+
+
+
ad tolerant
+
ad intolerant
+
+
+
verified
+
pseudonyms
+
+
+
public
+
private
+
+
+
centralized
+
distributed
+
+
+
+
+
Next steps
+
+
The first Tent server implementation will be available as an open source
+ repository very soon. A hosted version for users unwilling or unable to host
+ their own will follow quickly.
+
+
In the meantime, we encourage anyone with feedback or suggestions on the protocol or who is developing apps or services supporting Tent to add your services to the list in the GitHub repository via pull request. The
+ same goes for post-types and profile info-types: a community site will launch
+ soon, for now, use pull requests or reach out directly: info@tent.io
+
\ No newline at end of file
diff --git a/output/blog/the-tent-manifesto.html b/output/blog/the-tent-manifesto.html
new file mode 100644
index 0000000..32c6950
--- /dev/null
+++ b/output/blog/the-tent-manifesto.html
@@ -0,0 +1,101 @@
+
+
+
+ The Tent Manifesto · Tent - the decentralized social web
+
+
+
+
+
+
Every user has the right to freedom of expression.
+
+
Free speech is a necessary feature of all open societies. Speech can not be free
+ if communication is centralized or intermediated. Users must be able to say
+ anything to anyone they want on their own terms.
+
+
Every user has the right to control their own data.
+
+
This includes who can access the data they create and how that data is later
+ used.
+
+
Every user has the right to choose and change their social services providers.
+
+
This includes the right to negotiate reasonable terms of service collectively or
+ individually.
+
+
Every user has the right to host their own social services.
+
+
All social service providers must be treated equally, regardless of the number
+ of user accounts hosted.
+
+
Every user has the right to communicate with any other user, regardless of their service provider.
+
+
No service provider shall interfere with the communications of any group or pair of users, or exclude any users on the basis of their service provider.
+
+
Every user has the right to take their data and relationships with them.
+
+
User relationships, like content, belong to the user. When changing service
+ providers, users have a right to transfer their relationships and data, and for
+ those relationships and data to be forgotten by the former provider.
+
+
Every user has the right to choose their own name.
+
+
Pesudonyms, multiple accounts, and anonymity are an integral part of
+ communications and must not be restricted.
+
+
Different users have different needs.
+
+
No single company, product, or platform can solve them all equally. The only
+ ecosystems capable of serving these needs are protocol-based and decentralized.
+ No user's needs need be served poorly for others' needs to be served.
+
+
Communication must be decentralized.
+
+
Only decentralized systems provide protection from outside control.
+ Decentralized systems limit the consequences of a single element failing.
+ Centralized systems by nature limit what can be shared and by whom. In
+ distributed systems, users have the power.
+
+
Communication protocols must be standardized.
+
+
All communication from spoken language to digital packets requires a basic set
+ of shared ideas. Global communication systems require a greater degree of detail
+ to be interoperable. These standards must be available to and extensible by the
+ community of users in order to adapt to changing needs.
+
+
The internet is capable of more.
+
+
Closed and fragmented systems have stifled growth and change. An open social web
+ will create a new generation of tools, services, and content impossible in
+ today's systems.
+
+
Conversations change the world.
+
+
Every revolution, whether political, scientific, or ideological began as
+ a conversation. The rules, conventions, and ethics of communication can be
+ determined only by those participating. Conversation is too important to trust
+ to any third party.
+
+
We're introducing Tent, an open protocol for distributed social networks.
+ Everyone controls what happens to their content.
+
+
+
+
\ No newline at end of file
diff --git a/output/docs.html b/output/docs.html
new file mode 100644
index 0000000..8b7b5b6
--- /dev/null
+++ b/output/docs.html
@@ -0,0 +1,117 @@
+
+
+
+ Protocol Introduction · Tent - the decentralized social web
+
+
+
+
+
+
Requests are authenticated with HMAC
+signatures, and apps use OAuth 2 to access
+content on behalf of users.
+
+
Users
+
+
Tent users are called entities and are defined by a URI.
+
+
Example: John Smith's entity might be https://johnsmith.me/, implying a HEAD
+request to
+https://johnsmith.me/ would respond with a Link header pointing to
+a Tent profile (e.g. https://tent.johnsmith.me/profile)
+
+
Profiles
+
+
Every Tent entity has a profile JSON file describing it. The most basic profile
+has a single object containing the Tent version, the entity name (e.g.
+johnsmith.me), an array of supported licences, and an array of servers
+containing canonical API roots.
+
+
You may have multiple versions of the same info type in your profile (e.g. you
+might need to support multiple versions of Tent.)
+
+
Servers
+
+
Tent servers are the protocol core. A server handles these responsibilities:
+
+
+
Persisting data
+
Notifying other servers about new data
+
Ensuring content is only pushed to recipients accepting associated licences
+
Managing a list of servers (entities) it is following
+
Managing a list of servers (entities) that are following it
+
Authorizing apps to access data
+
Notifying apps about new or modified data they have access to
+
+
+
Apps
+
+
Tent apps are typically where content is created and consumed.
+
+
For example:
+
+
+
ian-hanson.me (Ian) posts a status update (post) from a micro blogging app authenticated with his server.
+
The app publishes the post to his server.
+
His server sends a notification to every server following him or mentioned in the post with permission to see the post.
+
If anna-collins.me (Anna) is following Ian, her server will receive a notification from Ian’s server containing the post.
+
If Anna has an app setup for consuming status updates, her server will send it a notification with Ian’s post.
+
Anna can now read Ian’s post from the status app.
+
If Anna decides to reply, her response will follow a path inverse to Ian’s post.
+
+
+
Posts
+
+
Tent posts can be used to describe anything. The term used to describe a piece
+of content is post. Posts each have a post type which describes its data.
+
+
Notifications
+
+
Tent notifications are used when a server needs to let another server or app
+know about new content updates. Notifications are JSON POST requests containing
+posts.
+
+
+
+
\ No newline at end of file
diff --git a/output/docs/app-auth.html b/output/docs/app-auth.html
new file mode 100644
index 0000000..efd478f
--- /dev/null
+++ b/output/docs/app-auth.html
@@ -0,0 +1,539 @@
+
+
+
+ App Authentication · Tent - the decentralized social web
+
+
+
+
+
+
These docs are very rough, incorrect, and incomplete. They will be modified heavily over the next few weeks.
+
Please contribute by making Pull Requests and Issues on the GitHub repository.
+
App Authentication
+
+
Tent uses OAuth 2 for app
+authentication. Because of the distributed nature of Tent, it is necessary for
+apps to register with the Tent entity before doing the authentication flow.
+
+
After the authentication flow, requests are authenticated using the credentials
+with MAC Access
+Authentication.
+
+
App Registration
+
+
Before authenticating a user, the application must be registered with the
+specified Tent entity. The first step is to perform discovery on the provided
+entity url.
+
HEAD / HTTP/1.1
+Accept: application/vnd.tent.v0+json
+
+
+
HTTP/1.1 200 OK
+Content-Type: text/html
+Link: </profile>; rel="https://tent.io/rels/profile"
+
+
+
+
The next step is to register the application with the server. Registration
+specifies some details about the app, as well as the exact redirect_uris that
+will be used during the OAuth flow. The response id, secret, and
+mac_algorithm are used to authenticate future requests to the Tent server.
+The id is used as the client_id in all OAuth requests.
+
POST /apps HTTP/1.1
+Content-Type: application/vnd.tent.v0+json
+Accept: application/vnd.tent.v0+json
+
+
+
{
+ "name":"FooApp",
+ "description":"Does amazing foos with your data",
+ "url":"http://example.com",
+ "icon":"http://example.com/icon.png",
+ "redirect_uris":[
+ "https://app.example.com/tent/callback"
+ ],
+ "scopes":{
+ "write_profile":"Uses an app profile section to describe foos",
+ "read_followings":"Calculates foos based on your followings"
+ }
+}
+
+
+
HTTP/1.1 200 OK
+Content-Type: application/vnd.tent.v0+json
+Content-Length: 459
+
+
+
{
+ "name":"FooApp",
+ "description":"Does amazing foos with your data",
+ "url":"http://example.com",
+ "icon":"http://example.com/icon.png",
+ "redirect_uris":[
+ "https://app.example.com/tent/callback"
+ ],
+ "scopes":{
+ "write_profile":"Uses an app profile section to describe foos",
+ "read_followings":"Calculates foos based on your followings"
+ },
+ "id":"p0cq4m",
+ "mac_key_id":"a:f665629b",
+ "mac_key":"6cda8195d50bb55fb17d22de3f7575de",
+ "mac_algorithm":"hmac-sha-256",
+ "authorizations":[
+
+ ]
+}
+
+
+
+
App JSON Schema
+
+
+
+
Property
+
Required
+
Type
+
Description
+
+
+
+
+
id
+
Optional
+
String
+
The unique identifier of the app.
+
+
+
name
+
Required
+
String
+
The short display name for the app.
+
+
+
description
+
Required
+
String
+
The short display description of the app.
+
+
+
url
+
Required
+
String
+
The URL for the home page of the app.
+
+
+
icon
+
Optional
+
String
+
The URL to the icon for the app.
+
+
+
redirect_uris
+
Required
+
Array
+
The exact (including parameters) uris that will be used as OAuth redirect_uri.
+
+
+
scopes
+
Required
+
Object
+
All of the scopes that the application will use, and the reason why each is required.
+
+
+
mac_algorithm
+
Optional
+
String
+
The MAC algorithm to use when authenticating the app.
+
+
+
mac_key_id
+
Optional
+
String
+
The MAC key identifier to use when authenticating the app.
+
+
+
mac_key
+
Optional
+
String
+
The MAC key to use when authenticating the app.
+
+
+
+
+
Authentication Flow
+
+
Auth Request
+
+
The app requests the user's Tent identifier, and performs discovery on it to
+find the Tent API root. The app then builds an auth request and redirects the
+user-agent to it:
The id obtained by registering with the Tent server
+
+
+
redirect_uri
+
Required
+
The URI to redirect to after authentication is complete. It must exactly match a URI (including parameters) provided during app registration in redirect_uris.
+
+
+
state
+
Optional
+
This parameter will be added to the redirect_uri and should always be set to a random string that is stored in the session, and then verified to prevent cross-site request forgery attacks.
+
+
+
scope
+
Optional
+
A comma-separated list of scopes that the app is requesting access to.
+
+
+
tent_profile_info_types
+
Optional
+
A comma-separated list of profile info type urls that the app is requesting access to. Set to all to request full access to the profile.
+
+
+
tent_post_types
+
Optional
+
A comma-separated list of type urls that the app is requesting access to. Set to all to request access to all posts.
+
+
+
tent_notification_url
+
Optional
+
The URI to send post notifications to.
+
+
+
+
+
Scopes
+
+
+
+
Scope
+
Description
+
+
+
+
+
read_profile
+
Read profile sections listed in the profile_info parameter
+
+
+
write_profile
+
Read and write profile sections listed in the profile_info parameter
+
+
+
read_followers
+
Read follower list
+
+
+
write_followers
+
Read follower list and block followers
+
+
+
read_followings
+
Read followings list
+
+
+
write_followings
+
Read followings list and follow new entities
+
+
+
read_posts
+
Read posts with types listed in the post_types parameter
+
+
+
write_posts
+
Read and publish posts with types listed in the post_types parameter
+
+
+
+
+
Redirect
+
+
After the user has authorized the application, the Tent server will redirect the
+User-Agent back to the specified redirect_uri with a code that can be used
+to retrieve authentication details from the server.
+
+
The state parameter should be matched against the state parameter sent in
+the initial request to prevent request forgery.
+
HTTP/1.1 302 Found
+Location: http://app.example.com/tent/callback?code=9a27c37c0adb08351b1e7aac4ec12dc6&state=87351cc2f6737bfc8ba
+
+
+
+
Access Token
+
+
The code must be traded for permanent authentication details that can be used
+to access the Tent server on behalf of the user.
+
+
POST /apps/:id/authorizations
+
+
The request must be signed with a MAC using the secret obtained during app
+registration. Currently only the mactoken_type is supported.
+
POST /apps/p0cq4m/authorizations HTTP/1.1
+Content-Type: application/vnd.tent.v0+json
+Accept: application/vnd.tent.v0+json
+Authorization: MAC id="a:f665629b", ts="1346984266", nonce="1f400b", mac="9kvPu8d7eM0kT/19XjHC39FiOWJZyYHAqbD5cTjAAkc="
+
Tent uses HTTP MAC Access
+Authentication to
+authenticate app requests. Requests to modify the app's registration details
+must be authorized using the provided id and secret as the
+MAC key identifier and MAC key respectively.
+
+
Requests to the Tent server on behalf of an authenticated user must be
+authorized using the credentials retrieved at the end of the auth flow.
+The access_token and mac_key are the MAC key identifier and MAC key
+respectively.
+
+
App Registration Modification
+
+
The request must be authenticated with a MAC generated using the secret from the
+initial registration.
+
+
GET /apps/:id
+
GET /apps/p0cq4m HTTP/1.1
+Accept: application/vnd.tent.v0+json
+Authorization: MAC id="a:f665629b", ts="1346984266", nonce="173d55", mac="lXyfBqkxNmZZ83f5brd1dlgm6V0ZQjkSCSwjnR5U6Fo="
+
PUT /apps/p0cq4m HTTP/1.1
+Content-Type: application/vnd.tent.v0+json
+Accept: application/vnd.tent.v0+json
+Authorization: MAC id="a:f665629b", ts="1346984266", nonce="722389", mac="X0okwuXuknoB+FjbVS02LzIvL4dmYDHlnkSjwmmpBMg="
+
+
+
{
+ "name":"FooApp",
+ "description":"Does amazing foos with your data",
+ "url":"http://example.com",
+ "icon":"http://example.com/icon.png",
+ "redirect_uris":[
+ "https://app.example.com/tent/callback"
+ ],
+ "scopes":{
+ "write_profile":"Uses an app profile section to describe foos",
+ "read_followings":"Calculates foos based on your followings",
+ "write_following":"Follow new users when you click"
+ }
+}
+
+
+
HTTP/1.1 200 OK
+Content-Type: application/vnd.tent.v0+json
+Content-Length: 905
+
+
\ No newline at end of file
diff --git a/output/docs/app-server.html b/output/docs/app-server.html
new file mode 100644
index 0000000..f82475b
--- /dev/null
+++ b/output/docs/app-server.html
@@ -0,0 +1,591 @@
+
+
+
+ Server API for Apps · Tent - the decentralized social web
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/output/docs/info-types.html b/output/docs/info-types.html
new file mode 100644
index 0000000..2f77ecd
--- /dev/null
+++ b/output/docs/info-types.html
@@ -0,0 +1,132 @@
+
+
+
+ Profile Info Types · Tent - the decentralized social web
+
+
+
+
+
+
These docs are very rough, incorrect, and incomplete. They will be modified heavily over the next few weeks.
+
Please contribute by making Pull Requests and Issues on the GitHub repository.
+
Profile Info Types
+
+
Core
+
+
https://tent.io/types/info/core/v0.1.0
+
+
+
+
Property
+
Required
+
Type
+
Description
+
+
+
+
+
entity
+
Optional
+
String
+
The canonical entity identitifier.
+
+
+
licenses
+
Optional
+
Array
+
The licenses the entity publishes content under.
+
+
+
servers
+
Optional
+
Array
+
The canonical API roots that can be used to interact with the entity.
+
+
+
+
+
Basic
+
+
https://tent.io/types/info/basic/v0.1.0
+
+
+
+
Property
+
Required
+
Type
+
Description
+
+
+
+
+
name
+
Optional
+
String
+
Name to be displayed publicly.
+
+
+
avatar_url
+
Optional
+
String
+
URL to avatar to be displayed publicly.
+
+
+
birthdate
+
Optional
+
String
+
Date of birth in one of these formats: YYYY-MM-DD, YYYY-MM, MM-DD
+
+
+
location
+
Optional
+
String
+
Location to be displayed publicly.
+
+
+
gender
+
Optional
+
String
+
Gender to be displayed publicly.
+
+
+
bio
+
Optional
+
String
+
Biography/self-description to be displayed publicly.
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/output/docs/post-types.html b/output/docs/post-types.html
new file mode 100644
index 0000000..50aae3a
--- /dev/null
+++ b/output/docs/post-types.html
@@ -0,0 +1,194 @@
+
+
+
+ Post Types · Tent - the decentralized social web
+
+
+
+
+
+
These docs are very rough, incorrect, and incomplete. They will be modified heavily over the next few weeks.
+
Please contribute by making Pull Requests and Issues on the GitHub repository.
+
Post Types
+
+
Status
+
+
https://tent.io/types/post/status/v0.1.0
+
+
+
+
Property
+
Required
+
Type
+
Description
+
+
+
+
+
text
+
Optional
+
String
+
The status text.
+
+
+
location
+
Optional
+
Object
+
The GeoJSON Point from which the post originated.
+
+
+
+
+
Essay
+
+
https://tent.io/types/post/essay/v0.1.0
+
+
+
+
Property
+
Required
+
Type
+
Description
+
+
+
+
+
title
+
Optional
+
String
+
The title of the post.
+
+
+
excerpt
+
Optional
+
String
+
An excerpt of the post in HTML format to be displayed when the whole post is not available.
+
+
+
body
+
Required
+
String
+
The body of the post in HTML format. Renderers may sanitize some HTML.
+
+
+
tags
+
Optional
+
Array
+
Tags that describe the post.
+
+
+
+
+
Photo
+
+
https://tent.io/types/post/album/v0.1.0
+
+
+
+
Property
+
Required
+
Type
+
Description
+
+
+
+
+
caption
+
Optional
+
String
+
A caption that describes the photo.
+
+
+
albums
+
Optional
+
Array
+
A list of the Post IDs of albums that this photo belongs to.
+
+
+
tags
+
Optional
+
Array
+
A list of tags that describe this photo.
+
+
+
exif
+
Optional
+
Object
+
The EXIF data that describes the photo.
+
+
+
+
+
Album
+
+
https://tent.io/types/post/album/v0.1.0
+
+
+
+
Property
+
Required
+
Type
+
Description
+
+
+
+
+
title
+
Optional
+
String
+
The title of the album.
+
+
+
description
+
Optional
+
String
+
The description of the album.
+
+
+
photos
+
Required
+
Array
+
The list of Post IDs of photos that the album contains.
+
+
+
cover
+
Optional
+
String
+
The Post ID of a photo that should be used as the cover/display image for the album.
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/output/docs/server-protocol.html b/output/docs/server-protocol.html
new file mode 100644
index 0000000..cd8ce82
--- /dev/null
+++ b/output/docs/server-protocol.html
@@ -0,0 +1,319 @@
+
+
+
+ Tent - the decentralized social web
+
+
+
+
+
+
These docs are very rough, incorrect, and incomplete. They will be modified heavily over the next few weeks.
+
Please contribute by making Pull Requests and Issues on the GitHub repository.
+
Tent Server-Server Communication Protocol
+
+
This document describes the protocol that Tent servers use to communicate with
+each other.
+
+
Server Discovery
+
+
Server discovery is done through HTTP Link headers as well as HTML link
+tags. Multiple links may be presented, and should be tried by the client in
+order.
+
+
HTTP Link Header
+
+
The HTTP header allows discovery of Tent servers by just doing a HEAD request
+instead of getting the page and parsing it for the link tag. It should be
+added to all responses associated with the Tent entity.
Notifications of new content are sent as POST requests to /posts and
+authenticated using the negotiated credentials.
+
+
+
+
\ No newline at end of file
diff --git a/output/index.html b/output/index.html
new file mode 100644
index 0000000..e28d533
--- /dev/null
+++ b/output/index.html
@@ -0,0 +1,187 @@
+
+
+
+ Tent - the decentralized social web
+
+
+
+
+
+
Tent is a protocol for open, decentralized social networking. Tent users share content with
+ apps and each other. Anyone can run a Tent server, or write an app or alternative server implementation
+ that uses the Tent protocol. Users can take their content and relationships with
+ them when they change or move servers. Tent supports extensible data types so developers can create new kinds of interaction.
+
+
Tent is for sharing with others and seeing what others have shared with you. You can ask to follow other users and other users can follow you. Because you control your own Tent server, it is also a good place to store things you do not
+ want to share with others, a sort of personal data vault. It can also be used as a secure site login replacement so you don't need passwords when accessing other sites on the web.
+
+
Why is Tent decentralized?
+
+
Decentralized services are resilient. If one part breaks or is turned off the other parts continue to operate normally. The Internet is decentralized. That's why the whole Internet doesn't shut down when one site or server is having problems. Important systems should be decentralized. The Internet itself, and the most important services on it, like the World Wide Web and email, are all decentralized systems based on open protocols. So is Tent. Most existing social sites could be reimplemented using Tent.
+
+
Decentralized services put users in control. Companies and products do not last forever. If a company changes its terms, shuts down, is acquired, discontinues a product, no problem – users can take their data and services with them and set up somewhere else – on their own server or at another service provider. Decentralized, protocol-based systems offer users a choice of providers and developers the opportunity to innovate, since developers deal directly with users, not a platform or company.
+
+
Distributed services using protocols have another big advantage: users on a network separated from the regular internet can still use them. Some countries and Internet Service Providers block access to services, users, and content that clash with the adminstration's politics. Totalitarian regimes have blocked centralized social networks, but distributed services inside the country, like that nation's web often continue to operate. Tent servers can be accessed over a wireless mesh network and run as a Tor hidden service, unlike centralized social networks.
+
+
The social web is too important to leave in the hands of any one company or government. The services on which the world depends need to be decentralized. Using Tent, the world can depend on social.
+
+
What does Tent do?
+
+
Tent servers maintain relationships between users and manage apps. Users create and view content on apps. When a users creates new content, their Tent server sends it to the followers they chose. It also listens for and stores new messages and content from the people and organizations that user follows. Every user on Tent also has a profile that stores basic information about the user. Tent also lets users control which apps can access their data and what can be done with it.
+
+
How can I use Tent?
+
+
First you need a Tent server. A Tent server sends new content to your followers
+ and listens for new content from people you follow. It stores all this content
+ safely so it's available for you to view later. You view and create content with
+ apps. Apps connect to your server to post new content you've created and ask for
+ content from people you follow. You can limit apps so they can't see all your
+ content. If you have private photos or messages, you might want only a few apps
+ to see them.
+
+
Soon you will be able to download and run Tent server on your own hardware or get started with
+ a hosted provider who runs the server for you. You could also write your own
+ server and apps from scratch using the developer documentation.
+
+
Can I switch Tent servers?
+
+
Absolutely! And you can take your relationships – your followers with you. If
+ a service provider changes its terms, shuts down, is acquired, discontinues
+ a product, no problem – you can take your data and relationships with you and
+ set up somewhere else – on your own server or at another provider.
+
+
Can I get my data out of Tent?
+
+
Of course! There are two simple ways: with an app or another Tent server. Just
+ authorize a Tent app or a new Tent server to view the content and it will
+ transfer over automatically.
+
+
What can Tent users do that they could not on other social networks?
+
+
Tent users can take their relationships–the users they follow and the users who follow
+ them–and their content with them. Tent also lets them control their data, decide who
+ can see it, and how they can use it. Tent is distributed and an open protocol,
+ so if they don't like an app or service they can change
+ providers or write their own.
+
+
They do not have to tell anyone about their Tent servers. They can also run a Tent
+ server as a Tor hidden service, making it even harder for anyone to silence their voices online or track them down. Tent respects pseudonyms, handles, and everyone's
+ right to anonymity. Since users control their own Tent servers, they also choose their
+ name, which can be anything they want.
+
+
Even more features are coming in the next version of Tent.
+
+
What is wrong with other social services?
+
+
Centralized Social Service Providers limit what you can share and who
+ you can share with. They only allow users to interact with other users on the same network.
+ Because their products are centralized and maintained by a company, users are left in the cold when the company changes its products or shuts down. There's nothing wrong with a company offering users social services. But users shouldn't be limited by those companies. Imagine if you could only email other customers of your Internet Service Provider.
+ Unfortunately Centralized Social Service Providers have done just that. You can only communicate directly with other users of their closed network.
+
+
If you don't like a bank you can withdraw your money and deposit it somewhere else, including your own home. You could even start a new bank where you and your friends felt safe. You can still pay your bills and maintain your financial
+ relationships, just tell them about your new account. We aren't talking about money. Your data is far more valuable– your family and friends' photos, locations, and private communications. You should be able to store them somewhere you trust, move them when you want, control who can and can't see them.
+
+
What about the federated social web?
+
+
Federated services add a few capabilities to Centralized Social Service
+ Providers' products. Generally users can broadcast a stream of public events to
+ other services in the Federation. Because private messages (and many other
+ important features) are beyond the scope of most federation protocols, users can
+ not send private messages to users of other Social Service Providers. Since
+ these features are not standardized, Social Service Providers must implement
+ proprietary features. This locks users into a specific Social Service Provider,
+ and causes fragmentation which prevents interoperability. Diaspora* and OStatus
+ were the first steps in moving away from Centralized Social Service Providers, but
+ stopped short of actual decentralization. Any long-term solution will require
+ a fully distributed architecture in its core design.
+
+
Does Tent have ads?
+
+
Tent is a protocol like email or the World Wide Web. Anyone can run their own
+ Tent server (which would be ad-free) or host a Tent server for others. Just like
+ email, some providers show ads to make money so they can host your Tent server
+ for free. Others charge users directly and don't need ads. It's your choice.
+
+
Does Tent cost money?
+
+
Tent is a set of protocols like email or the world wide web. Tent itself is and
+ will always be free. Anyone can run or implement a Tent service or write a new
+ app that works with Tent. Just like email, some providers are free and others
+ cost money. Don't like any of the existing providers? Start your own.
+
+
What is a protocol?
+
+
A protocol defines how to do something in a standard way. Our daily lives are
+ filled with protocols. If you want to enter someone's home, knock or ring the
+ doorbell first. If you attach a stamp to a letter and address it properly, the
+ post office will mail it for you. You don't have to have a conversation with the
+ letter carrier each time. Computers need protocols to handle information properly. Tent tells computers how to handle social information – what to share with a specific group of followers or apps, and what to keep private. It also helps you tell another user that you want to know when they post new information, like a status or photo.
+
+
Why doesn't Tent use my favorite protocol?
+
+
The architects of Tent investigated existing protocols for the distributed
+ social web. Each of them lacked several critical features necessary for modern users.
+
+
Can I donate to Tent?
+
+
Tent needs you, not your money. There are several ways you can help:
+
+
+
Start your own Tent server. The most important thing you can do is switch to
+ using Tent. Very soon you will be able to download the source code for Tent server and host your own.
+ There will also be a hosted service at Tent.is soon.
+
Tell your friends. The next generation of the social web won't be of much
+ use if people don't use it for their social networks. Tell your friends to
+ get a Tent server and proudly display your Tent address throughout your
+ world–on your business card, email signatures, and other social services.
+
Suggest a feature or change in Tent. Tent is still under development. If you
+ see something wrong or confusing or think we left something out, please tell
+ us by emailing comment@tent.io or creating an issue on our github repository.
+
Build for Tent. Please integrate Tent support into your existing and new
+ services. The Tent ecosystem needs apps as much as users. Tent gives
+ developers much more freedom than Centralized Social Service Providers have
+ allowed before. We can't wait to see what the community comes up with. Client
+ libraries are coming soon.
+
Ask others to build for Tent Request Tent support in your favorite social apps. Developers will only support new protocols if they know their users are interested and will use the new features. Tell them you want support for Tent.
+
+
+
Is there a Tent app for my favorite activity?
+
+
If there isn't you should write one!
+
+
Where did Tent come from?
+
+
Tent began after a conversation between Jonathan Rudenberg, Daniel Siders, Jesse
+ Stuart, and Lucas Wojciechowski. It was inspired by Hypertext, Xanadu, SMTP, the
+ World Wide Web, and distributed peer-to-peer services.
+
+
How is Tent licensed?
+
+
Tent will be completely free and open and treated as a standard. To prevent fragmentation before launch, the original authors currently retain copyright. This is a temporary situation which will be remedied immediately after a governance model is chosen. We decided it would be best to share what we could as soon as possible, releasing early and often. We are entirely committed to free and open software and protocols with open governance models leading to a ratified standard. Tent will be released under an open license in the immediate future.