NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #572 most downloaded on npm
Standard library
Last release 2 months ago
05 Aug 2026
Ships fairly regularly
a new release about every 2 months
Nearly every release is documented
notes for 53 of 53 stable releases
234 versions withdrawn
withdrawn after publishing
13 years old
289 releases · first in 2013
Early release for testing some concepts.
Early release for testing some conceptions.
Early release for testing some conceptions.
NOT FOR USAGE IN REAL PROJECTS.
See more info here: https://github.com/zloirock/core-js/pull/1310
One column per quarter.
Changes v3.49.0...v3.50.0 (138 commits)
Iterator.zipIterator.zipKeyedes. namespace modules, /es/ and /stable/ namespace entriesIterator chunking proposal:
Iterator.prototype.chunksIterator.prototype.windowsTypeError instead of RangeError on non-integer number chunkSize / windowSize, following tc39/proposal-iterator-chunking/#30/actual/ namespace entries, unconditional forced replacement changed to feature detectionIterator includes stage 3 proposal:
Iterator.prototype.includesIterator join stage 3 proposal:
Iterator.prototype.joinPromise.allKeyedPromise.allSettledKeyedRangeError on finite unsafe integer limit in Iterator.prototype.{ drop, take }, following tc39/ecma262/#3776PromiseResolve semantics in Promise.try, following tc39/ecma262/#3883Iterator.prototype.flatMap bug case, #1538Object.prototype.__proto__ instead of removing it, so the feature detection updatedJSON.stringify polyfill with an array replacer - keys order now follows the replacer, inherited and non-enumerable properties are no longer ignored, #1539URL / URLSearchParams parsing a little more correct (char sets, percent coding, etc)URL#toJSON when URL#toString is reassigned after core-js is importedSymbol.forget-iterator / get-iterator-method fixesString.prototype.{ match, search } polyfills conversion orderMAX_SAFE_INTEGER excess check in Array.from and { Map, Object }.groupBy polyfillsMath.{ asinh, cbrt, log1p } polyfills with big and small valuesUint8Array base64 methodsescapeArray.prototype.fill on ArrayBuffer constructor and %TypedArray%.prototype.fillpackage.json of some missed packages (just to satisfy publint)Iterator.prototype.{ drop, take } properly supported from:
Promise.try marked as not properly supported in all enginesIterator.prototype.{ chunks, windows } marked as shipped in FF154Iterator.prototype.includes marked as shipped in FF154Iterator.prototype.includes marked as shipped in Bun 1.4.0Iterator.prototype.join marked as shipped in FF154Array.prototype.includes WebKit bug marked as fixed in:
queueMicrotask Bun bug marked as fixed in Bun 1.4.0Changes v3.48.0...v3.49.0 (373 commits)
Iterator.range updated following the actual spec version
RangeError on NaN start / end / stepnull as optionOrStepMath.{ asinh, atanh } polyfills with big and small valuesNumber.prototype.toExponential polyfills with big and small valuesatob, btoa, Uint8Array.fromHex, Uint8Array.prototype.setFromHex, and Uint8Array.prototype.toHex, #1503, #1464, #1510, thanks @johnzhou721Map upsert proposalMap upsert proposal from the pure version made generic to make it work with polyfilled and native collectionsSymbol.for in Symbol.prototype.description polyfill for correct handling of empty string descriptionsArray.prototype.includes with sparse arrays and fromIndexIterator.prototype.take) of a V8 ~ Chromium < 126 bugIterator.{ concat, zip, zipKeyed } in the pure version for ensuring proper wrapped Iterator instances as the result.return() on exhausted iterator from some methods of iterator helpers polyfill to the underlying iterator.return() calling in case of throwing error in this method in the internal iterate helper that affected some polyfillsIteratorValue errors in the internal iterate helper that affected some polyfillsArray.from polyfill on failure to create array propertyArray.fromAsync polyfillMAX_SAFE_INTEGER in Array.fromAsync polyfillArray.prototype.flat polyfillIterator.{ zip, zipKeyed } polyfillsIterator.{ zip, zipKeyed } polyfills.next() results an objects in Iterator.{ zip, zipKeyed } polyfillsIterator.concat polyfill on primitive as an iteratorIterator.prototype.windows polyfillSet.prototype.{ isDisjointFrom, isSupersetOf } polyfillSet.prototype.difference polyfill with updating thisDataView.prototype.setFloat16 polyfill in (0, 1) rangeString.prototype.{ padStart, padEnd } polyfillsString.prototype.{ startsWith, endsWith } polyfillsInfinity handling in String.prototype.substr polyfillString.prototype.repeat polyfill with a counter exceeding 2 ** 32escape polyfillRegExp NCG polyfillRegExp NCG polyfill in combination with other types of groupsRegExp NCG polyfill in combination with dotAllString.prototype.replace with sticky polyfill, #810, #1514RegExp sticky polyfill with alternationmultiline + sticky mode in RegExp polyfill.input slicing on result object with RegExp sticky mode polyfillglobal and unicode modes in polyfillsURLSearchParam.prototype.delete polyfill with duplicate key-value pairsURLSearchParam.prototype.delete polyfill with second argumentURL polyfillURL polyfillURL polyfill'' and null host handling in the URL polyfillhostname = host:port in the URL polyfillURL polyfillURL polyfillURLSearchParams polyfillURL polyfill (/. prefix for non-special URLs with null host and path starting with empty segment)URL polyfill .origin getter with blob schemeURLSearchParams.prototype.set polyfill on calling only with 1 argumentURLSearchParams polyfillURLSearchParams polyfillURL polyfillToPropertyKey calling in Reflect.{ get, set, deleteProperty } polyfillsReflect.set polyfill with some descriptors casesReflect.set polyfill with some non-extensible receiver casesReflect.construct polyfill arguments validation (observable only in the error message)Reflect.defineProperty polyfill with malformed descriptorJSON.parse polyfill on unterminated object and array literalsJSON.parse polyfill on numbers with ., but without a fraction part\u{} in String.dedent polyfillString.dedent polyfill%AsyncFromSyncIteratorPrototype% to make it a little stricterAsyncIterator methodsAsyncIterator.prototype.flatMap polyfillAsyncIterator.prototype.map polyfill on error in underlying iterator .next()AsyncIterator.prototype.take polyfill with return: null.return() result as object in AsyncIterator.prototype.take polyfillstructuredClone polyfill on attempt to transfer multiple objects, some of which are non-transferableArrayBuffer transferring where newByteLength exceeds the original maxByteLengthObject.defineProperty in Symbol polyfillObject.defineProperty in Symbol polyfill in Android ~ 2%TypedArray%.from arguments validationArrayBuffer and a negative length to the %TypedArray% and DataView constructors polyfills@@toStringTag on %TypedArray% polyfillToUint8Clamp conversionNaN handling in Date.prototype.setYear polyfillWeakMap validation in the pure version{ Map, Set }.prototype.forEach moments in the pure versionArray.isTemplateObject polyfill on frozen arrayObservable.from with multiple subscriptions of the obsolete ECMAScript Observable proposal polyfillNumber.fromString polyfillesmodules: intersect option of core-js-compatreactnative alias in core-js-compat typescore-js-builderblacklist option of core-js-builder - it should be removed only in the next major releaseString.prototype.{ match, matchAll, replace, split } in modern engines, add s, d and v flag support to polyfills of those methodsNumber.fromString proposalsiOS detectionMath.sumPrecise marked as shipped in V8 ~ Chrome 147Iterator.concat marked as shipped in V8 ~ Chrome 146Iterator.concat marked as shipped in Safari 26.4Array.prototype.includes marked as not supported in modern SafariparseInt and parseFloatChanges v3.47.0...v3.48.0 (126 commits)
Map upsert proposal:
Map.prototype.getOrInsertMap.prototype.getOrInsertComputedWeakMap.prototype.getOrInsertWeakMap.prototype.getOrInsertComputedes. namespace modules, /es/ and /stable/ namespaces entriesCreateDataProperty / CreateDataPropertyOrThrow in some missed cases, #1497RegExp constructor (NCG and dotAll) polyfill.lengthIterator.prototype.flatMap throws on iterator without return methodUint8Array.prototype.setFromHex throws an error on length-tracking views over ResizableArrayBufferMap upsert proposal features marked as shipped in V8 ~ Chrome 145Iterator.concat marked as shipped in Bun 1.3.7Iterator.prototype.flatMap marked as supported from Safari 26.2 and Bun 1.2.21 because of a bug: throws on iterator without return methodUint8Array.prototype.setFromHex marked as supported from V8 ~ Chromium 144 because of a bug: throws an error on length-tracking views over ResizableArrayBufferChanges v3.46.0...v3.47.0 (117 commits)
JSON.parse source text access proposal :
JSON.isRawJSONJSON.parseJSON.rawJSONJSON.stringifyes. namespace modules, /es/ and /stable/ namespaces entriesJSON.stringify internalsIterator sequencing proposal:
Iterator.concates. namespace modules, /es/ and /stable/ namespaces entriesIterator.zipIterator.zipKeyed/actual/ namespace entries, unconditional forced replacement changed to feature detection.size in URLSearchParams.prototype.append polyfill in IE8-Iterator.concat marked as shipped in FF147Map upsert proposal features marked as shipped in Safari 26.2Math.sumPrecise marked as shipped in Safari 26.2Uint8Array.{ fromBase64, prototype.setFromBase64 } marked as fixed in Safari 26.2Welcome to our new website, core-js.io , where our documentation is moving!
Welcome to our new website, core-js.io, where our documentation is moving!
In addition, you can now follow the project's news in X.
Map upsert stage 3 proposal:
Iterator chunking proposal:
Iterator.prototype.chunksIterator.prototype.windowsIterator.prototype.sliding method replaced with an extra parameter of Iterator.prototype.windows method, tc39/proposal-iterator-chunking/#24, tc39/proposal-iterator-chunking/#26Iterator.zip and Iterator.zipKeyed behavior with mode: 'longest' option, #1469, thanks @lionel-roweObject.groupBy and Iterator.zipKeyed together with Symbol polyfill - some cases of symbol keys on result null-prototype object were able to leak out to for-inMap upsert proposal features marked as shipped from FF144Changes v3.45.0...v3.45.1 (30 commits)
Map upsert proposal with polyfilled methods in the pure versionbugs fields to package.json of all packagesMap upsert proposal features marked as shipped from Bun 1.2.20Changes v3.44.0...v3.45.0 (70 commits)
Uint8Array to / from base64 and hex proposal:
Uint8Array.fromBase64Uint8Array.fromHexUint8Array.prototype.setFromBase64Uint8Array.prototype.setFromHexUint8Array.prototype.toBase64Uint8Array.prototype.toHexes. namespace modules, /es/ and /stable/ namespaces entriesUint8Array fromBase64 / setFromBase64 does not throw an error on incorrect length of base64 stringMath.sumPrecise proposal:
Math.sumPrecisees. namespace module, /es/ and /stable/ namespaces entriesIterator sequencing proposal:
Iterator.concat/actual/ namespace entries, unconditional forced replacement changed to feature detectionMap upsert proposal:
Map.prototype.getOrInsertMap.prototype.getOrInsertComputedWeakMap.prototype.getOrInsertWeakMap.prototype.getOrInsertComputed/actual/ namespace entries, unconditional forced replacement changed to feature detectionIterator methods/stage/ entriesUint8Array to / from base64 and hex proposal features marked as supported from V8 ~ Chromium 140Uint8Array.{ fromBase64, prototype.setFromBase64 } marked as unsupported in Safari and supported only from Bun 1.2.20 because of a bug: it does not throw an error on incorrect length of base64 string%TypedArray%.prototype.with marked as fixed in Safari 26.0Changes v3.43.0...v3.44.0 (87 commits)
Uint8Array to / from base64 and hex stage 3 proposal:
Uint8Array.fromHex and Uint8Array.prototype.{ setFromBase64, toBase64, toHex }, thanks @brc-ddGet in Iterator.zipKeyed, following tc39/proposal-joint-iteration#43Iterator sequencing stage 2.7 proposal:
Iterator.concat no longer reuses IteratorResult object of concatenated iterators, following tc39/proposal-iterator-sequencing#26Iterator chunking stage 2 proposal:
Iterator.prototype.slidingNumber.prototype.clamp stage 2 proposal:
clamp no longer throws an error on NaN as min or max, following tc39/proposal-math-clamp#d2387791c265edf66fbe2455eab919016717ce6fSet.prototype.{ symmetricDifference, union } detectionIterator methods/full/{ instance, number/virtual }/clamp entriesIterator helpers marked as fixed and updated following the latest spec changes in Safari 26.0Set.prototype.{ difference, symmetricDifference, union } marked as fixed in Safari 26.0SuppressedError marked as fixed in FF141Error.isError marked as fixed in Node 24.3setImmediate and clearImmediate marked as available from Deno 2.4Math.sumPrecise marked as shipped in Bun 1.2.18%TypedArray%.prototype.with marked as fixed in Bun 1.2.18Changes v3.42.0...v3.43.0 (139 commits)
Symbol.disposeSymbol.asyncDisposeSuppressedErrorDisposableStack
DisposableStack.prototype.disposeDisposableStack.prototype.useDisposableStack.prototype.adoptDisposableStack.prototype.deferDisposableStack.prototype.moveDisposableStack.prototype[@@dispose]AsyncDisposableStack
AsyncDisposableStack.prototype.disposeAsyncAsyncDisposableStack.prototype.useAsyncDisposableStack.prototype.adoptAsyncDisposableStack.prototype.deferAsyncDisposableStack.prototype.moveAsyncDisposableStack.prototype[@@asyncDispose]Iterator.prototype[@@dispose]AsyncIterator.prototype[@@asyncDispose]es. namespace module, /es/ and /stable/ namespaces entriesArray.fromAsync proposal:
Array.fromAsynces. namespace module, /es/ and /stable/ namespaces entriesError.isError proposal:
Error.isErrores. namespace module, /es/ and /stable/ namespaces entriesIterator.zipIterator.zipKeyedIterator chunking stage 2 proposal:
Iterator.prototype.chunksIterator.prototype.windowsNumber.prototype.clamp proposal:
Number.prototype.clampMath.clamp was replaced with Number.prototype.clampRangeError if min <= max or +0 min and -0 max, tc39/proposal-math-clamp/#22flags getter PR. Native methods are not fixed, only own implementation updated for:
RegExp.prototype[@@match]RegExp.prototype[@@replace]RegExp flags in polyfills of some methods in engines without proper support of RegExp.prototype.flags and without polyfill of this getterthis is updated while Set.prototype.difference is being executedthis in the following methods:
Set.prototype.symmetricDifferenceSet.prototype.unionIterator.prototype.dropIterator.prototype.filterIterator.prototype.flatMapIterator.prototype.mapIterator.from when underlying iterator's return method is nullArray.prototype.with when index coercion failsTypedArray.prototype.with should truncate negative fractional index to zero, but instead throws an errorPromise polyfill in the pure version/iterator/flat-map entriesError.isError marked not supported in Node because of a bugSet.prototype.difference marked as not supported in Safari and supported only from Bun 1.2.5 because of a bugSet.prototype.{ symmetricDifference, union } marked as not supported in Safari and supported only from Bun 1.2.5 because of a bugIterator.from marked as not supported in Safari and supported only from Bun 1.2.5 because of a bugIterator helpers marked as implemented from FF141Array.prototype.with marked as supported only from FF140 because it throws an incorrect exception when index coercion failsTypedArray.prototype.with marked as unsupported in Bun and Safari because it should truncate negative fractional index to zero, but instead throws an errorDisposableStack and AsyncDisposableStack marked as shipped in FF141 (SuppressedError has a bug)AsyncDisposableStack bugs marked as fixed in Deno 2.3.2SuppressedError bugs (extra arguments support and arity) marked as fixed in Bun 1.2.15Changes v3.41.0...v3.42.0 (142 commits)
Map upsert proposal:
WeakMap.prototype.getOrInsertComputed updated following tc39/proposal-upsert#79Map.prototype.getOrInsertMap.prototype.getOrInsertComputedWeakMap.prototype.getOrInsertWeakMap.prototype.getOrInsertComputedSymbol methods for RegExp on primitive values following tc39/ecma262#3009:
core-js implementationsString.prototype.matchAllString.prototype.matchString.prototype.replaceAllString.prototype.replaceString.prototype.searchString.prototype.splitUint8Array.prototype.setFromBase64 bug in some of Linux builds of WebKitIterator.prototype.dropIterator.prototype.everyIterator.prototype.filterIterator.prototype.findIterator.prototype.flatMapIterator.prototype.forEachIterator.prototype.mapIterator.prototype.reduceIterator.prototype.someIterator.prototype.takeAsyncIterator helpersArray.fromAsync (due to the lack of async feature detection capability - temporarily, only in own core-js implementation)AsyncIterator.fromIterator.prototype.toAsyncundefined initial parameter in Iterator.prototype.reduce (see WebKit bug)core-js-compat and core-js-builder API:
'intersect' support for targets.esmodules (Babel 7 behavior)targets.esmodules: true (Babel 7 behavior)RegExp.escape marked as shipped from V8 ~ Chromium 136Error.isError marked as shipped from FF138Iterator helpers proposal features marked as supported from Deno 1.38.1 since it seems they were disabled in 1.38.0Iterator.prototype.{ drop, reduce, take } methods marked as fixed in Bun 1.2.11Changes v3.40.0...v3.41.0 (85 commits)
RegExp.escape proposal:
RegExp.escapees. namespace module, /es/ and /stable/ namespaces entriesFloat16 proposal:
Math.f16roundDataView.prototype.getFloat16DataView.prototype.setFloat16es. namespace modules, /es/ and /stable/ namespaces entriesMath.clamp stage 1 proposal:
Math.clampMath extensions proposal, February 2025 TC39 meetingAsyncDisposableStack bug, tc39/proposal-explicit-resource-management/256DisposableStack, SuppressedError and Iterator.prototype[@@dispose] marked as shipped from V8 ~ Chromium 134Error.isError added and marked as shipped from V8 ~ Chromium 134Math.f16round and DataView.prototype.{ getFloat16, setFloat16 } marked as shipped from V8 ~ Chromium 135Iterator helpers proposal features marked as shipped from Safari 18.4JSON.parse source text access proposal features marked as shipped from Safari 18.4Math.sumPrecise marked as shipped from FF137Changes v3.39.0...v3.40.0 (130 commits)
Error.isError stage 3 proposal:
Error.isError.shamIterator sequencing stage 2.7 proposal:
IteratorResult objects when possible, tc39/proposal-iterator-sequencing/17, tc39/proposal-iterator-sequencing/18, December 2024 TC39 meetingSet methodsDataView.prototype.{ getFloat16, setFloat16 } performance, #1379, thanks @LeviPesin%TypedArray%.prototype.toSplicedMath.scale) available on globalRegExp.escape marked as shipped from Safari 18.2Promise.try marked as shipped from Safari 18.2Math.f16round and DataView.prototype.{ getFloat16, setFloat16 } marked as shipped from Safari 18.2Uint8Array to / from base64 and hex proposal methods marked as shipped from Safari 18.2JSON.parse source text access proposal features marked as shipped from FF135RegExp.escape marked as shipped from FF134Promise.try marked as shipped from FF134Symbol.dispose, Symbol.asyncDispose and Iterator.prototype[@@dispose] marked as shipped from FF135JSON.parse source text access proposal features marked as shipped from Bun 1.1.43URL.parse was added - 22.1 instead of 22.0Iterator.prototype[@@toStringTag]
Iterator helpers proposal:
Iterator
Iterator.fromIterator.prototype.dropIterator.prototype.everyIterator.prototype.filterIterator.prototype.findIterator.prototype.flatMapIterator.prototype.forEachIterator.prototype.mapIterator.prototype.reduceIterator.prototype.someIterator.prototype.takeIterator.prototype.toArrayIterator.prototype[@@toStringTag]es. namespace modules, /es/ and /stable/ namespaces entriesPromise.try:
Promise.tryes. namespace module, /es/ and /stable/ namespaces entries/actual|full/promise/try entries for the callback arguments supportMath.sumPrecise proposal:
Math.sumPrecise/actual/ namespace entries, unconditional forced replacement changed to feature detectionIterator sequencing stage 2.7 proposal:
Iterator.concatMap upsert stage 2 proposal:
Map.prototype.getOrInsertMap.prototype.getOrInsertComputedWeakMap.prototype.getOrInsertWeakMap.prototype.getOrInsertComputed@@species pattern removed from %TypedArray% and ArrayBuffer methods, tc39/ecma262/3450:
%TypedArray%.prototype.filter%TypedArray%.prototype.filterReject%TypedArray%.prototype.map%TypedArray%.prototype.slice%TypedArray%.prototype.subarrayArrayBuffer.prototype.sliceUint8Array to / from base64 and hex proposal methods marked as shipped from FF133self descriptor is fixed in Deno 1.46.0Iterator helpers proposal methods marked as shipped from Bun 1.1.31Fixed some cases of URLSearchParams percent decoding, #1357, #1361, thanks @slowcheetah
URLSearchParams percent decoding, #1357, #1361, thanks @slowcheetahIterator helpers proposal methods marked as shipped from FF131Math.f16round and DataView.prototype.{ getFloat16, setFloat16 } marked as shipped from Bun 1.1.23RegExp.escape marked as shipped from Bun 1.1.22Promise.try marked as shipped from Bun 1.1.22Uint8Array to / from base64 and hex proposal methods marked as shipped from Bun 1.1.22Moved to stage 3, June 2024 and July 2024 TC39 meetings
RegExp.escape proposal:
RegExp.escape/actual/ namespace entries, unconditional forced replacement changed to feature detectionPromise.try proposal:
Promise.try/actual/ namespace entries, unconditional forced replacement changed to feature detectionUint8Array to / from base64 and hex stage 3 proposal:
Uint8Array.fromBase64Uint8Array.fromHexUint8Array.prototype.setFromBase64Uint8Array.prototype.setFromHexUint8Array.prototype.toBase64Uint8Array.prototype.toHexUint8Array.prototype.{ setFromBase64, setFromHex } methodsUint8Array.fromBase64 and Uint8Array.prototype.setFromBase64 lastChunkHandling option, proposal-arraybuffer-base64/33Uint8Array.prototype.toBase64 omitPadding option, proposal-arraybuffer-base64/60TypeError on arrays backed by detached buffersRegExp named capture groups polyfill in combination with non-capturing groups, #1352, thanks @Ulopprocess.getBuiltinModule for getting built-in NodeJS modules where it's availablehttps instead of http in URL constructor feature detection to avoid extra notifications from some overly vigilant security scanners, #1345browserslist in core-js-compat dependencies that fixes an upstream issue with incorrect interpretation of some browserslist queries, #1344, browserslist/829, browserslist/836Object.groupBy and Map.groupBy to work for non-objectsRangeError if Set methods are called on an object with negative size propertySet.prototype.symmetricDifference to call this.has in each iterationArray.fromAsync to not call the Array constructor twiceURL.parseMath.f16round and DataView.prototype.{ getFloat16, setFloat16 } marked as shipped from FF129Symbol.asyncDispose added and marked as supported from V8 ~ Chromium 127Promise.try added and marked as supported from V8 ~ Chromium 128self descriptor is broken in Deno 1.45.3 (again)Fixed `URL.parse` feature detection for some specific cases
URL.parse feature detection for some specific casesSet methods proposal added and marked as supported from FF 127Symbol.dispose added and marked as supported from V8 ~ Chromium 125Math.f16round and DataView.prototype.{ getFloat16, setFloat16 } added and marked as supported from Deno 1.43URL.parse added and marked as supported from Chromium 126URL.parse added and marked as supported from NodeJS 22.0URL.parse added and marked as supported from Deno 1.43Set.prototype.symmetricDifference
Set methods proposal:
Set.prototype.intersectionSet.prototype.unionSet.prototype.differenceSet.prototype.symmetricDifferenceSet.prototype.isSubsetOfSet.prototype.isSupersetOfSet.prototype.isDisjointFromes. namespace modules, /es/ and /stable/ namespaces entriesMath.sumPrecise stage 2.7 proposal:
Math.sumPrecisePromise.try proposal:
Promise.tryRegExp.escape stage 2 proposal:
Symbol.customMatcherSymbol.customMatcherSymbol.customMatcher well-known symbol from the pattern matching proposal is also used in the exactors proposal, added an entry also for this proposalURL.parse, url/825URL.parse added and marked as supported from FF 126URL.parse added and marked as supported from Bun 1.1.4URL.canParse fixed and marked as supported from Bun 1.1.0Set methods fixed in JavaScriptCore and marked as supported from Bun 1.1.1Fixed some validation cases in Object.setPrototypeOf, #1329, thanks @minseok-choe
Object.setPrototypeOf, #1329, thanks @minseok-choeArray.from, #1331, thanks @minseok-choequeueMicrotask arityURL.canParse aritySuppressedError extra arguments support and arityvalue argument of URLSearchParams.prototype.{ has, delete } marked as supported from Bun 1.0.31Array.prototype.{ toSpliced, toReversed, with } and atob marked as supported`ArrayBuffer.prototype.transfer` and friends proposal:
ArrayBuffer.prototype.transfer and friends proposal:
ArrayBuffer.prototype.detachedArrayBuffer.prototype.transferArrayBuffer.prototype.transferToFixedLengthes. namespace modules, /es/ and /stable/ namespaces entriesUint8Array to / from base64 and hex proposal:
Uint8Array.fromBase64Uint8Array.fromHexUint8Array.prototype.toBase64Uint8Array.prototype.toHex/actual/ namespace entriesPromise.try proposal has been resurrected and moved to stage 2, Febrary 2024 TC39 meetingcore-js/stage/2.7 - still emptySet.prototype.intersection feature detectionArray.prototype.{ indexOf, lastIndexOf, includes }, #1325, thanks @minseok-choeArray.prototype.{ reduce, reduceRight }, #1327, thanks @minseok-choeArray.from and some other methods with proxy targets, #1322, thanks @minseok-choeArrayBuffer.prototype.transfer and friends proposal in some specific cases in IE10-Date.prototype.toJSON to JSON.stringify entries dependencies{ Map, Object }.groupBy, Promise.withResolvers, ArrayBuffer.prototype.transfer and friends marked as supported from Safari 17.4Set methods fixed and marked as supported from V8 ~ Chrome 123Symbol.metadata marked as supported from Deno 1.40.4Fixed internal ToLength operation with bigints, #1318
ToLength operation with bigints, #1318String#split polyfillIterator helpers proposal methods marked as supported from V8 ~ Chrome 122Set methods, but they have a bug similar to Safariself marked as fixed from Bun 1.0.22SuppressedError and Symbol.{ dispose, asyncDispose } marked as supported from Bun 1.0.23`{ Map, Set, WeakMap, WeakSet }.{ from, of }` became non-generic, following this and some other notes. Now they can be invoked without this, but no lo
{ Map, Set, WeakMap, WeakSet }.{ from, of } became non-generic, following this and some other notes. Now they can be invoked without this, but no longer return subclass instancesSymbol polyfillqueueMicrotask polyfillArrayBufferArray.fromAsync marked as supported from V8 ~ Chrome 121Array.prototype.push bug is fixed in V8 ~ Chrome 122 (Hallelujah!)ArrayBuffer.prototype.transfer and friends proposal features marked as supported from FF 122 and Bun 1.0.19Object.groupBy and Map.groupBy marked as supported from Bun 1.0.19Iterator helpers proposal methods are still not disabled in Deno, the web compatibility issue why it was disabled in Chromium makes no sense for Deno and fixed in the spec, they marked as supported from Deno 1.37Moved to stable ES, November 2023 TC39 meeting
Array grouping proposal:
Object.groupByMap.groupByes. namespace modules, /es/ and /stable/ namespaces entriesPromise.withResolvers proposal:
Promise.withResolverses. namespace module, /es/ and /stable/ namespaces entriesIterator helpers proposal, proposal-iterator-helpers/287 and some following changes, November 2023 TC39 meetingUint8Array to / from base64 and hex stage 2 proposal:
Uint8Array.fromBase64Uint8Array.fromHexUint8Array.prototype.toBase64Uint8Array.prototype.toHexNumber.fromString validation before clarification of proposal-number-fromstring/24@@toStringTag property descriptors on DOM collections, #1312Array iteration methods, #1313atob / btoa improvementsPromise.withResolvers marked as shipped from FF121Fixed an issue getting the global object on Duktape, #1303
[[DedentMap]] from String.dedent proposal between core-js instances before stabilization of the proposalArray.fromAsync marked as supported from Deno 1.38Symbol.{ dispose, asyncDispose } marked as supported from Deno 1.38Simplified structuredClone polyfill, avoided second tree pass in cases of transferring
structuredClone polyfill, avoided second tree pass in cases of transferringSuppressedError to structuredClone polyfillArrayBuffer and DataView dependencies of structuredClone lack of which could cause errors in some entries in IE10-Number.fromStringURL.canParse marked as supported from Chromium 120Added one more workaround of possible error with Symbol polyfill on global object, #1289
Symbol polyfill on global object, #1289type: commonjs in package.json of all packages to avoid potential breakage in future Node versions, see this issueString.prototype.{ isWellFormed, toWellFormed } marked as supported from FF119Re-introduced `RegExp` escaping stage 2 proposal, September 2023 TC39 meeting:
RegExp escaping stage 2 proposal, September 2023 TC39 meeting:
RegExp.escape method with the new set of symbols for escapingcore-js, but it was removed after rejecting the old version of this proposalArrayBuffer.prototype.{ transfer, transferToFixedLength } and support transferring of ArrayBuffers via structuredClone to engines with MessageChannelMath.f16round polyfillMath.f16round and DataView.prototype.{ getFloat16, setFloat16 }Observable proposal because of incompatibility with the new WHATWG Observable proposalSymbol polyfill, #1289Iterator helpers because of some Web compatibility issuesPromise.withResolvers marked as supported from V8 ~ Chrome 119Array grouping proposal features marked as supported from FF119value argument of URLSearchParams.prototype.{ has, delete } marked as properly supported from V8 ~ Chrome 118URL.canParse and URLSearchParams.prototype.size marked as supported from Bun 1.0.2Fixed structuredClone feature detection core-js@3.32.1 bug, #1288
Fixed some cases of IEEE754 rounding, #1279, thanks @petamoriken
process polyfill to core-js via some bundlers or esm.sh, #1277Promise.withResolvers marked as supported from Bun 0.7.1`Array` grouping proposal, July 2023 TC39 meeting updates:
Array grouping proposal, July 2023 TC39 meeting updates:
/actual/ namespaces entries, unconditional forced replacement changed to feature detectionPromise.withResolvers proposal, July 2023 TC39 meeting updates:
/actual/ namespaces entries, unconditional forced replacement changed to feature detectionSet methods stage 3 proposal, July 2023 TC39 meeting updates::
Set sizes, proposal-set-methods/88IsCallable check in GetKeysIterator, proposal-set-methods/101String wrapper objects, July 2023 TC39 meeting update, proposal-iterator-helpers/281Iterator is not constructible from the active function object (works as an abstract class)/actual/ namespace entries, unconditional forced replacement changed to feature detection[@@dispose]() method when hint is async-dispose, proposal-explicit-resource-management/180Float16Array stage 3 proposal:
Float16Array right now, however, make sense to add some methods from this proposal.Math.f16roundDataView.prototype.getFloat16DataView.prototype.setFloat16DataView get / set Uint8Clamped methods stage 1 proposal:
DataView.prototype.getUint8ClampedDataView.prototype.setUint8Clampedvalue argument of URLSearchParams.prototype.{ has, delete }Set methods implementation by the actual specSymbol.{ dispose, asyncDispose } descriptors from NodeJS 20.4 / transpilers helpers / userland codeAsyncIteratorPrototype core-js/configurator option, #1268Iterator helpers proposal features marked as supported from V8 ~ Chrome 117Array grouping proposal features marked as supported from V8 ~ Chrome 117Symbol.{ dispose, asyncDispose } as supported from NodeJS 20.5.0 (as mentioned above, NodeJS 20.4.0 add it, but with incorrect descriptors)Fixed a structuredClone bug with cloning views of transferred buffers, #1265
structuredClone bug with cloning views of transferred buffers, #1265DataView methodsFloat16Array in structuredCloneSet methods proposal marked as supported from Safari 17.0URL features: URL.canParse, URLSearchParams.prototype.size and value argument of URLSearchParams.prototype.{ has, delete } marked as supported from Safari 17.0value argument of URLSearchParams.prototype.{ has, delete } marked as supported from Deno 1.35AggregateError and well-formed JSON.stringify marked as supported React Native 0.72 HermesWell-formed unicode strings proposal:
String.prototype.isWellFormed methodString.prototype.toWellFormed methodes. namespace modules, /es/ and /stable/ namespaces entriesArray grouping proposal, May 2023 TC39 meeting updates:
Object.groupBy methodMap.groupBy method (with the actual semantic - with a minor difference it was present in the collections methods stage 1 proposal)Function.prototype[Symbol.metadata] (=== null)/actual/ entriesSymbol.iterator fallback from callable check to undefined / null check, May 2023 TC39 meeting, proposal-iterator-helpers/272IsCallable check on NextMethod, deferring errors to Call site, May 2023 TC39 meeting, proposal-iterator-helpers/274Promise.withResolvers stage 2 proposal:
Promise.withResolvers methodSymbol predicates stage 2 proposal:
Symbol, May 2023 TC39 meeting:
Symbol.isRegistered -> Symbol.isRegisteredSymbol methodSymbol.isWellKnown -> Symbol.isWellKnownSymbol methodvalue argument of URLSearchParams.prototype.{ has, delete }, url/735ArrayBuffer.prototype.{ transfer, transferToFixedLength } polyfillsAsyncDisposableStack.prototype.adopt callback, #1258URLSearchParams#size in ES3 engines (IE8-)Object.{ entries, values } for some IE versions bug with invisible integer keys on null-prototype objectscore-js-compat, #1235, thanks @susnuxSet.prototype.difference that was missed in Bun because of a bug added in 0.6.0Array.prototype.{ group, groupToMap } marked as no longer supported in WebKit runtimes because of the mentioned above web compat issue. For example, it's disabled from Bun 0.6.2Array by copy proposal marked as supported from FF115Array.fromAsync marked as supported from FF115URL.canParse marked as supported from FF115value argument of URLSearchParams.prototype.{ has, delete } marked as supported from NodeJS 20.2.0 and FF115Added a fix for a NodeJS 20.0.0 bug with cloning File via structuredClone
File via structuredCloneString optimization, #1242URL.canParse marked as supported (fixed) from NodeJS 20.1.0 and Deno 1.33.2Added a fix for a NodeJS 19.9.0 URL.canParse bug
URL.canParse bugJSON.parse source text access proposal features marked as supported from V8 ~ Chrome 114ArrayBuffer.prototype.transfer and friends proposal features marked as supported from V8 ~ Chrome 114URLSearchParams.prototype.size marked as supported from V8 ~ Chrome 113Added `URL.canParse` method, url/763
URL.canParse method, url/763Set methods proposal:
Set.prototype.intersection, March 2023 TC39 meeting, proposal-set-methods/94(Async)DisposableStack.prototype.move marks the original stack as disposed, #1226Iterator.range proposal:
Symbol.metadata, March 2023 TC39 meeting, proposal-decorator-metadata/12URLSearchParams.prototype.size marked as supported from FF112, NodeJS 19.8 and Deno 1.32Fixed dependencies of some entries
ToString conversion / built-ins nature of some accessorsString.prototype.{ isWellFormed, toWellFormed } marked as supported from V8 ~ Chrome 111Added URLSearchParams.prototype.size getter, url/734
URLSearchParams.prototype.size getter, url/734ArrayBuffers in the structuredClone polyfill/(stable|actual|full)/instance/unshift entries, #1207Set methods proposal marked as supported from Bun 0.5.7String.prototype.toWellFormed marked as fixed from Bun 0.5.7Fixed theoretically possible ReDoS vulnerabilities in String.prototype.{ trim, trimEnd, trimRight }, parse(Int|Float), Number, atob, and URL polyfills…
Array by copy proposal:
Array.prototype.toReversedArray.prototype.toSortedArray.prototype.toSplicedArray.prototype.with%TypedArray%.prototype.toReversed%TypedArray%.prototype.toSorted%TypedArray%.prototype.withes. namespace modules, /es/ and /stable/ namespaces entriesJSON.parse source text access Stage 3 proposal
JSON.parse patched for support source in reviver function argumentsJSON.rawJSONJSON.isRawJSONJSON.stringify patched for support JSON.rawJSONArrayBuffer.prototype.transfer and friends Stage 3 proposal:
ArrayBuffer.prototype.detachedArrayBuffer.prototype.transfer (only in runtimes with native structuredClone with ArrayBuffer transfer support)ArrayBuffer.prototype.transferToFixedLength (only in runtimes with native structuredClone with ArrayBuffer transfer support)ArrayBuffer.prototype.transfer, but without proper structuredClone, added ArrayBuffer transfer support to structuredClone polyfillAsyncIterator helpers, proposal-iterator-helpers/262InstallErrorCause removed from SuppressedError, January 2023 TC39 meeting, proposal-explicit-resource-management/145{ AsyncDisposableStack, DisposableStack }.prototype.use, proposal-explicit-resource-management/143Symbol predicates Stage 2 proposal
Symbol.isRegisteredSymbol.isWellKnownNumber.range Stage 1 proposal and method renamed to Iterator.rangeFunction.prototype.unThis Stage 0 proposal and method renamed to Function.prototype.demethodizeString.prototype.toWellFormed ToString conversion bugJSON.stringify symbols handling fixJSON.{ parse, stringify } bugs (numbers instead of strings as keys in replacer, handling negative zeroes, spaces, some more handling symbols cases, etc.)ToString conversion of some accessorsArrayBuffer and DataView methodsDataView and %TypedArray% polyfills optimizations= in the atob polyfillString.prototype.{ trim, trimEnd, trimRight }, parse(Int|Float), Number, atob, and URL polyfills in some ancient enginesRegExp.prototype.flags marked as fixed from V8 ~ Chrome 111core-js-builder`Set` methods proposal updates:
Set methods proposal updates:
Set-like objects on early exit, proposal-set-methods/85webpack dev server bug on IE global methods, #1161String.{ raw, cooked } error with empty template arrayError.captureStackTrace instead of stack parsing in new error classes / wrappers where it's possiblePromise.{ allSettled, any } feature detection, Hermes issueArray by copy proposal marked as supported from V8 ~ Chrome 110self marked as fixed in Deno 1.29.3, deno/17362core-js-bundleFixed a Chakra-based MS Edge (18-) bug that unfreeze (O_o) frozen arrays used as WeakMap keys
WeakMap keysString.dedent in MS EdgeThrows an error on non-frozen raw templates for avoiding possible breaking changes in the future, proposal-string-dedent/75
Iterator
Iterator.fromIterator.prototype.dropIterator.prototype.everyIterator.prototype.filterIterator.prototype.findIterator.prototype.flatMapIterator.prototype.forEachIterator.prototype.mapIterator.prototype.reduceIterator.prototype.someIterator.prototype.takeIterator.prototype.toArrayIterator.prototype.toAsyncIterator.prototype[@@toStringTag]AsyncIterator
AsyncIterator.fromAsyncIterator.prototype.dropAsyncIterator.prototype.everyAsyncIterator.prototype.filterAsyncIterator.prototype.findAsyncIterator.prototype.flatMapAsyncIterator.prototype.forEachAsyncIterator.prototype.mapAsyncIterator.prototype.reduceAsyncIterator.prototype.someAsyncIterator.prototype.takeAsyncIterator.prototype.toArrayAsyncIterator.prototype[@@toStringTag]/actual/ entries, unconditional forced replacement disabled for features that survived to Stage 3.from accept strings, .flatMap throws on strings returned from the callback, proposal-iterator-helpers/244, proposal-iterator-helpers/250.from and .flatMap throws on non-object iterators, proposal-iterator-helpers/253Set methods proposal:
Set.prototype.intersectionSet.prototype.unionSet.prototype.differenceSet.prototype.symmetricDifferenceSet.prototype.isSubsetOfSet.prototype.isSupersetOfSet.prototype.isDisjointFromSet-like objects as an argument, not all iterablesSets as this, no @@species support, and other minor changes/actual/ entries, unconditional forced replacement changed to feature detection/actual/ namespace)/full/ namespace), those methods are available with fallbacks to old semantics (in addition to Set-like, they accept iterable objects). This behavior will be removed from the next major releaseString.prototype.isWellFormedString.prototype.toWellFormed/actual/ entries, disabled unconditional forced replacementusing statement" and splitted into 2 (sync and async) proposalsSymbol.disposeSymbol.asyncDisposeSuppressedErrorDisposableStack
DisposableStack.prototype.disposeDisposableStack.prototype.useDisposableStack.prototype.adoptDisposableStack.prototype.deferDisposableStack.prototype.moveDisposableStack.prototype[@@dispose]AsyncDisposableStack
AsyncDisposableStack.prototype.disposeAsyncAsyncDisposableStack.prototype.useAsyncDisposableStack.prototype.adoptAsyncDisposableStack.prototype.deferAsyncDisposableStack.prototype.moveAsyncDisposableStack.prototype[@@asyncDispose]Iterator.prototype[@@dispose]AsyncIterator.prototype[@@asyncDispose]/actual/ namespace entries for Stage 3 proposalString.dedent stage 2 proposal
String.dedentreact-native target for React Native with bundled Hermes.oculus target was renamed to quest.opera_mobile target name is confusing since it contains data for the Chromium-based Android version, but iOS Opera is Safari-based. So opera_mobile target was renamed to opera-android.android target name is also confusing for someone - that means Android WebView, some think thinks that it's Chrome for Android, but they have some differences. For avoiding confusion, added chrome-android target.firefox-android target.oculus and opera_mobile fields are available in the compat data till the next major release.Array.fromAsync marked as supported from Bun 0.3.0String.prototype.{ isWellFormed, toWellFormed } marked as supported from Bun 0.4.0Array by copy proposal marked as supported from Deno 1.27, deno/16429{ Map, WeakMap }.prototype.emplace became stricter by the spec draft@@species pattern) of some .prototype methods from the new collections methods proposal and the Array deduplication proposal that most likely will not be implemented since it contradicts the current TC39 policyNumber constructor, #1154, #1155, thanks @trososset(Timeout|Interval|Immediate) extra arguments fix for Bun 0.3.0- (similarly to IE9-), bun/1633structuredClone, #1156Disabled forced replacing of Array.fromAsync since it's on Stage 3
Array.fromAsync since it's on Stage 3function-uncurry-this helper where it's not required - minor optimization and preventing problems in some broken environments, a workaround of #1141Array.prototype.{ group, groupToMap } in V8 ~ Chromium 108, proposal-array-grouping/44Moved to Stage 3, September TC39 meeting
Array.fromAsync proposal:
%Array.prototype.values% usage in array-like branch, proposal-array-from-async/30String.prototype.isWellFormedString.prototype.toWellFormedAsyncIterator helpers, proposal-iterator-helpers/239{ Iterator, AsyncIterator }.prototype.flatMap supports returning both - iterables and iterators, proposal-iterator-helpers/233.next in missed cases of { Iterator, AsyncIterator }.from, proposal-iterator-helpers/232self polyfill as a part of The Minimum Common Web Platform API, specification, #1118inverse option to core-js-compat, #1119format option to core-js-builder, #1120Fixed regression with an error on reuse of some built-in methods from another realm, #1133
Added a workaround of a Nashorn bug with Function.prototype.{ call, apply, bind } on string methods, #1128
Function.prototype.{ call, apply, bind } on string methods, #1128[Serializable] and [Transferable] objects in the structuredClone polyfill. Mainly, for better error messages if polyfilling of cloning such types is impossibleArray.prototype.{ group, groupToMap } marked as supported from V8 ~ Chromium 108Forced polyfilling of Array.prototype.groupToMap in the pure version for returning wrapped Map instances
Array.prototype.groupToMap in the pure version for returning wrapped Map instancesArray.prototype.{ findLast, findLastIndex } in /stage/4 entryConsidering document.all as a callable in some missed cases
document.all as a callable in some missed casessemver package (ironically) added a breaking change and dropped NodeJS 8 support in the minor `7.1` version, after that semver in core-js-compat was p…
sideEffects field to core-js-pure package.json for better tree shaking, #1117semver dependency from core-js-compat
semver package (ironically) added a breaking change and dropped NodeJS 8 support in the minor 7.1 version, after that semver in core-js-compat was pinned to 7.0 since for avoiding breaking changes it should support NodeJS 8. However, since core-js-compat is usually used with other packages that use semver dependency, it causes multiple duplications of semver in dependencies. So I decided to remove semver dependency and replace it with a couple of simple helpers.Added `Object.prototype.__proto__` polyfill
Object.prototype.__proto__ polyfill
document.all as an object in some missed cases, see ECMAScript Annex B 3.6%WrapForValid(Async)IteratorPrototype%.return, proposal-iterator-helpers/215.return in %IteratorHelperPrototype%.return, #1116value should be created before done).length settingArrayBuffer.length in V8 ~ Chrome 27-WeakMap for internal states with multiple core-js copiesFileList in the structuredClone polyfill extended to some more old engines versionsTypeError in core-js-compat / core-js-builder in case of passing invalid module names / filters for avoiding unexpected result, related to #1115esmodules core-js-compat / core-js-builder targetNodeJS is ignored in IS_BROWSER detection to avoid a false positive with jsdom, #1110
IS_BROWSER detection to avoid a false positive with jsdom, #1110@@species support in Promise in some old engines{ Array, %TypedArray% }.prototype.{ findLast, findLastIndex } marked as shipped in FF104Recent updates of the iterator helpers proposal, #1101:
.asIndexedPairs renamed to .indexed, proposal-iterator-helpers/183:
Iterator.prototype.asIndexedPairs -> Iterator.prototype.indexedAsyncIterator.prototype.asIndexedPairs -> AsyncIterator.prototype.indexed%AsyncFromSyncIteratorPrototype% in AsyncIterator.from and Iterator.prototype.toAsync, proposal-iterator-helpers/182, proposal-iterator-helpers/202%WrapForValidAsyncIteratorPrototype%.next, proposal-iterator-helpers/197%WrapForValid(Async)IteratorPrototype%.next, proposal-iterator-helpers/197 and proposal-iterator-helpers/205.next / .return to an underlying iterator by the extended iterator protocol, a part of proposal-iterator-helpers/194.throw methods removed from all wrappers / helpers prototypes, a part of proposal-iterator-helpers/194{ Iterator, AsyncIterator }.prototype.flatMap proxy iterators on .return, proposal-iterator-helpers/195RangeError on NaN in { Iterator, AsyncIterator }.prototype.{ drop, take }, proposal-iterator-helpers/181%TypedArray%.prototype.toSpliced method removed from the change array by copy proposal and marked as obsolete in core-js, proposal-change-array-by-copy/88Promise with unhandledrejection event support (browser style) in Deno < 1.24core-js-compat / core-js-builder and added compat data for them:
Fixed a typo in the structuredClone feature detection, #1106
structuredClone feature detection, #1106Added a workaround of the Bun ~ 0.1.1 bug that define some globals with incorrect property descriptors and that causes a crash of core-js
core-jsstructuredClone bugs (1774866 (fixed in FF104) and 1777321 (still not fixed)) that now can clone errors, but .stack of the clone is an empty string{ Map, WeakMap }.prototype.emplace logic, #1102Changed the order of operations in %TypedArray%.prototype.toSpliced following proposal-change-array-by-copy/89
%TypedArray%.prototype.toSpliced following proposal-change-array-by-copy/89Avoided creation of extra properties for the handling of %TypedArray% constructors in new methods, #1092 (comment)
%TypedArray% constructors in new methods, #1092 (comment)Fixed possible error on multiple core-js copies, #1091
core-js copies, #1091v flag to RegExp.prototype.flags implementation in case if current V8 bugs will not be fixed before this flag implementation`Array` find from last moved to the stable ES, according to June 2022 TC39 meeting:
Array find from last moved to the stable ES, according to June 2022 TC39 meeting:
Array.prototype.findLastArray.prototype.findLastIndex%TypedArray%.prototype.findLast%TypedArray%.prototype.findLastIndexArray grouping proposal renamed, according to June 2022 TC39 meeting:
Array.prototype.groupBy -> Array.prototype.groupArray.prototype.groupByToMap -> Array.prototype.groupToMap%TypedArray%.prototype.with following proposal-change-array-by-copy/86, according to June 2022 TC39 meetingSymbol.metadataKey replaces Symbol.metadataArray.prototype.push polyfill with some fixes for modern enginesArray.prototype.unshift polyfill with some fixes for modern enginesRegExp.prototype.flags in the actual version of V8Math and Number constantsArrayBufferDetaching protector cell invalidation and performance degradation on structuredClone feature detection, one more case of #679structuredClone that can not clone DOMException (just in case for future versions that will fix other issues)Fixed possible multiple call of ToBigInt / ToNumber conversion of the argument passed to %TypedArray%.prototype.fill in V8 ~ Chrome < 59, Safari < 14.
ToBigInt / ToNumber conversion of the argument passed to %TypedArray%.prototype.fill in V8 ~ Chrome < 59, Safari < 14.1, FF < 55, Edge <=18DeletePropertyOrThrow in IE9-TypeError instead of Error) on incorrect exec result in RegExp.prototype.test polyfill{ actual, full, features }/typed-array/at entriesAdded a workaround for V8 ~ Chrome 53 bug with non-writable prototype of some methods, #1083
Your coding agent can read these notes before it upgrades. Set up the MCP server →