1
0
mirror of https://codeberg.org/fediverse/fep.git synced 2026-08-05 11:46:04 +00:00

FEP-844e: Capability discovery (#623)

Reviewed-on: https://codeberg.org/fediverse/fep/pulls/623
Co-authored-by: silverpill <silverpill@firemail.cc>
Co-committed-by: silverpill <silverpill@firemail.cc>
This commit is contained in:
silverpill
2025-06-14 14:27:27 +02:00
committed by silverpill
parent 80d9ae0b7f
commit d2897e366d
2 changed files with 113 additions and 0 deletions
+9
View File
@@ -0,0 +1,9 @@
{
"@context": {
"implements": {
"@id": "https://w3id.org/fep/844e/implements",
"@type": "@id",
"@container": "@list"
}
}
}
+104
View File
@@ -0,0 +1,104 @@
---
slug: "844e"
authors: silverpill <@silverpill@mitra.social>
type: implementation
status: DRAFT
dateReceived: 2025-06-14
discussionsTo: https://codeberg.org/silverpill/feps/issues
---
# FEP-844e: Capability discovery
## Summary
Capability discovery for [ActivityPub] applications.
This document is based on the idea described in [FEP-aaa3: Listing Implemented Specifications on the Application Actor][FEP-aaa3].
## Requirements
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC-2119].
## Application object
An application can advertise its capabilities using the `implements` property on an `Application` object.
This object might not be an actor. The value of `implements` property MUST be an array of `Link` objects, each containing the following properties:
- `href` (REQUIRED): the unique identifier of the implementable feature. The value MUST be an URI.
- `name` (RECOMMENDED): the short description of the implementable feature.
Example:
```json
{
"type": "Application",
"id": "https://social.example/server",
"implements": [
{
"href": "https://datatracker.ietf.org/doc/html/rfc9421",
"name": "RFC-9421: HTTP Message Signatures"
}
]
}
```
## Discovery through an actor
An `Application` object can be linked to an actor using the [`generator`][generator] property. The value of this property SHOULD be a partial object containing the `implements` property. That object MAY be anonymous (without an identifier).
Example:
```json
{
"id": "https://social.example/actors/1",
"type": "Person",
"inbox": "https://social.example/actors/1/inbox",
"outbox": "https://social.example/actors/1/outbox",
"generator": {
"type": "Application",
"implements": [
"href": "https://datatracker.ietf.org/doc/html/rfc9421",
"name": "RFC-9421: HTTP Message Signatures"
]
}
}
```
## Discovery through a well-known endpoint
The mechanism of discovering an `Application` object using WebFinger is described in [FEP-d556].
Capability discovery through NodeInfo endpoint is discouraged.
## Intended use
The reliance on the mechanism described in this document might increase implementation complexity and hinder interoperability.
Implementers MUST NOT use it in cases where capabilities can be inferred from properties and types of objects.
## Registry of implementable features
(This section is non-normative.)
| Name | Identifier |
| --- | --- |
| RFC-9421: HTTP Message Signatures | https://datatracker.ietf.org/doc/html/rfc9421 |
## References
- Christine Lemmer-Webber, Jessica Tallon, Erin Shepherd, Amy Guy, Evan Prodromou, [ActivityPub], 2018
- S. Bradner, [Key words for use in RFCs to Indicate Requirement Levels][RFC-2119], 1997
- Helge, [FEP-aaa3: Listing Implemented Specifications on the Application Actor][FEP-aaa3], 2024
- Steve Bate, [FEP-d556: Server-Level Actor Discovery Using WebFinger][FEP-d556], 2024
[ActivityPub]: https://www.w3.org/TR/activitypub/
[RFC-2119]: https://datatracker.ietf.org/doc/html/rfc2119.html
[FEP-aaa3]: https://codeberg.org/helge/fep/src/commit/e1b2a16707b542ea5ea0cfb390ac1abce89f05bb/fep/aaa3/fep-aaa3.md
[FEP-d556]: https://codeberg.org/fediverse/fep/src/branch/main/fep/d556/fep-d556.md
[generator]: https://www.w3.org/TR/activitystreams-vocabulary/#dfn-generator
## Copyright
CC0 1.0 Universal (CC0 1.0) Public Domain Dedication
To the extent possible under law, the authors of this Fediverse Enhancement Proposal have waived all copyright and related or neighboring rights to this work.