API
Tutorials
Resources
Policies
Modules
Plugins
Shop
Support
Home
API
Tutorials
Resources
Policies
Modules
Plugins
Shop
Support
Tutorials
Getting Started
Express Migration
Authentication
Caching
Cookies
Logging
Plugins
Routing
Server Methods
Serving Static Files
Testing
Validation
Views
Resources
Changelog
Module Status
List
Policies
Code of Conduct
Contributing
License
Commercial License
Security
Style Guide
Support
Modules
accept
Home
API
Changelog
address
Home
API
Changelog
ammo
Home
API
Changelog
b64
Home
API
Changelog
basic
Home
API
Changelog
beam
Home
Changelog
bell
Home
Providers
Examples
API
Changelog
boom
Home
API
Changelog
bossy
Home
API
Changelog
bounce
Home
API
Changelog
bourne
Home
API
Changelog
call
Home
API
Changelog
catbox
Home
API
Changelog
catbox-memcached
Home
API
Changelog
catbox-memory
Home
API
Changelog
catbox-object
Home
API
Changelog
catbox-redis
Home
API
Changelog
code
Home
API
Changelog
content
Home
API
Changelog
cookie
Home
API
Changelog
crumb
Home
API
Changelog
cryptiles
Home
API
Changelog
file
Home
Changelog
formula
Home
API
Changelog
glue
Home
API
Changelog
good
Home
API
Changelog
good-console
Home
API
Changelog
good-squeeze
Home
API
Changelog
h2o2
Home
API
Changelog
hawk
Home
API
Changelog
heavy
Home
Changelog
hoek
Home
API
Changelog
inert
Home
API
Changelog
iron
Home
API
Changelog
items
Home
API
Changelog
joi
Home
Schema Tester
API
Changelog
joi-date
Home
API
Changelog
jwt
Home
Changelog
lab
Home
API
Changelog
mimos
Home
API
Changelog
nes
Home
API
Changelog
nigel
Home
Changelog
oppsy
Home
API
Changelog
pez
Home
Changelog
pinpoint
Home
API
Changelog
podium
Home
API
Changelog
ratrace
Home
Changelog
rule-capitalize-modules
Home
API
Changelog
rule-for-loop
Home
API
Changelog
rule-scope-start
Home
API
Changelog
scooter
Home
API
Changelog
shot
Home
API
Changelog
sntp
Home
API
Changelog
somever
Home
Changelog
statehood
Home
Changelog
subtext
Home
API
Changelog
teamwork
Home
Changelog
topo
Home
API
Changelog
vise
Home
Changelog
vision
Home
API
Changelog
wreck
Home
API
Changelog
yar
Home
API
Changelog
joi
Installation
Status
Introduction
Example
Usage
Schema Tester
API
Changelog
Changelog
17.1.0
#2280
isError()
#2279
Remove annotate() from assert() when used in the browser
17.0.2
#2269
Ensure keys term always has right constructor
17.0.1
#2268
Move flag back to proto
17.0.0
additional information
breaking changes
#2263
Update deps
#2262
17.0.0 Release Notes
#2261
Remove ValidationError.annotate() from browser build
#2260
object.regex()
#2254
Giving an array argument to any.valid returns incorrect error
#2243
Allow `_` in alias, arg, flag, modifier, override, rule, and term names
#2242
Can you allow `_` in rule names?
#2231
Change errors.wrapArrays to errors.wrap.array
#2219
Add the ability to extend all types in place
#2200
Move ip and uri logic to address
#2199
Remove node 8, 10
#2189
Change default function second argument to full helpers (from prefs)
#2182
Remove quotation marks from error messages
#2163
string().hostiname() - validation of non-ASCII chars containing domains
Show More
16.1.8
#2226
object.with and object.without throw error on $ prefixed keys
#2218
Maximum call stack size exceeded error for dataUri validation
#2212
Joi.string().email() considers "a@a.com/asd" as valid email
#2208
fix: describe() on schema with default value null
#2207
describe() on schema with default value null results in "Cannot read property 'Symbol(literal)' of null"
#2205
Cannot require a minimal number of matching object properties with `pattern`
#2190
Joi.string().domain() treats an email address as a valid domain name
#2187
Giving an array argument to any.allow(...values) gives incorrect error
#2181
Joi.alternatives produces confusing message when used with nested object and `{ abortEarly: false }`
#2176
joi.types() is missing `func` alias
#2173
[Request] Allow mixing patch version
Show More
16.1.7
#2168
Date fails to enforce format when value is a number string
16.1.6
#2167
Error.captureStackTrace can't be used in all browser builds
#2165
Cannot read property 'delete' of undefined
16.1.5
#2156
node.get is not a function when validating
#2147
Joi v16: TypeError issue with valid(Joi.ref(x)).error()
16.1.4
#2134
Joi.any().default(<object>).describe() throws validation errors
16.1.3
#2131
TypeError: false.byteLength is not a function
16.1.2
#2128
when() fails when combined with prefs()
16.1.1
#2119
Use ^version
16.1.0
#2118
array.items() fails to invalidate when custom item error is used
#2116
Support `.when({ is, then })` without subject ref
16.0.1
#2113
Valid emails are considered invalid
#2111
Joi.only is not a function
16.0.0
additional information
breaking changes
#2103
Support errors in manifest
#2102
Always convert -0 to 0
#2101
Apply link.concat() on resolved schema
#2099
Add when() break
#2097
Number validation fails with "1E3"
#2096
Apply link whens on linked schema, not the link
#2093
Manifest type conflicts with key type
#2092
Support Joi.in() for object keys
#2091
"-0" throw number.unsafe
#2089
Joi.in()
#2088
Always perform deep equal on valid() and invalid()
#2087
Fix comparison of array values (literals and references)
#2086
Preference to change label to path edge instead of full path
#2085
Default assert() to include stack
#2084
Shared schemas in links
#2083
Add a browser build to the github repo and npm package
#2082
Fix error thrown in the browser build. Closes #2081
#2081
The browser build (produced by webpack) throws an error when loading
#2080
Named schema links
#2079
Support `no` in when()
#2078
Default `is` to Joi.invalid(null, false, 0, '').required()
#2077
Compile valid values into valid+override
#2076
Allow/disallow list override
#2075
Log when() partials
#2074
Compile function into Joi.custom()
#2073
When object.pattern() matches option is not an array(), apply to each item
#2072
Custom function error shortcut
#2068
schema.describe() does not work, when default value is assigned to array in schema
#2065
Change alternatives to be consistent with other spread arguments
#2064
Throw on invalid schema during validation
#2062
Support chained when()
#2061
Keep switch as single condition on when() and conditional()
#2060
object.assert() ref should be relative to parent, not self
#2059
Support multiple usage of same schema with id
#2056
Schema test coverage
#2054
Rename alternatives.when() to alternatives.conditional()
#2051
Support for combine schema: allOf, oneOf, anyOf
#2049
Compile literals into any type with exact literal
#2048
Replace marker with Symbol.for()
#2046
Cast multi values of into a single type with valid()
#2041
Exclude error stack trace by default
#2040
Replace boolean.insensitive() with sensitive() and not apply to allow()
#2039
Allow mapping flags to rule methods with a different name
#2038
Stop matching object patterns once a match is found
#2037
v16.0.0 Release Notes
#2036
{ result, error } changed to error undefined instead of null
#2035
Skip error rendering preference
#2034
Consolidate date format errors
#2033
msg() template function to access other messages
#2032
Support custom sync functions for rules
#2031
Remove object and array string coerce
#2030
string.isoDate() fails on allow() and convert:false
#2027
Support templates as object.assert() subject
#2026
Change object.assert error context and rule argument name
#2024
Remove binary and string encoding support from the browser
#2023
Rule arguments validation
#2022
Support reverse order coerce
#2019
Consolidate refs with args
#2018
Support joi schema in refs assert
#2016
Consolidate refs assert's message/code
#2015
Ensure all levels of coerce are only called on non-undefined values
#2014
Change all _methods used on schema to use definition
#2013
Expose all internal extend() options externally
#2012
Rename func to function
#2010
New extension API
#2009
Global defaults
#2007
Change Infinity errors from any.invalid to number.infinity
#2006
Change error code any.empty to string.empty
#2005
Merging of two empty() should allow '' if it was explicitly defined
#2002
Remove prefs schema validation
#2001
Remove joi.defaults()
#1999
Fix outdated use of Joi.func().ref()
#1998
Split validate() to sync and async versions
#1995
Replace strip flag with result flag
#1994
Joi.string().uri() accepts 'http:/' as valid URL
#1993
Root reference
#1987
Extension build() support
#1986
Improve schema description validation
#1985
Refactor root
#1983
Change any.notes() to any.note() and require separate arguments
#1982
Change any.tags() to any.tag() and require separate arguments
#1981
Change any.example() to append by default
#1980
Rename string.regex() to string.pattern()
#1979
Link to root (regardless of depth)
#1978
Change only() to flag instead of alias of valid()
#1977
Replace date multiple and timestamp flag with format
#1976
Rename object.allowUnknown error to object.unknown
#1975
Remove description for `default()` function
#1974
Deep clone all values returned in describe()
#1973
Behavior of .concat() with tests redefinition
#1972
Applying `raw` after successful validation
#1968
Repalce lazy with link
#1965
How to properly detect domains?
#1962
Don't require pre function to take 3 arguments
#1961
Lazy once ignored when using with when()
#1960
Fix object peer dependencies error path
#1959
Debug tools
#1958
Warnings
#1957
Feature: Marking options as deprecated
#1956
Extension messages override base
Show More
15.1.1
#2047
Replace marker with Symbol.for()
15.1.0
#1926
Add legacy API
15.0.3
#1808
bool() cannot be binded
15.0.2
#1801
remove strip from defaults now that it has been removed
15.0.1
breaking changes
#1761
Validate object keys related to another value
#1753
Override extension language
#1750
Pass options to pattern validation to support refs
#1748
.pattern doesn't respect .valid when using .ref
#1747
Extension which has a return value in setup() does not call validate()
#1714
Undocumented strip option on Joi.validate
#1704
Resolved issue of maximum call stack exceeded
#1700
base64 validation returns RangeError
15.0.0
additional information
breaking changes
#1776
Replace isemail with @hapi/address
#1768
Fix dependency
14.5.0
#1928
Add legacy API
14.4.0
#1766
Change module namespace
14.3.1
#1691
joi.bind yields any() methods not fully bound
14.3.0
#1665
path-related methods (`with(), `nand()`...) broken when applied on `func()`
#1631
Destructuring Throws Fatal
14.2.0
#1659
Add array().assertItem(). Closes #1656
#1656
Complex array validation requirements
#1608
Custom message overload another one
#1528
joi errors not overriding for nested objects
#1219
In case custom error messages are passed to Joi.any.error, joi.validate returning parent object error even if child validation fails.
14.1.1
#1658
Extensions remove language of previous extension with the same base
14.1.0
#1654
Bump to lab@18. Fixes #1653.
#1647
Add object().oxor(). Closes #1628
#1628
xor but none required
14.0.6
#1607
invalid mime types on data uri
14.0.5
#1638
fix condition, add tests for safe numbers
#1637
Using Number.MAX_SAFE_INTEGER throw error that number unsafe.
14.0.4
#1634
Remove engines
14.0.2
#1622
Maximum call stack size exceeded error from Joi.defaults with Joi.empty flags
14.0.1
#1617
object().with using nested paths validates when it shouldn't in Joi 14
14.0.0
additional information
breaking changes
#1615
14.0.0 Release Notes
#1614
Default stripUnknown = true to only strip object keys, not arrays
#1595
Overriding array.min() when using reach
#1568
Trying to get multiple custom error messages in details array with {abortEarly: false}
#1555
Chaining multiple examples does not overwrite the old examples
#1554
#1477 Add Support for nested path with Joi.object().or(), .nand(), .and(), .with(), .without(), .xor()
#1544
Error at integer validation
#1504
Max safe integers
#1478
.example SHOULD perform validation on the provided value
#1477
Joi.object().or() does not support nested paths
#1429
Joi.string().regex() with support for all modifiers
#1364
Need to override twice the key name for error messages
#1258
Feature Request: lazy once
#1247
Year-only iso date string is parsed incorrectly
#1191
Chaining string.insensitive() will not convert values with lowercase/uppercase modifiers
#1127
Make certain rules override themselves
#1113
Number validation on '0x1' reports no error with a value of 0.
Show More
13.7.0
#1562
Add symbol() type
#1420
Add Symbol() support
13.6.0
#1558
Add value to number.base errors
13.5.0
#1532
Add enabled flag to string.trim()
#1525
Add boolean flag to Joi.string().trim()
#1511
Add optional "config" param to array.unique for ignoreUndefined. Closes #1498
#1510
Data uri validation
#1498
Validating unique optional fields in array elements.
#1487
Allow square braces in URL validation
#1461
URI validator rejects query param square brackets
#999
Where is the documentation for `this.createError()`?
13.4.0
#1521
Extended object does not parse JSON
#1515
Joi.reach() can no longer handles empty string path
#1514
remove indirect require reference to index.js
#1513
require('../') statement in schemas.js causing bundler issues.
#1500
add date greater less rules
#1499
Allow object keys to be verified by schema
#1382
Add a key validator with Joi objects
#1000
Correct way to write an "identity" extension?
13.3.0
#1479
Is it possible to capture the value of field being validated in custom error messages using the options - language
#1438
Use Set() for handling of unprocessed keys
#1422
Add byteAligned option to hex string
#1415
Use Set() for internal Set backend
13.2.0
#1476
Cannot validate an array with 'constructor' as unique entry
#1452
Add new validation number().port()
#1448
Include describe() documentation in API. Fixes #1447
#1435
Add an object.append() method. Fixes #1381.
#1433
Changed a separator for path parameter to pre-split array approach for Joi.reach
#1423
Avoid redundant copies of settings
#1414
Fix cloned valid() / invalid() object values
#1383
Add an separator parameter to Joi.reach
#1381
Add an object.append() method
#1346
Validate port numbers
13.1.2
#1392
undefined in the array with label returns wrong missing value message
13.1.1
#1395
Asserts that two arguments are provided to object.with() and object.without()
13.1.0
#1386
Fix object pattern in combination with empty
13.0.2
#1354
Remove validation from .example
#1350
joi.ref doesn't work properly with max() function for dependant dates
#1189
Should .example perform validation on the provided value?
13.0.1
#1334
Impossible to disable language.key in options
13.0.0
additional information
breaking changes
#1328
13.0.0 Release Notes
#1327
Bump joi to node 8+
12.1.0
breaking changes
#1757
Commercial version of v12 branch
12.0.0
additional information
breaking changes
#1326
12.0.0 Release Notes
#921
$-sign in object keys are escaped in the ValidationError message
11.4.0
#1325
Allow `alternatives.when` to "peek" inside the current value
11.3.4
#1230
Missing `language` entry in `joi.extend` causes obscure runtime error
11.3.1
#1311
import { any } does not work on v11
11.3.0
#1240
Fixes [#1239]
#1239
Rename multiple keys to another name
11.2.0
#1308
Add Joi.func().class()
11.1.1
#1316
Remove items module dependency
11.1.0
#1315
Add promise-like API to validate. Fixes #1314.
#1314
Support promises on `validate()`
#1291
Add string.normalize for unicode normalization
#1289
Feature request: Unicode normalization
11.0.3
#1266
remove empty flag if only reset is used
#1249
describe doesn't work for empty() breaking lout
11.0.2
#1303
empty string is wrongly accepted as a timestamp
11.0.0
additional information
breaking changes
#1302
11.0.0 Release Notes
#1283
Error: Item cannot come after itself
#1282
There is a bug in 10.6.0 API Reference.
#1278
Joi.defaults(): Cannot default object type
#1256
Add `Joi.defaults()`
#1254
ipv6 with cidr greater than 32
#1235
Fix Value Range for IPv6 CIDRs
#1232
ipv6 string with mask between 33 and 128 are rejected.
#1229
Update isemail from 2.x.x to 3.x.x
#1197
Allow passing an option to string().isoDate()
#1196
string isoDate should allow the string to be converted to same format as date iso schema
#1167
Errors: context.key is actually the label, not the key
#1126
Passes the "default" function to the schema description
#1121
[Request] Add detail to .describe for function defaults
#931
Email validation doesn't allow emails which are compliant with RFC 6530
Show More
10.6.0
#1215
#1201 - setup can return joi object to replace origin schema
#1211
Performance Improvements for string().guid()
#1206
Added the ability to use a reference for Array min/max/length
#1201
Question: how to extend joi to add some key by rule?
#1174
Fix #1156 - Adds support for optional base64 padding validation.
#1156
base64 validation too strict; padding is optional
#1017
Array length cannot reference to another field
10.5.2
#1199
Make isemail an optional dependency
10.5.1
#1203
Nested child/uncle condition causes annotate() to throw
10.5.0
#1183
add forbiddenKeys method to object
10.4.2
#1161
Alternatives respect subsequent "when"s if first has only "otherwise"
#1151
Alternatives based on a type with only otherwise take precedence over any following one
#1146
Keep converted values even when stripped for reference uses
#1132
Add "options" to describe output
#1130
Joi.any().options() should be reported in .describe()
10.4.1
#1119
alternatives doesn't work with error
#844
Label in object.and()
10.4.0
#1131
Add basic error overriding
10.3.4
#1143
number().integer() can fail for values outside MAX_SAFE_INTEGER
10.3.3
#1145
Don't try to touch custom error messages with attempt message
10.3.2
#1144
Possible bug in custom Error message
10.3.1
#1097
Fix #964 Joi wrong value parsing
#964
Joi wrong value parsing
10.3.0
#1128
Avoid unnecessary clones
#1067
"Describe" behavior changes for "implicit" Any with extended Joi
#1047
Creating multiple extensions for the same base type
#983
Unexpected interaction between Joi.object().unknown() and stripUnknown
#831
Joi valid fails, when ref is used with a stripped key.
10.2.2
#1103
allow param defaults to be set by the param validations
10.2.1
#1095
noDefaults behaviour with any.empty()
10.2.0
#1076
Added support for ISO_8601 expansion (+/-YYYYYY)
10.1.0
#1075
Allow shorthand accessor string in array().unique()
#1073
Provide value which duplicates an item in array().unique()
#1072
Path of array().unique() is wrong
10.0.6
breaking changes
#1065
Fix boolean strings parsing
10.0.3
#1054
adding validation for unnecessary arguments in primary types.
#1009
Request: Warn when functions are passed unexpected arguments
10.0.2
#1052
[Request] truthy/falsy case insensitive
10.0.1
#1039
trim + empty confuses me
10.0.0
additional information
breaking changes
#1037
10.0.0 Release Notes
#1035
Implement String.regex "invalidate" configuration
#1034
added support for string.uri relativeOnly option
#1032
Clean up any.valid code
#1030
Conditional validation of object properties with different parent key
#1028
Extend describe() for type
#1027
Extending describe() to include renames in metadata
#1026
object renames do not appear in describe api.
#1020
Joi.string().invalid (not, disallow) doesn't support regex?
#1016
Added a string.base64() method.
#1015
Suggestion: Joi.string().uri({ allowRelativeOnly })
#1010
Update Joi.validate options with removal of error
#998
Add support for truthy/falsy boolean values
#985
Move time rules to an extension
Show More
9.2.0
#1008
Bugfix/error annotate
9.1.1
#1002
Ref will not be converted if it is inside array passed to default
9.1.0
#989
Adds UUID Support
9.0.4
#947
.without(), runs before .empty()
9.0.3
#945
required() does not catch specific empty values
9.0.2
#960
Coercion doesn't run early enough
9.0.1
#949
Returning credit card number when is valid, fixes #948
#948
Credit Card returning null when valid
9.0.0
additional information
breaking changes
#934
Fix missing top-level methods
#933
Extended Joi does not contain certain top-level functions
#929
labels don't always get included in error messages with Joi.extend()
#928
Different error message for date().format()
#927
Check error messages in tests
#920
9.0.0 Release Notes
#918
number.multiple() enhancement - Issue #916
#916
number.multiple() throws exception for non-integer and ref values
#899
Treat empty string as null
#894
Add Joi.object().schema()
#893
Fix item ref. Closes #892
#892
References in array items() do not work
#880
Add synchronous extensibility
#874
any.label() significantly slows validation of large arrays
#860
Add the ability to specify a comparator for `array.unique()` for objects only
#859
custom compare for Joi.array().unique()
#856
Allow 1 to be true and 0 to be false.
#577
RFC: Joi plugins/extensions/custom functions
Show More
8.4.2
#919
joi.date().timestamp() failing validation for millisecond value
8.4.1
#909
Using empty in items on sparse array allows undefined elements.
8.4.0
#884
Synchronous schema.validate fails if called with options
8.3.0
#904
Add stripUnknownKeys option to Joi.validate
#903
stripUnknown: What is the expected behavior when validating nested data? (array)
8.2.0
#833
Proposal: string().truncate()
#379
Recursive schema (tree-like) validation
8.1.1
#900
When using reach, changing the label doesn't get applied, when an existing label is there
8.1.0
#883
Support error override per rule. Closes #882
#882
Support error override per rule
8.0.5
#851
Joi 8.x breaks describe().meta in alternatives
8.0.4
#837
Fix RegEx translation of IP6 BNF, where [] denotes an option
8.0.3
#834
TypeError: cannot delete property '0' of [object String]
8.0.2
#830
Return any.empty error for trimmed whitespace (fixes #827)
#828
Example for Array Schema Not Possible
#827
Unexpected Errors with Strings
8.0.1
#824
Description of assert modifying the original value
8.0.0
additional information
breaking changes
#823
8.0.0 Release Notes
#822
Problem with multiple when and conditional forbidden field
#763
Multiple alternatives with default
#735
Print string versions of NaN, Infinity and -Infinity - resolves #696
#696
NaN printed in cosole as null
#592
Some refs not converted in .describe()
7.3.0
#815
uri() fails RFC3986 4.2 relative reference URIs
#807
Question: Validate against sub-schema?
#565
Combine uppercase with valid
7.2.3
#812
Improve error message
7.2.2
#803
Label declaration/Validation
7.2.1
#800
Generate versioned API Reference link in README
7.2.0
#791
Date enhancements and support for Unix Timestamps
#789
Date() does not validate Unix timestamp with fractional seconds (decimals)
#787
Add a arity predicate for functions
7.1.0
#779
Throw custom Joi Errors
7.0.1
#774
Fix any.default() returns default object reference
#773
`Joi.validate()` returns default object reference instead of clone
7.0.0
additional information
breaking changes
#759
7.0.0 Release Notes
#756
es6. Closes #754. Closes 755
#755
Don't annotate non-object values
#754
ES6 style changes and node v4
6.10.1
#777
Fix any.default() returns default object reference
6.10.0
#753
Add default status 400 to error thrown by Joi.assert()
#747
removes leading "." from path at root object level
#740
Exception throw on undefined object key makes it difficult to track down issue
6.9.1
#745
Describe ordered arrays
#737
makes allow/valid/invalid not accept undefined #734
#734
Joi shouldn't allow Joi.any().valid(undefined).required()
6.9.0
#688
Toggable ordered flag for array to match items against input in order
#659
Allow treating arrays as objects
6.8.1
#730
Fix function properties validation. Closes #729
#729
Function keys validation converts function to object
6.8.0
#728
Allow functions to act as objects. Closes #727
#727
Allow function types to behave as object (e.g. have keys)
6.7.1
#721
The index of an incorrect array entry is returned instead of the field name
6.7.0
#710
Extending a schema
#708
add attempt function
#703
No dependency validation when object stripUnknown set to true
#702
add hapi to package.json keywords so joi is searchable
6.6.1
#693
Use hasOwnProperty from native object
6.6.0
#690
removes trailing "." from or path
#684
fix unknown nested key path
#683
Add the "noDefaults" option
#682
Validate without applying default values
6.5.0
#668
allow passing an error object as message to assert
#656
Updated regexp for more robust ISO 8601 validation
#649
Implementation of white space normalisation.
#648
Allow normalisation of white space
#586
[request] string().replace(pattern)
6.4.3
#660
stripUnkown on arrays removes valid objects when multiple items are defined
6.4.2
#654
Fix allowing context refs on some string, number and date methods
6.4.0
#629
help with `.or()`
6.3.0
#632
Nested whens don't work
6.2.0
#413
Create default [highly nested] object easily?
6.1.2
#628
Alternatives throw typeError when "is: null" is used
6.1.1
#627
Property is always required even when my When() condition isn't met.
6.1.0
#619
Add IP Address Validation and Separate IP and URI Logic to Files
#616
Add ignoreUndefined flag for rename()
#614
Error when .rename() from undefined
#611
Number compare functions allow decimal numbers
#610
Support for decimal numbers for min, max, less, greater number methods
#609
number min/max/greater/less do not allow decimal values
#597
Add reference support for String.min/max/length
#596
Add reference support for Number.min/max/greater/less
#583
do ref-able operations support referring to a list?
#560
References for Number comparisons?
#380
Comparison between fields
Show More
6.0.7
#580
Annotate fails on circular objects
6.0.6
#602
Validate multiple options with presence key in it
#601
Error: stripUnknown should be one of required, optional, forbidden, ignore
6.0.5
#600
Fix regression on unsafe string escaping in language
6.0.4
#593
.rename() does not work when new value is undefined
6.0.3
#589
Joi.array().items(...) error message changes
6.0.1
#585
No conversion is done inside Joi.array().items
6.0.0
additional information
breaking changes
#579
6.0.0 Release Notes
#578
respect stripUnknown in arrays
#572
add any.strip for objects and arrays
#569
Lost key after validation on assert
#567
Object with 'or', keys contains an array with a 'null' element
#561
how to concat array of objects inside an object property
#559
deprecate array.includes and array.excludes, use array.items and allow required and forbidden within
#557
Incomplete validation message
#555
add some additional guards and tests for #363
#553
Does array include allow nested object properties
#547
string hex characters only
#546
Really custom messages are impossible
#545
allow passing a method to .default(), for #363
#538
added number.multiple()
#536
Consider renaming 'valid' to 'enum' or an alias
#534
Bad behavior of Joi.object().concat()
#532
multipleOf method for Number?
#511
throw when invalid options are provided
#495
joi.array().includes path and errors mismatch
#488
Allow options to be passed to string.email().
#484
Helpful regexp message
#457
Add URI Validation
#363
support factory-function in .default() ?
Show More
5.1.0
#525
Strange behaviour with date + raw
#513
Make alternatives.describe more consistent
#510
Add new requiredKeys option specifically for object keys
#509
Option to validate a date format but not convert to a date object
#477
Support for references in `date.min()` and `date.max()`?
#404
Possible referencing date field to other date field?
5.0.2
#505
Convert date regex to date before comparison. Closes #503.
#503
Joi.date().iso() throws error when required() is used.
5.0.1
#502
Joi.array() modifies original array
5.0.0
additional information
breaking changes
#501
5.0.0 Release Notes
#498
array().single()
#497
array.unique doesn't validate duplicate dates
#494
Joi.number allows Infinity
#489
add missing semicolon
#486
array().includes() should not allow undefined
#485
Round number.precision if options.convert
#462
Return context with errors.
#381
Transformation support
4.9.0
#487
Code assertions requires () for exist tests
#481
Validate object constructor.
#408
Check if value is a RegEx
4.8.1
#480
Date "now" refers to date when schema was compiled
4.8.0
#478
Retain object reference when no rules specified
#476
Upgrade Lab
#470
Address internationalization issues.
#469
change implementation of creditcard to use string
#466
Named string regex patterns.
#465
implements credit card validation
#464
implements nand
#461
Add greater() and less() to number type. Closes #411
#456
correction for Describe with a "0" argument
#454
Describe with a "0" argument
#449
Enable to pass "now" in date.min and date.max
#446
Use Object.create in Any.clone to improve IE9 support
#440
Added any.label method
#435
Add format and iso to date type
#422
Credit card validation
#411
Number min/max exclusive or closed ranges respectively?
#407
ensure date does not occur in the past
#396
Negative-Integer-Strings are not properly converted to Date instances
#362
Support NAND
Show More
4.7.0
#437
Support optional message prefix in assert()
#434
Fix typo.
#433
Override default presence
#432
Set different default presence mode (required, forbidden)
#427
Added ability to validate the number of decimal places
#403
Add duplicates validation to array
#398
Upgrade lab 4.0
#397
Added check for global flag in pattern.
#389
Default Assert Message
#385
Path for array includes to contain key
#383
Describe object.pattern
Show More
4.6.2
#378
Removed unused sys import.
4.6.1
#366
Bug Hunt: empty object() + pattern() + unknown(false) fails to error
#359
Allow empty string after trim
#357
Cast milisecond strings to a date object
#355
Don't rename when there is nothing to rename.
#299
Sanitizing blanks
4.6.0
#360
Joi.assert()
#354
isemail 1.0
4.5.0
#351
Add Hoek isImmutable flag
4.4.0
#349
Support {{!key}} notation to securely encode unsafe values
#335
Recognize Joi errors
4.3.0
breaking changes
#341
Array includes fails if called multiple times
#340
Replace internal implementation of required/optional/forbidden
#339
when() option 'is' cannot be falsey
#337
alternatives().when() behaves inconsistently with any().when()
#336
concat() fails to remove valid/invalid values
#334
Bug hunt: Joi.any().when is not evaluated it its value is empty even if the when condition is fulfilled.
#332
Joi.any().when is not evaluated if empty
#326
Bug Hunt: unable to rename keys that are empty strings
#325
Bug Hunt: empty string key causes incorrect validation
#321
add uppercase, lowercase, and trim for strings
#317
Bug Hunt: invalid Date objects do not cause failure.
#313
Recursively describes the includes of array schemas #312
#312
Describe should also compile and describe array's rules
#311
Feature/meta
#310
Bug Hunt: email addresses longer than 254 should not be valid
#309
Bug Hunt: email addresses with a "local part" > 64 characters should not be validated
#293
Verify encoding type is string
#292
Add test to check for valid encoding param to binary
#288
Bug Hunt: valid IPv6 domain literals in email addresses fail validation
#282
Bug Hunt: double-quoted local-parts of email addresses cause validation failure
#261
Object key rules by patterns
#241
Thoughts on something like any.meta(obj)?
#220
string().lowercase() and string().uppsercase()
Show More
4.2.1
#330
Cannot override context
#329
Joi.forbidden() fails when added to an existing type
4.2.0
#328
Support references to external context
#324
Test for retaining ignored values
#323
Joi.forbidden()
#322
Make callback optional argument
#318
Convert tests to actual async style
4.1.0
#296
Allow valid to take buffer values
#291
remove extra var internals. Closes #290
#290
extra var internals in binary.js
#287
object.unknown()
#285
Fix to make object.and all-or-nothing - fixes #284
#284
Bug Hunt: object.and is supposed to be all-or-nothing
4.0.0
breaking changes
#278
Cleanup language file
#277
date() allows boolean value
#276
binary().encoding()
#275
Support when() on any()
#274
Undo #273, remove options from schema.validate()
#273
Remove module generic validate() and describe()
#272
Undo 268
#271
schema concat()
#270
Alt fails to report references
#269
Rename alternatives.attempt() with try()
#268
Move interfaces from func at root to const
#267
Add alternatives.attempt() to allow adding more schemas
#266
Make [] and alternatives() behave exactly the same
#265
object.and()
#264
Support references in default()
#263
object.assert()
#262
object.keys() append behavior
#260
Allow referencing the value of other keys in conditions
#259
Error messages should not include <root>
#258
Array should only convert string arrays
#257
Move dependencies (with,without, or, xor) to object level
#256
Keep input const and return modified value via validate callback
#255
Remove modify option
#254
4.0.0
#253
Validate callback, rename move to object
#252
Move rename() to object()
#250
Change validate() to return value via callback
#249
Alternatives bug fixes
#248
Move object() constructor args to keys() method
#247
unit() documentation method
#246
rename() applied incorrectly
#245
alternatives() fails to apply conversion when lower priority match has valid()
#244
alternatives() fails to apply conversion of matching schema
#243
alternatives() incorrectly allows null when no valids present
#239
Error inheritance is troublesome
#238
match() -> test()
#237
Support literal values as valid() condition
#234
testling support
#233
Add testling-ci badges
#226
Add support for binary type
#217
Incorrect ValidationError.annotated() output with abortEarly
#214
example() documentation method
#210
Add hostname matching to Joi.String
#206
Find full path to nested errors
#202
array() should set a specific detail.path
#196
Precompile schema
#194
Conditional rule based on value of another key
#192
64-bit limits in min()/max()/integer()
#191
Added support for buffer length
Show More
3.4.1
#345
Describe references as such
#343
Ref and Alternatives.when don't handle empty string keys
3.0.0
breaking changes
#231
Remove language file support
#230
3.0.0
#229
Bring coverage back to 100% after lab logical statement support
#228
hoek 2.0
#227
number allows string even with strict()
#224
Immutable schema objects. Closes #221
#221
Change object to immutable
#216
Change locale support to something that works with browserify.
2.9.0
#215
Enable all any() methods on array()
#201
Allows using any.rename() and any.default() together
2.8.0
#198
Allow language override directly via options
#197
Support for union types in schemas.
#195
Bring coverage back to 100% after lab fix
#187
Polluted request.payload by adding undefined field
#184
Throws error when field is missing and abortEarly=false
#183
set defaults #181
#181
setting defaults
#180
#179; add failing test for renames nested within array
#178
Embedded validators in Array().includes don't work
#177
Modify does not change internal values in array
#176
closes #175. missing required keys no longer throws.
#166
Required based on value on other key
#142
alternatives()
Show More
2.0.0
breaking changes
#232
2.0.0
#133
Array.includes() does not support more than 1 type
#128
with constraint doesn't seem to be respected
#126
Validate date supporting arbitrary format
#124
Array doesn't validate correctly if includes() uses valid()
#122
Update error messages to not have encoded characters
#121
Array is accepted as an Object type
#112
Remove Number.float()
#88
.valid() and .invalid() need a case-insensitive mode
0.4.0
#110
Adding support for special Any type
#107
.with and .without accept an array of args as well
#106
Add Type.Any
#105
Consistent usage of Array.isArray()
#95
Custom Error Messages
0.0.6
#25
Rewrite Readme.md
#23
Add validation tests for every type's methods with complex combinations
#20
String().valid doesn't invalidate bad values
#19
StringType.min(3) doesn't validate undefined correctly
#18
Adding tests to joi