######octothorp.es
View Options
Show

Hashtags for the Open Internet

Octothorpes are hashtags and backlinks that can be used anywhere on the web, linking urls and resources across a network of domains.

How to Octothorpe

  1. Register with an Octothorpes Ring
  2. Create Hashtags on your site.
  3. Create Backlinks to other sites.

Why Tho

Octothorpes frees the fun and utility of hashtags from the confines of commercial platforms and individual domains.

Octothorpe servers expand on web rings and blog rolls, acting as feeds and search engines that small communities can easily own and manage.

Getting Started

Every Octothorpes Ring is a collection of verified domains, each opting in to being indexed and contributing it’s links to the overall network.

The first step is to add your domain to the Ring.

Register a Domain

In order to contribute to the Ring, domains need to be verified. You can register your domain on this Ring.

Registration allows Rings to manage spam and other unwanted content. Be sure to read a Rings terms before registering.

Verify a Domain

Note: Different Rings may have different rules for domain verification.

To verify a domain in this Ring, the administrator of the Ring will determine if the domain is appropriate and aligned with the goals and terms of the Ring.

Domain Approval

Once your domain has been registered, you will receive an email. Check to see if your domain is present on the Rings list of sites.

View In Roadmap // Feedback

Web of Trust

Any domain that is verified on an Octothorpes Ring can endorse another domain, automatically verifying the new domain.

To endorse another domain, add a <link> tag to a page on your website.

<link
  rel="octo:endorses"
  href="https://endorsed.example.com">

View In Roadmap // Feedback

Tags

You can tag your pages with terms, which are collected on your Ring.

Indexing a Page

Pages are passively indexed by Octothorpe Rings. To index a page whenever someone visit it, add this link tag to the documents head.

<link 
  rel="preload" 
  as="fetch" 
  href="<ring>/?uri=<page>">

<ring>: The URL for an Octothorpes Ring.

<page>: The URL for the page being indexed.

A single page can request indexing from any number of Rings. Include one <link> tag for each Ring.

By default, a ring will not index a page more regularly than once every five (5) minutes.

Specifically, octothorpes are links between your page and a Ring’s tag. Create them by adding a <link> tag to your pages <head>.

<link 
  rel="octo:octothorpes"
  href="architecture" >

rel=: Defines the link as an Octothorpe.

href=: References a Tag on an Octothorpes Ring.

This <link> will tag the page with the octothorpe #architecture.

Octothorpes Are Anchors

If you want a link to be an octothorpe in the content of your page rather than just metadata, you can use an <a> tag.

<a 
  rel="octo:octothorpes" 
  href="<ring>/~/architecture">
  Architecture
</a>

rel=: Defines the link as an Octothorpe.

href=: References a Tag on an Octothorpes Ring as well as a URL on your website.

This <a> will tag the page with the octothorpe #architecture.

Backlinks are links that go … back. Pages within a Ring can see which other pages linked to them.

Backlinks are anchors. If you want a link to be saved as a backlink can define the relationship on the <a> tag.

<a 
  rel="octo:octothorpes" 
  href="https://ideastore.dev/">
  The Idea Store
</a>

This will allow https://ideastore.dev/ to backlink to this page.

In order to be recorded in the Ring, a pages need to endorse backlinks. Any page can endorse backlinks from any origin by including a <link> tag in the the <head> of the page.

<link 
  rev="octo:octothorpes" 
  href="*">

Pages can limit the domains they endorse backlinks from:

<link 
  rev="octo:octothorpes" 
  href="https://originating-site.com">

That tells the Octothorpe server that you endorse links originating from the specified URL, and they’ll be registered as backlinks.

You can fetch a pages backlinks as a JSON object by GETing the following endpoint:

<ring>/~/<url>

Note; make sure to encode the URL

Bookmarks

Bookmarks are a combination of a backlink and a hashtag.

Bookmarks as Assertions

Creating a Bookmark is adding Hashtags to a URL that you don’t control. You create a bookmark by sending a URL that is not on your domain to the an Octothropes Ring for indexing, along with additional information you want to associate with the bookmark.

<link
  rel="preload"
  as="fetch"
  href="<ring>
    ?uri=<not-your-url>
    &octothorpes=<term>,<another>"
>

Communities

There are several ways to interact with an Octothorpes Ring.

Report a URL

To report any part of an Octothorpes ring, submit a report of the offending URL at that rings report form. This will alert the Octothorpe Rings admin to take appproriate action.

Moderation

Any verified domain on an Octothorpes Ring can take action to moderate that ring. These actions include:

  1. Ban a Term
  2. Ban a Domain

To perform moderation, visit the report form, authenticate a URL, and submit your report.

Authenticate a URL

  1. On the report form, click Authenticate URL.
  2. Enter the URL and hit “Authenticate”.
  3. Copy the provided <link> tag to the <head> of that URL.

Submit an Authenticated Report

  1. Enter the URL of the Site or Term to take action against.
  2. Select the URL to authenticate the action with.
  3. Submit the report.

Any domain or term that has an authenticated report against it will be removed from the Octothorpe Ring.

RSS Feeds

You can follow an entire Ring, and receive every new tag event, by subscribing to the Rings feed:

<ring>/rss

You can follow specific tag individualy by subscribing to those tags feeds:

<ring>/~/<tag>/rss

ActivityPub & Mastodon

An Octothorpes Ring, or any Tag in a Ring, can be followed as an ActivityPub Agent.

The username for the entire Ring is:

@~@<ring>

The username for a specific tag is:

@<tag>@<ring>

Hosting a Community

Anyone can host an Octothorpes Ring for their community. Use either the open source codebase directly, or reach out to admin@octothorp.es to inquire about a managed instance.

Technical Details

An Octothorpes ring is stored as a graph of statements – which URLs reference which term, which URLs link to which URLs, and which URLs bookmark other URLs with which terms.

How Indexing Works

When you use the <link> to request that a page gets indexed, here’s what happens:

1. Your page sends a GET request to the server.

The ?uri= query paramenter gets sent along with this request to tell the server which page it should index. The server only can see the originating domain, and this uri parameter.

Any page on your domain can request any other page get indexed by sending this GET request. Adding the <link> element anywhere in your document does this on page load, but it can happen at any time in any way.

2. The server checks to see if this domain is verified.

If the domain requested for indexing is a verified member of the ring, it will get indexed. Otherwise it wont.

3. The uri gets indexed.

The server will request the HTML body of uri in order to index it. It will not make more than 1 request every five minutes to avoid DDoSing you.

This request is just a regular fetch request to GET your page. It should not impact your server any more than a single user visiting your site would.

4. Look for relationships.

In the HTML that comes directly from the server, we look for any tags, links, or bookmarks.

This means that any Octothorpes added with client-side JavaScript will not be verified. The relationships must be present in the HTML from your server to be trusted.

5. The server saves the relationships to it’s graph.

The graph is a series of statements about domains, pages, and their relationships.

Statements about a page that octothorpes a term are hashtags.

Statements about a page that octothorpes another page are backlinks.

Statements about a page that octothorpes another page with terms are bookmarks.

Bulk Indexing

You can send a json-ld graph of your entire sites index to an Octothorpe ring in order to pro-actively add your tags, backlinks, and bookmarks to the graph.

REST API

You can fetch any Tag as a JSON object via a GET request against the tags URL:

curl -X GET   -H "Content-type: application/json"   -H "Accept: application/json"   "<ring>/~/<tag>"

GET https://octothorp.es/

Fetches information about the Ring.

Response:

{
  "instance": "https://octothorp.es/"
}

GET https://octothorp.es/domains

Fetches a list of verified domains that are part of the Ring.

Response:

{
  "domains": […]
}

GET https://octothorp.es/domains/<domain>

Fetches all pages, octothorpes, and backlinks associated with a domain.

Response:

{
  "uri": <domain>,
  "octothorpes": […]
}

GET https://octothorp.es/~

Fetches all the terms present on a Ring.

Response:

{
  "octothorpes": […]
}

GET https://octothorp.es/~/<term>

Fetches all the URLs that octothorpe a given Term.

Response:

{
  "uri":"https://octothorp.es/~/<term>",
  "octothorpedBy": […url]
}

GET https://octothorp.es/index?uri=<uri>

Submits a given uri for indexing on the Ring.

Response:

200