diff --git a/doc/userguide/appendix/eve-schema.rst b/doc/userguide/appendix/eve-schema.rst
new file mode 100644
index 0000000000..1462fc6056
--- /dev/null
+++ b/doc/userguide/appendix/eve-schema.rst
@@ -0,0 +1,80 @@
+EVE JSON Schema
+###############
+
+The Suricata source distribution contains a JSON schema for the EVE
+log files. This schema follows the `JSON Schema
+`_ specification and can be found in
+``etc/schema.json``. If your distribution does not contain this file,
+it can be viewed online at
+https://github.com/OISF/suricata/blob/master/etc/schema.json, but note
+that it is version-specific and may change between major versions of
+Suricata.
+
+This schema attempts to log all possible fields that may be seen in
+Suricata's **EVE** output, including their datatype. It also includes
+extensions to help map log fields to related detection keywords.
+
+Suricata Schema Extensions
+^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+We have extended JSON schema with a ``suricata`` object to add extra
+Suricata context such as detection keywords related to a log field,
+for example:
+
+.. code-block:: json
+
+ "rrname": {
+ "type": "string",
+ "suricata": {
+ "keywords": [
+ "dns.answers.rrname",
+ "dns.response.rrname"
+ ]
+ }
+ }
+
+The above shows that a field named ``rrname`` has 2 keywords that are
+related. Please refer to the keyword documentation to see precisely
+how they are used and related to the field being logged.
+
+Extension Reference
+===================
+
+The ``suricata`` extension object is valid on objects inside the
+``properties`` object. The ``suricata`` object may accept the
+following fields:
+
+``keywords``
+------------
+
+**Type:** ``array`` or ``boolean``
+
+* **When an array:** Contains keyword names that are related to this
+ JSON property. Each keyword in the array represents a detection rule
+ keyword that can be used to match against the corresponding field
+ value.
+
+* **When ``false``:** Indicates that this JSON property has no
+ applicable keyword. This is used for metadata fields that don't
+ correspond to actual network data. For example, the ``version``
+ field inside a DNS object denotes the version of the log format and
+ is unrelated to any aspect of a DNS message, therefore no keyword is
+ applicable.
+
+.. note:: As of Suricata 8.0, mapping log fields to detection keywords
+ is a work in progress. Any field that does not have a
+ ``suricata.keywords`` value still needs to be evaluated.
+
+Schema Tooling
+^^^^^^^^^^^^^^
+
+* `Suricata-Verify `_: Our
+ own tool for verifying every Suricata pull request, validates all
+ EVE logs generated against the schema.
+
+* ``./scripts/eve-parity.py``: Found inside the Suricata source code
+ when checked out with ``git``, is a tool to provide information on
+ how log fields map to keywords, or how keywords map to log entries.
+
+* ``./scripts/evedoc.py``: Generate documentation from the schema,
+ such as the :doc:`eve-index` included in this documentation.
diff --git a/doc/userguide/appendix/index.rst b/doc/userguide/appendix/index.rst
index 56cf7923b4..b186572e36 100644
--- a/doc/userguide/appendix/index.rst
+++ b/doc/userguide/appendix/index.rst
@@ -4,4 +4,5 @@ Appendix
.. toctree::
:maxdepth: 1
+ eve-schema
eve-index