API
Resources
Policies
Modules
Sandbox
Home
API
Resources
Policies
Modules
Resources
Changelog
Module Status
Policies
Code of Conduct
Contributing
License
Security
Style Guide
Modules
address
Home
API
Changelog
formula
Home
API
Changelog
joi-date
Home
API
Changelog
pinpoint
Home
API
Changelog
Resources
Changelog
Module Status
Changelog
17.9.1
#2932
fix: do not trigger warnings and externals on arrays and alternatives mismatches
17.9.0
#2931
feat: improve external helpers
17.8.4
#2928
fix: validation warning types
#2927
Type definition incorrect for "warning" return type from validateAsync
17.8.3
#2919
chore: revert 17.8.x line
#2917
Cannot find module '@hapi/hoek/assert' from 'index.js'
#2914
Support for older Node versions maybe lost in v17.8
#2913
node_modules/@hapi/hoek/lib/deepEqual.js:274
17.8.2
#2916
fix: properly transform domain
#2915
Email validation error in v17.8.1
17.8.1
#2910
fix: transpile optional chaining
17.8.0
#2909
chore: use latest address module
#2630
Joi.string().domain() treats '_http._tcp.archive.ubuntu.com' as invalid domain name, even though it works
17.7.1
#2905
Upgrade `@sideway/formula` to `3.0.1` for `CVE-2023-25166`
#2892
Allow null values in BooleanSchema methods
17.7.0
#2867
fix: better unsafe check of exponential numbers
#2762
Add isPresent option to object dependencies
#2672
Some exponential notation strings are validated as unsafe numbers
#2542
Number validation fails on some strings with E-notation
17.6.4
#2859
Fix/throwing errors if required argument is omitted
#2729
Some validation methods don't throw an error when their required argument is omitted
17.6.3
#2860
fix: allow all schema types to be defined and inferred
#2857
Typing issues with `attempt()`
#2753
Typescript typing on `Joi.string().validate(...)`
17.6.2
#2851
Try improving handling of unions
#2850
fix: do not confuse booleans for alernatives in strict mode
#2848
Strict object schema with a boolean property expects alternative, not boolean
17.6.1
#2844
types: support strict alternatives
#2843
chore: update license
#2842
Fix spelling
#2841
Allow sub-objects for TypeScript strict object schema
#2838
feat: change validateAsync return type to match options
#2836
fix(d.ts): allow nested object schema for strictly typed object
#2829
fix(d.ts)!: type details param of ValidationError constructor
#2819
Add artifact to typings.
#2818
Typescript support for .artifact()
#2813
Fix Joi issue #2746
#2808
feat(d.ts): Add type information for `maxDomainSegments` to `EmailOptions` and `DomainOptions` interfaces
#2797
feat(d.ts): improve attempt return type
#2788
Include local into `ErrorReport` type
#2785
fix(typings): incompatible type issue for nested strict object schemas
#2764
Incompatible type expected for object schemas nested in strict object schemas
#2749
fixed typo
#2746
Using `Joi.attempt` with `{ convert: false }` does not prevent conversion.
#2727
Fix validateAsync return type
#2663
Property "local" does not exist on type "ErrorReport"
Show More
17.6.0
#2732
Support length() in templates
17.5.0
#2708
How can I define both specific error messages and a default error message?
#2706
Error messages do not distinguish between numbers and strings!Easily misleading
#2703
issue #2606: pass TSchema from ObjectSchema to .validate function
#2698
Add Date -> Joi.DateSchema map to ObjectPropertiesSchema<T>
#2687
string().min(0) is failing to validate a zero-length string
#2666
Updated `multiple` rule to support decimal/float base
#2665
Fix typings on any.external(): add helpers argument
#2651
Fix label elimination for externals
#2649
fix: Joi.string().hostname() not returning errors for CIDR notation
#2648
Incorrect hostname validation
#2635
any.external: can't disable label
#2605
"ExternalValidationFunction" type is missing "helpers" parameter in index.d.ts
#2600
Joi.external() error message
#2590
defaults in alternatives should work recursively
#2589
merge subschema matches when subchemas are objects, or alternatives of objects
#2577
add subschema property validation failures to context
Show More
17.4.3
#2685
Joi.string().email() passes for `foo@bar%2ecom`
17.4.2
#2642
Fix issue with only required items. Fixes #2620.
#2624
Fix Web Workers compatibility
#2620
If all elements of array is required, it does not validate unknown items
#2251
`dist/joi-browser.min.js` doesn't work in workers
17.4.1
#2627
Add object type guards schema
#2586
fix isSchema type definition
#2585
type problem in Joi.isSchema function
#2573
Add option array type to AlternativesSchema.conditional
17.4.0
#2556
fix: any.when() options parameters not supported as Array in index.d.ts
#2555
Type definition for the function `any.when()` mismatch the documentation and usage
#2551
feat: Make Joi.Schema generic
#2548
fix: defaults in ordered array are not filled
#2543
URI validation, allowRelative with domain
#2536
merge the results of a .match('all') if all the subschemas are objects
#2535
defaults in alternatives with a match mode set are not returned
#2534
Remove incorrect errors type
#2532
Fix confusing message when refs are passed
#2528
Added guid separator and made version optional
#2523
errors is always undefined in ValidationResult
#2521
Fix type of schema passed to alter functions
#2518
fix for stripUnknown not working for nested object on invalid object
#2502
Appends the allowed object keys in typescript
#2479
Inconsistency with stripUnknown: true and failing validation rules
#2471
Joi.object().xor() throws with "must be a string or a reference" when passed a reference
#2459
stripUnknown doesn't work for nested objects
#2404
defaults in ordered array are not filled
Show More
17.3.0
#2477
Add RegExp to the supported types for Extension.type
#2475
Add render property to ReferenceOptions TS def
#2465
@hapi/formula@2.0.0 Deprecated
#2455
Expose prefs in external()
#2454
CustomValidator return type adjusted in typescript
#2442
Update index.d.ts
#2441
Wrong field name in ValidationError (index.d.ts)
17.2.1
#2450
Update dev site
17.2.0
breaking changes
#2431
Import types from DT
#2421
Support ISO8601 with hours timeshift only
#2419
isoDate doesn't recognize correct string
#2408
Fix number padding (e.g. 00000) and trailing decimal points (e.g. 2.)
#2407
"2." throws number.unsafe
#2406
"00000" throws number.unsafe
#2398
Support maxDomainSegments
#2380
Joi.build() does not work with complex extension bases
#2377
Add extension validation for "cast"
#2361
Validation artifacts collected from successful rules
#2348
object.default() broke when object is extended
#2337
tlds fails to error on invalid segment
#2330
Consistently apply wrap setting
#2320
invalid GUID/UUID is validated as valid
#2318
`larger than` is incorrect for comparing quanties
#2303
Add option to resolve `.ref()` and `.in()` values in error messages.
#2284
Array item could not be an Error
Show More
17.1.1
#2316
Validate domain in relative uri
#2293
Fix error on changeless forks. Fixes #2292.
#2292
Fork object with option already applied
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
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
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
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