- Go 76.7%
- JavaScript 10.7%
- Nix 4.8%
- HTML 4%
- CSS 3.3%
- Other 0.5%
Glider: Global Identifier Resolver
This repository contains:
- A collection of methods for dereferencing identifiers and collecting the information they point to.
- A generic mechanism for building a directed graph of identifiers and partitioning it to identify user accounts and the links between them.
- A simple web service to query the graph and present the results visually.
What's it for?
People who sign up for the Fediverse often end up creating a variety of accounts on a number of different services, and this rapidly gets confusing. People often ask for easier ways to manage all of these disparate identities.
We have ways to indicate that accounts are linked to one another, such as by adding rel="me" links
(aka "verified links") or by customising webfinger responses. Interpreting these links could lead to
methods for automatically detecting other accounts which belong to the same person. With a bit of
creativity this could make some significant UI/UX improvements possible.
Types of identifier
| Identifier | Status |
|---|---|
| Webfinger | Supported |
| Web page URL | Supported |
| ActivityPub actor ID | Supported |
| Decentralised Identifier (DID) | Planned |
| ATProto handle | Planned |
Here comes the science bit. Pay attention!
Searching for someone's Fediverse ID using WebFinger yields links to their profile page and to their ActivityPub actor.
graph TB
A(webfinger)-->B[Profile page]
A-->C[Actor record]
The actor record contains a link back to the WebFinger ID via the preferredUsername property. Once we've verified that links exist in both directions, we can conclude that both identifiers belong to the same person:
graph TB
A(webfinger)-->B(Profile page)
subgraph Confirmed
A-->C(Actor record)
C-->A
end
In computer-science terms, identifiers and links form a directed graph, and when we've found a bidirectional link, the identifiers are said to form a strongly-connected component (or SCC) of the graph. Glider starts with an identifier and searches for the strongly-connected component that contains it.
In practice, people can add edges to their graphs and create bidirectional links of their own. It's common for people to create "verified links" to their profile pages on other sites and this causes their SCC to extend outside the boundary of a single Fediverse account:
graph TB
subgraph Fediverse
A(webfinger)-->B(Profile page)
B-->A
A-->C(Actor record)
C-->A
C-->B
end
subgraph Github
D(GitHub)-->B
B-->D
end
Building / developing
This project is developed using Linux. Development dependencies are managed with the Nix package manager. To start a development shell:
$ nix develop
This will be quite slow the first time you run it. Subsequent runs will be much faster.
You might be able to get away without using Nix if you have the Go toolchain installed locally. (The Docker build requires it, though.)
Once you're in the development shell, some useful commands are:
make- build the two binaries, the commandline toolbin/gliderand the web explorerbin/glider-web.make docker- build a Docker image containing the web explorer; this is what's running on https://glider.mythik.co.uk/make testto run the unit testsairto run the web explorer locally for testing and development. This will automatically rebuild and re-run when you edit the source files.