# `rules.json` Attributes

This page describes the JSON attributes for defining rule objects used in `template-to-app-rules.json` and `app-to-template-rules.json`. For background on how rules fit into the App Template Framework, see [Work with App Template Framework Rules](/docs/analytics/app-template-framework/guide/atf-rules-overview.md).

Rules files are made up of three sections: rules, constants, and macros.

## Rules

| Attribute     | Path              | Required | Description                                                                                                                                                                                                                                        |
| ------------- | ----------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `rules`       | *(top-level)*     | No       | An array of rules to define. Can be empty if no rules are needed.                                                                                                                                                                                  |
| `description` | `rules`           | No       | A description for the rule.                                                                                                                                                                                                                        |
| `name`        | `rules`           | Yes      | A unique name for a rule.                                                                                                                                                                                                                          |
| `condition`   | `rules`           | No       | If the condition is met, the rule runs. If the condition is not met, the rule does not run.                                                                                                                                                        |
| `appliesTo`   | `rules`           | Yes      | An array of assets the rule applies to, such as dashboards, recipes, schemas, and XMDs.                                                                                                                                                            |
| `name`        | `rules.appliesTo` | No       | The name of the asset. Can be `*` to apply the rule to all dashboards. Must match the `name` defined in the template-info for the asset. Best practice is to specify `name`. If null, defaults to `*` and the rule applies to all template assets. |
| `type`        | `rules.appliesTo` | No       | The type of asset: `dashboard`, `workflow`, `lens`, `schema`, or `xmd`. Best practice is to specify `type`. If null, defaults to `*` and the rule applies to all asset types.                                                                      |
| `actions`     | `rules`           | Yes      | An array of actions the rule invokes. One or more action are required.                                                                                                                                                                             |
| `action`      | `rules.actions`   | Yes      | The type of action to perform: `set`, `add`, `delete`, `put`, `eval`, or `replace`.                                                                                                                                                                |
| `description` | `rules.actions`   | No       | A description of the rule action, used for maintainability.                                                                                                                                                                                        |
| `path`        | `rules.actions`   | Yes      | The JSONPath to apply the action to.                                                                                                                                                                                                               |
| `value`       | `rules.actions`   | No       | The value to place at the JSONPath. Required for `set`, `add`, and `put` actions.                                                                                                                                                                  |
| `index`       | `rules.actions`   | No       | The index position for the action. Required for the `add` action only.                                                                                                                                                                             |
| `key`         | `rules.actions`   | No       | The key for the action. Required for the `put` action only.                                                                                                                                                                                        |
| `condition`   | `rules.actions`   | No       | If the condition is met, the action runs. If the condition is not met, the action is skipped. Use this field to apply a condition to a single action instead of the whole rule.                                                                    |

## Constants

| Attribute   | Path          | Required | Description                                                                   |
| ----------- | ------------- | -------- | ----------------------------------------------------------------------------- |
| `constants` | *(top-level)* | No       | An array of constants to define. Can be empty if no constants are needed.     |
| `name`      | `constants`   | Yes      | A unique name for a constant, used to reference the constant in other places. |
| `value`     | `constants`   | Yes      | The value of the constant.                                                    |

## Macros

| Attribute     | Path                 | Required                                                                                                                                                                                              | Description                                                                                                                                    |
| ------------- | -------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| `macros`      | *(top-level)*        | No                                                                                                                                                                                                    | An array of macro namespace objects. Can be empty if no macros are needed.                                                                     |
| `namespace`   | `macros`             | Yes                                                                                                                                                                                                   | A unique namespace that groups related macro definitions. Used with a macro's `name` to call it, for example `${widget_util:findWidget(...)}`. |
| `definitions` | `macros`             | Yes                                                                                                                                                                                                   | An array of macro definitions within the namespace.                                                                                            |
| `name`        | `macros.definitions` | Yes                                                                                                                                                                                                   | The name of the macro.                                                                                                                         |
| `description` | `macros.definitions` | No                                                                                                                                                                                                    | A string that describes what the macro does.                                                                                                   |
| `parameters`  | `macros.definitions` | Yes                                                                                                                                                                                                   | An array of zero or more parameter names that the macro expects. Reference a parameter's value with `${p.<parameterName>}`.                    |
| `actions`     | `macros.definitions` | An array of zero or more rule actions to perform as part of the macro, using the same action schema as `rules.actions` — see the Actions rows above. Omit if the macro only returns a computed value. |                                                                                                                                                |
| `returns`     | `macros.definitions` | No                                                                                                                                                                                                    | An expression or literal value to be returned from the macro. Omit if the macro only performs actions and doesn't return a value.              |

**See Also**

- [Work with App Template Framework Rules](/docs/analytics/app-template-framework/guide/atf-rules-overview.md)
- [Macros in Rules](/docs/analytics/app-template-framework/guide/atf-rules-macros.md)
- [`rules.json` Syntax](/docs/analytics/app-template-framework/guide/atf-rules-json-syntax.md)
