---
url: /reference/manifest.md
description: 'The JSON a service''s Manifest is written as: every object and its keys.'
---

# Manifest Format

A service's Manifest is one JSON document (`format` 1): its bounded contexts, their aggregates with the commands and events they speak, their subscriptions, the framework's error codes, and the JSON Schema 2020-12 of every payload under `$defs`. A module's fragment (`META-INF/wow/manifest/<module>.json`) has the same shape without `service`. This outline of every object and its keys is generated from the code that writes it, [`ManifestTree`](https://github.com/Ahoo-Wang/Wow/blob/main/api/manifest/src/main/kotlin/me/ahoo/wow/manifest/ManifestTree.kt).

What the writer leaves out:

Absent optional values (a null description, unknown `produces`, `derives`, `schedules` or `transformsTo`, a fragment's service, a subscription's `retry` or `job`) are left out, not written as null, and so are a subscription source's `nullableState` and a command's `mounted` when false, an aggregate's `ownership` when it is `OWNER`, the default, and its `retired` events when it has none.

## `Manifest`

* `format`
* `service`: object; left out when absent or at its default
  * `name`
  * `version`
* `contexts`: array of [`Context`](#context)
* `errors`: array of [`Error`](#error)
* `$defs`

## `Context`

* `name`
* `description`
* `aggregates`: array of [`Aggregate`](#aggregate)
* `subscriptions`: array of [`Subscription`](#subscription)
* `published`: array of objects
  * `aggregate`
  * `topic`
  * `includeState`
* `errors`: array of [`Error`](#error)

## `Error`

* `code`
* `status`
* `description`

## `Aggregate`

* `name`
* `description`
* `state`: object
  * `schema`
  * `fingerprint`
* `snapshot`: object
  * `enabled`
  * `stateRevision`: left out when absent or at its default
* `commands`: array of objects
  * `name`
  * `aliases`
  * `schema`
  * `creation`
  * `produces`
  * `routes`: array of [`Route`](#route)
  * `mounted`: left out when absent or at its default
  * `transformsTo`
  * `description`
* `events`: array of objects
  * `name`
  * `aliases`
  * `revision`
  * `schema`
  * `description`
* `lifecycle`
* `queries`: array of objects
  * `model`
  * `routes`: array of [`Route`](#route)
* `schedules`
* `ownership`: left out when absent or at its default
* `retired`: left out when absent or at its default

## `Route`

* `method`
* `path`

## `Subscription`

* `name`
* `kind`
* `source`: object
  * `context`
  * `aggregates`
  * `events`
  * `nullableState`: left out when absent or at its default
* `function`: object
  * `kind`
  * `context`
  * `processor`
  * `name`
* `derives`
* `rejected`
* `committed`
* `calls`
* `start`: left out when absent or at its default
* `schedules`
* `retry`: object; left out when absent or at its default
  * `maxAttempts`
  * `initialBackoff`
  * `maxBackoff`
  * `timeout`
  * `recoverable`
  * `unrecoverable`
* `job`: object; left out when absent or at its default
  * `name`
  * `cron`
  * `zone`
  * `scope`
  * `sharded`
  * `misfire`
