1
2
Fork
You've already forked glider
0
Global Identity Resolver
  • Go 76.7%
  • JavaScript 10.7%
  • Nix 4.8%
  • HTML 4%
  • CSS 3.3%
  • Other 0.5%
2026年06月06日 09:50:41 +01:00
doc Documentation for the web viewer 2025年02月17日 12:24:39 +00:00
glider First public version 2025年02月17日 11:53:40 +00:00
glider-web Fix error prints, found by 'go vet' 2026年06月06日 09:50:41 +01:00
LICENSES First public version 2025年02月17日 11:53:40 +00:00
web Use max-width instead of width to adapt to phone screens 2025年02月17日 12:46:52 +00:00
.air.toml Further dependency updates 2025年08月18日 09:29:50 +01:00
.gitignore First public version 2025年02月17日 11:53:40 +00:00
activitypub.go First public version 2025年02月17日 11:53:40 +00:00
activitypub_test.go First public version 2025年02月17日 11:53:40 +00:00
constants.go First public version 2025年02月17日 11:53:40 +00:00
context.go First public version 2025年02月17日 11:53:40 +00:00
errors.go First public version 2025年02月17日 11:53:40 +00:00
flake.lock Update to nixpkgs 26.05, Go 1.26 2026年06月06日 09:42:46 +01:00
flake.nix Update to nixpkgs 26.05, Go 1.26 2026年06月06日 09:42:46 +01:00
glider.nix First public version 2025年02月17日 11:53:40 +00:00
go.mod Further dependency updates 2025年08月18日 09:29:50 +01:00
go.sum Further dependency updates 2025年08月18日 09:29:50 +01:00
gomod2nix.toml Further dependency updates 2025年08月18日 09:29:50 +01:00
graph.go First public version 2025年02月17日 11:53:40 +00:00
graph_test.go First public version 2025年02月17日 11:53:40 +00:00
html.go Allow web addresses to be entered without a scheme 2025年08月18日 10:06:07 +01:00
html_test.go Allow web addresses to be entered without a scheme 2025年08月18日 10:06:07 +01:00
json.go First public version 2025年02月17日 11:53:40 +00:00
Makefile Update dependencies 2025年08月17日 12:45:30 +01:00
partition.go First public version 2025年02月17日 11:53:40 +00:00
partition_test.go First public version 2025年02月17日 11:53:40 +00:00
README.md Makefile; development instructions 2025年02月17日 12:36:08 +00:00
testlib.go First public version 2025年02月17日 11:53:40 +00:00
types.go First public version 2025年02月17日 11:53:40 +00:00
util.go First public version 2025年02月17日 11:53:40 +00:00
webfinger.go Trim whitespace from webfinger IDs and URLs 2025年02月19日 15:30:03 +00:00
webfinger_test.go Trim whitespace from webfinger IDs and URLs 2025年02月19日 15:30:03 +00:00

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 tool bin/glider and the web explorer bin/glider-web.
  • make docker - build a Docker image containing the web explorer; this is what's running on https://glider.mythik.co.uk/
  • make test to run the unit tests
  • air to run the web explorer locally for testing and development. This will automatically rebuild and re-run when you edit the source files.