Servers need to communicate their capabilities in a network of communicating nodes to negotiate a common protocol.
## Proposed solution
Use [NodeInfo](http://nodeinfo.diaspora.software), a well-defined standard for exactly this purpose that's widely used within the Fediverse.
## Feature behavior
The NodeInfo endpoint is used to communicate the features and capabilities of a server. It presents details about:
- Implemented protocols
- Enabled features
- Usage statistics
- Content metadata
:::{seealso}
Read [the NodeInfo specification for more information](https://nodeinfo.diaspora.software/docson/index.html#/ns/schema/2.1#$$expand).
:::
The NodeInfo endpoint must contain all mandatory elements listed in the specification. In addition to this, Funkwhale's implementation should list additional details about the instance.
`actorId` (URL)
: The URL of the pod service actor
`private` (Boolean)
: Whether the pod is private
`shortDescription` (String)
: A short description of the pod
`longDescription` (String)
: A longer description of the pod
`rules` (String)
: A collection of rules users of the pod must abide by
`contactEmail` (Email address)
: The email address of the pod administrator
`terms` (String)
: The terms of use associated with the pod
`nodeName`(String)
: The name of the pod
`banner` (URL)
: The URL of the banner image
`defaultUploadQuota` (Number)
: The default upload quota (in megabytes) allowed for new users
`supportedUploadExtensions` (Array\<String\>)
: A list of file extensions enabled for upload
`allowlist.enabled` (Boolean)
: Whether the pod admin has enabled allow-listing
`allowlist.domains` (Array\<String\>)
: A list of allowed domains
`funkwhaleSupportMessageEnabled` (Boolean)
: Whether the admin has enabled the Funkwhale project support message
`instanceSupportMessage` (String)
: The support message associated with the instance
Since the actual endpoint is already standardized, Backend developers need only to agree on an implementation. The Frontend group needs to check to see if changing the location of `/.well-known/nodeinfo` has an impact on the web app.
The NodeInfo endpoint MUST be accompanied by a {download}`full OpenAPI schema file <schema.yml>` for ease of reference and implementation.
## Open questions
- [ ] Does changing `/.well-known/nodeinfo` have any implications on the Frontend?