<!--
SPDX-FileCopyrightText: 2026 Kerstin Humm <kerstin@erictapen.name>

SPDX-License-Identifier: AGPL-3.0-or-later
-->

# FEP-8a8e Validation suite

A collection of checks to make sure your
[ActivtyStreams Event objects](https://www.w3.org/TR/activitystreams-vocabulary/#dfn-event)
are compliant with
[FEP-8a8e](https://codeberg.org/fediverse/fep/src/branch/main/fep/8a8e/fep-8a8e.md).
FEP-8a8e is a standard that tries to unify how the Fediverse talks about events
(as in gatherings of people).

Ideally this validation suite enables developers to write correct
implementations without having to read the (entire) standard document.

While currently being heavily work in progress, it aims for the following
feature set:

- [x] Provide Warnings, Violations and Notes to give feedback to implementers
- [x] Annotations are as specific as possible in two directions; The relevant
      JSON value in the object and the relevant sentence in the standard.
- [x] Library for web based frontends, e.g. https://fep-8a8e.erictapen.name/
- [x] CLI application for local testing and use in CI
- [ ] Every paragraph in the FEP has one corresponding rule
- [ ] Check for JSON-LD compliance and make suggestions about contexts

# Try it out

The easiest way for trying out the validator is to just use
[the web frontend](https://fep-8a8e.erictapen.name/).

If you want to try out the CLI application, you can use Node for a quick entry.

```console
$ npx fep-8a8e-validator --help
Usage: fep-8a8e-validator [options] <input>

Arguments:
  input                          Validate a file or URL providing an ActivityStreams Event object. Use `-` for reading from stdin.

Options:
  -V, --version                  output the version number
  -s, --strictness <strictness>  On which kind of urgency level to fail (choices: "Violation", "Warning", default: "Violation")
  -h, --help                     display help for command
```

# Hacking

For running the code from the repository:

```console
$ npm install
$ npm run build
$ ./dist/bin/fep-8a8e-validator.js --help
```

This Project doesn't have CI yet, but for now you can run static analyis this
way:

```console
$ nix develop
$ pre-commit run --all
```

# Acknowledgement

[<img src="./assets/img/acknowledgement-NLnet.svg" alt="NLnet foundation logo" width="20%" style="margin: 10px 5% 10px 5%;"/>](https://nlnet.nl)
[<img src="./assets/img/acknowledgement-NGI0Core.svg" alt="NGI Zero Logo" width="20%" style="margin: 10px 5% 10px 5%;"/>](https://nlnet.nl/entrust)

This [project](https://nlnet.nl/project/WP-ActivityPub-polls/) was funded
through the [NGI0 Commons Fund](https://nlnet.nl/commonsfund) a fund established
by [NLnet](https://nlnet.nl) with financial support from the European
Commission's [Next Generation Internet](https://ngi.eu) programme, under the
aegis of
[DG Communications Networks, Content and Technology](https://commission.europa.eu/about-european-commission/departments-and-executive-agencies/communications-networks-content-and-technology_en)
under grant agreement N<sup>o</sup>
[101135429](https://cordis.europa.eu/project/id/101135429). Additional funding
is made available by the
[Swiss State Secretariat for Education, Research and Innovation](https://www.sbfi.admin.ch/sbfi/en/home.html)</a>
(SERI).
