# Conditions

Ask only what matters to each person. A condition shows a question when an earlier answer calls for it, so simple requests
stay short.

## Add a condition

Add one on a field in the **Builder**, or save reusable ones under **Conditions**. Combine rules with all, any, and not.

For example, show **Budget** only when **Service** is **Full project**. See the [quote request recipe](/guides/recipe-quote-request/).

## What a condition can do

- **Show or hide a field.** A section can depend on an answer too, under **Flow**. See [Steps and sections](/guides/multi-step-forms/).
- **Apply a check,** so **Company name** is required only when **Project type** is **Commercial**. See [Validation](/guides/validation/).
- **Choose who gets the email,** on the **Delivery** tab. See [Routing rules](/guides/delivery-rules/).

The server applies the same conditions, so answers to hidden fields are dropped, are never required, and aren't stored or
delivered.

## Going further

### Conditions as JSON

Form definitions hold these as `visibilityRules`, which are public, so your own UI can use them too. For every operator, see
[Conditions in the form definition](/guides/form-reference/#conditions).

```json
{
  "fields": {
    "contact": {
      "type": "object",
      "fields": {
        "preferredMethod": { "type": "select", "allowedValues": ["email", "phone"] },
        "phone": { "type": "phone" }
      }
    }
  },
  "visibilityRules": [
    {
      "id": "show-phone-when-preferred",
      "path": "contact.phone",
      "default": "hidden",
      "when": {
        "path": "contact.preferredMethod",
        "operator": "equals",
        "value": "phone"
      },
      "state": "visible"
    }
  ]
}
```

Your own UI uses these rules to show or hide fields. The server also evaluates them, whatever your UI does.
