The failure of a single server in a decentralized system does not bring it down for everyone. Furthermore, users have
the ability to switch between different servers or providers if one becomes abusive (or simply stops existing). Users
have more choices, and more control.
__For Matrix Highlight specifically__, this means not having to rely on one specific group or company
for storing and managing your annotations or notes.
#### Federated
Decentralization by itself does not make for useful software. There might very well be multiple servers providing access
to a particular piece of software. However, there's no guarantee that users of one such server can meaningfully interact
with users of another server. Microsoft's Office 365 has collaborative document editing, and so does Google Docs. However,
users of the two services cannot collaborate with _each other_.
In a federated system, the various providers establish a way of working together. The [Fediverse](https://en.wikipedia.org/wiki/Fediverse)
is a big example of this. Users of various [Mastodon](https://joinmastodon.org/) servers can see each other's messages and posts,
despite residing on servers with differing rules and administration. Users of Matrix can send messages between servers, with only
one account.
__For Matrix Highlight__, this means that users who choose to use different servers or providers are still able to collaboratively highlight
and annotate pages together.
#### Self-Hosted
Self-hosting is the practice of running the various software you use yourself. This allows you yourself to be in charge of your data,
instead of _any_ other entity, however trustworthy. A popular self-hosted solution is [Nextcloud](https://nextcloud.com/), which
may be used, among other things, as a Google Drive replacement that you run on your own server. With Nextcloud, your files
are completely under your own management, rather than that of some other person or company elsewhere.
__For Matrix Highlight__, this means that users can choose to run all the necessary software themselves, and thus remain in complete
control of their annotation and other data.
### What it Looks Like
First of all, you can watch a little demo video I recorded here:
{{<youtubeQ3h5A0DsE1s>}}
You already got a little taste of Matrix Highlight in the opening screenshot. However, I'd like to show you some more of what I have
so far. The most important aspect of the tool is the ability to annotate web pages. The tool can be brought up on any page;
I typically test it on my blog, but that's just because it's convenient. Selecting some text brings up a little highlighting tooltip:
{{<figuresrc="mhl_tooltip.png"caption="A matrix highlighting tooltip appearing over one of the sidenotes in a different article.">}}
Selecting one of the colors in the tooltip creates a new highlight of the text you had selected:
{{<figuresrc="mhl_highlight.png"caption="The result of clicking a color in the previous screenshot.">}}
Annotations applied in this way are shared across all active instances of a Matrix Highlight page, including those shared with other users.
{{<figuresrc="mhl_multi.png"caption="Two chrome windows with the same annotations."class="fullwide">}}
Highlights created by users can also be browsed as a list:
{{<figuresrc="mhl_quotelist.png"caption="A list of highlights from another page."class="medium">}}
Highlights are stored in Matrix rooms. Since Matrix rooms are effectively chat rooms, they are built for being shared with other users.
Thus, it is very simple to give another user access to the current list of highlights.
{{<figuresrc="mhl_userlist.png"caption="A list of users for a particular page."class="medium">}}
This also means that a single page can have multiple
independent sets of highlights, allowing you to organize them however you like. For instance, if you're proofreading a page of your own,
you may have a highlight set (Matrix room) for every editing pass. The rooms can be switched at a moment's notice:
{{<figuresrc="mhl_roomlist.png"caption="A list of rooms for a particular page."class="medium">}}
### Current and Planned Features
The following are the current and planned features for Matrix Highlight:
* __Current__: Create and send website annotations over Matrix.
* __Current__: Store data in a decentralized and federated manner.
* __Current__: Share highlights with other users, including those on other servers.
* __Current__: Group annotations together and create multiple annotation groups
* __Planned__: Use Matrix's End-to-End encryption to ensure the secure transmission and storage of highlight data.
* __Planned__: Leverage the new [`m.thread` MSC](https://github.com/matrix-org/matrix-doc/blob/gsouquet/threading-via-relations/proposals/3440-threading-via-relations.md) to allow users to comment on and discuss
highlights.
* __Planned__: Use something like [ArchiveBox](https://archivebox.io/) to cache the current version of a website and prevent annotations from breaking.
* __Planned__ Highlight PDFs in addition to web pages.
### Project Status and Conclusion
For the moment, I'm refraining from publishing the project's source or output extensions. This is a hobby project, and I don't want to share
something half-baked with the world. However, I fully intend to share the code for the project as soon as I think it's ready (which would probably
be when I feel perfectly comfortable using it for my own needs).