# Declaring Constraints

You can define constraints in several locations:

1. [Configuration file](https://coldbox-validation.ortusbooks.com/v1.x/overview/declaring-constraints/configuration-file)
2. [Inside domain object](https://coldbox-validation.ortusbooks.com/v1.x/overview/declaring-constraints/domain-object)
3. [A-la-carte](https://coldbox-validation.ortusbooks.com/v1.x/overview/declaring-constraints/a-la-carte-via-event-handlers)

When validating using  `validate(), validateOrFail()` you have to specify a **target**, but specifying a **constraint** in your call is optional.

## Constraints Discovery

When you call the validation methods with NO `constraints` passed explicitly, then the validation module will following this lookup procedure:

* Lookup your constraints in `myTarget.constraints` struct in your target object or struct.
* If you specify your constraint parameter as a string, the validator will lookup a shared constraint in your configuration file.
* If you specify your constraint parameter as a struct, this struct will directly server as your set of constraints, so you can specify your constraints on the fly,  or specify an alternative set of constraints in your model, e.g `User.constraints` vs `User.signInConstraints`
