Unless otherwise specified you can always specify the message option to customize the message returned if the validator doesn't pass.
Just remember to not include the attribute name since it's automatically prepended to the error message.
The validation constraints can be declared in JSON and shared between clients and the server. One thing that is a bit unorthodox is that most validators will consider undefined values (,) valid values.
It is unit tested with 100% code coverage and can be considered fit for production.
This differs from example Ruby on Rails where validators instead have the option.
I find it quite common that you want to have constraints on an optional attribute.
The implementation is fairly basic and doesn't do anything clever with the messages.
It doesn't support things like only validating a sub key if the parent key is present so for more advanced validations multiple validation schemas are recommended. Most validators allow you to specify default messages in addition to default options, refer to the documentation for the individual validators for information on how to do this.
supports async validations through the returns a Promise that is resolved if the validation passes and is rejected if the validation failed, passing the errors as the first argument.