- Workers (Historic)
- 2022-12-16
- 2022-12-02
- 2022-11-30
- 2022-11-17
- 2022-11-02
- 2022-10-21
- 2022-10-10
- 2022-09-16
- 2022-08-12
- 2022-07-08
- 2022-06-24
- 2022-06-18
- 2022-06-09
- 2022-06-03
- 2022-05-26
- 2022-05-19
- 2022-05-12
- 2022-05-05
- 2022-04-29
- 2022-04-22
- 2022-04-14
- 2022-04-08
- 2022-03-24
- 2022-03-17
- 2022-03-11
- 2022-03-04
- 2022-02-25
- 2022-02-18
- 2022-02-11
- 2022-02-05
- 2022-01-28
- 2022-01-20
- 2022-01-17
- 2022-01-07
- 2021-12-22
- 2021-12-10
Workers (Historic)
Last updated Apr 23, 2026 This page tracks changes made to Cloudflare Workers before 2023. For a view of more recent updates, refer to the current changelog.
2022-12-16
- Conditional
PUTrequests have been fixed in the R2 bindings API.
2022-12-02
- Queues no longer support calling
send()with an undefined JavaScript value as the message.
2022-11-30
- The DOMException constructor has been updated to align better with the standard specification. Specifically, the message and name arguments can now be any JavaScript value that is coercible into a string (previously, passing non-string values would throw).
- Extended the R2 binding API to include support for multipart uploads.
2022-11-17
- V8 update: 10.6 → 10.8
2022-11-02
- Implemented
toJSON()for R2Checksums so that it is usable withJSON.stringify().
2022-10-21
- The alarm retry limit will no longer apply to errors that are our fault.
- Compatibility dates have been added for multiple flags including the new streams implementation.
DurableObjectStoragehas a new methodsync()that provides a way for a Worker to wait for its writes (including those performed withallowUnconfirmed) to be synchronized with storage.
2022-10-10
- Fixed a bug where if an ES-modules-syntax script exported an array-typed value from the top-level module, the upload API would refuse it with a
500error ↗︎. console.lognow prints more information about certain objects, for example Promises.- The Workers Runtime is now built from the Open Source code in: GitHub - cloudflare/workerd: The JavaScript / Wasm runtime that powers Cloudflare Workers ↗︎.
2022-09-16
- R2
putbindings options can now have anonlyIffield similar togetthat does a conditional upload. - Allow deleting multiple keys at once in R2 bindings.
- Added support for SHA-1, SHA-256, SHA-384, SHA-512 checksums in R2
putoptions. - User-specified object checksums will now be available in the R2
get/headbindings response. MD5 is included by default for non-multipart uploaded objects. - Updated V8 to 10.6.
2022-08-12
- A
Headersobject with therangeheader can now be used for range withinR2GetOptionsfor thegetR2 binding. - When headers are used for
onlyIfwithinR2GetOptionsfor thegetR2 binding, they now correctly compare against the second granularity. This allows correctly round-tripping to the browser and back. Additionally,secondsGranularityis now an option that can be passed into options constructed by hand to specify this when constructing outside Headers for the same effect. - Fixed the TypeScript type of
DurableObjectState.idin @cloudflare/workers-types ↗︎ to always be aDurableObjectId. - Validation errors during Worker upload for module scripts now include correct line and column numbers.
- Bugfix, Profiling tools and flame graphs via Chrome’s debug tools now properly report information.
2022-07-08
- Workers Usage Report and Workers Weekly Summary have been disabled due to scaling issues with the service.
2022-06-24
wrangler devin global network preview mode now supports scheduling alarms.- R2 GET requests made with the
rangeoption now contain the returned range in theGetObject’srangeparameter. - Some Web Cryptography API error messages include more information now.
- Updated V8 from 10.2 to 10.3.
2022-06-18
- Cron trigger events on Worker scripts using the old
addEventListenersyntax are now treated as failing if there is no event listener registered forscheduledevents. - The
durable_object_alarmsflag no longer needs to be explicitly provided to use DO alarms.
2022-06-09
- No externally-visible changes.
2022-06-03
- It is now possible to create standard
TransformStreaminstances that can perform transformations on the data. Because this changes the behavior of the defaultnew TransformStream()with no arguments, thetransformstream_enable_standard_constructorcompatibility flag is required to enable. - Preview in Quick Edit now correctly uses the correct R2 bindings.
- Updated V8 from 10.1 to 10.2.
2022-05-26
- The static
Response.json()method can be used to initialize a Response object with a JSON-serialized payload (refer to whatwg/fetch #1392 ↗︎). - R2 exceptions being thrown now have the
errorcode appended in the message in parenthesis. This is a stop-gap until we are able to explicitly add the code property on the thrownErrorobject.
2022-05-19
- R2 bindings:
contentEncoding,contentLanguage, andcacheControlare now correctly rendered. - ReadableStream
pipeToandpipeThroughnow support cancellation usingAbortSignal. - Calling
setAlarm()in a DO with noalarm()handler implemented will now throw instead of failing silently. CallinggetAlarm()when noalarm()handler is currently implemented will return null, even if an alarm was previously set on an old version of the DO class, as no execution will take place. - R2: Better runtime support for additional ranges.
- R2 bindings now support ranges that have an
offsetand an optionallength, alengthand an optionaloffset, or asuffix(returns the lastNbytes of a file).
2022-05-12
- Fix R2 bindings saving cache-control under content-language and rendering cache-control under content-language.
- Fix R2 bindings list without options to use the default list limit instead of never returning any results.
- Fix R2 bindings which did not correctly handle error messages from R2, resulting in
internal errorbeing thrown. Also fix behavior for get throwing an exception on a non-existent key instead of returning null.R2Erroris removed for the time being and will be reinstated at some future time TBD. - R2 bindings: if the onlyIf condition results in a precondition failure or a not modified result, the object is returned without a body instead of returning null.
- R2 bindings: sha1 is removed as an option because it was not actually hooked up to anything. TBD on additional checksum options beyond md5.
- Added
startAfteroption to thelist()method in the Durable Object storage API.
2022-05-05
Response.redirect(url)will no longer coalesce multiple consecutive slash characters appearing in the URL’s path.- Fix generated types for Date.
- Fix R2 bindings list without options to use the default list limit instead of never returning any results.
- Fix R2 bindings did not correctly handle error messages from R2, resulting in internal error being thrown. Also fix behavior for get throwing an exception on a non-existent key instead of returning null.
R2Erroris removed for the time being and will be reinstated at some future time TBD.
2022-04-29
- Minor V8 update: 10.0 → 10.1.
- R2 public beta bindings are the default regardless of compat date or flags. Internal beta bindings customers should transition to public beta bindings as soon as possible. A back compatibility flag is available if this is not immediately possible. After some lag, new scripts carrying the
r2_public_beta_bindingscompatibility flag will stop accepting to be published until that flag is removed.
2022-04-22
- Major V8 update: 9.9 → 10.0.
2022-04-14
- Performance and stability improvements.
2022-04-08
- The AES-GCM implementation that is part of the Web Cryptography API now returns a friendlier error explaining that 0-length IVs are not allowed.
- R2 error responses now include better details.
2022-03-24
- A new compatibility flag has been introduced,
minimal_subrequests, which removes some features that were unintentionally being applied to same-zonefetch()calls. The flag will default to enabled on Tuesday, 2022-04-05, and is described in Workersminimal_subrequestscompatibility flag. - When creating a
Responsewith JavaScript-backed ReadableStreams, theBodymixin functions (e.g.await response.text()) are now implemented. - The
IdentityTransformStreamcreates a byte-orientedTransformStreamimplementation that simply passes bytes through unmodified. The readable half of theTransformStreamsupports BYOB-reads. It is important to note thatIdentityTransformStreamis identical to the current non-spec compliantTransformStreamimplementation, which will be updated soon to conform to the WHATWG Stream Standard. All current uses ofnew TransformStream()should be replaced withnew IdentityTransformStream()to avoid potentially breaking changes later.
2022-03-17
- The standard ByteLengthQueuingStrategy ↗︎ and CountQueuingStrategy ↗︎ classes are now available.
- When the
capture_async_api_throwsflag is set, built-in Cloudflare-specific and Web Platform Standard APIs that return Promises will no longer throw errors synchronously and will instead return rejected promises. Exception is given with fatal errors such as out of memory errors. - Fix R2 publish date rendering.
- Fix R2 bucket binding .get populating contentRange with garbage. contentRange is now undefined as intended.
- When using JavaScript-backed
ReadableStream, it is now possible to use those streams withnew Response().
2022-03-11
- Fixed a bug where the key size was not counted when determining how many write units to charge for a Durable Object single-key
put(). This may result in future writes costing one write unit more than past writes when the key is large enough to bump the total write size up above the next billing unit threshold of 4096 bytes. Multi-keyput()operations have always properly counted the key size when determining billable write units. - Implementations of
CompressionStreamandDecompressionStreamare now available.
2022-03-04
- Initial pipeTo/pipeThrough support on ReadableStreams constructed using the new
ReadableStream()constructor is now available. - With the
global_navigatorcompatibility flag set, thenavigator.userAgentproperty can be used to detect when code is running within the Workers environment. - A bug in the new URL implementation was fixed when setting the value of a
URLSearchParam. - The global
addEventListenerand dispatchEvent APIs are now available when using module syntax. - An implementation of
URLPatternis now available.
2022-02-25
- The
TextDecoderclass now supports the full range of text encodings defined by the WHATWG Encoding Standard. - Both global
fetch()and durable objectfetch()now throw a TypeError when they receive a WebSocket in response to a request without the “Upgrade: websocket” header. - Durable Objects users may now store up to 50 GB of data across the objects in their account by default. As before, if you need more storage than that you can contact us for an increase.
2022-02-18
TextDecodernow supports Windows-1252 labels (aka ASCII): Encoding API Encodings - Web APIs | MDN ↗︎.
2022-02-11
- WebSocket message sends were erroneously not respecting Durable Object output gates as described in the I/O gate blog post ↗︎. That bug has now been fixed, meaning that WebSockets will now never send a message under the assumption that a storage write has succeeded unless that write actually has succeeded.
2022-02-05
- Fixed bug causing WebSockets to Durable Objects to occasionally hang when the script implementing both a Worker and a Durable Object is re-deployed with new code.
crypto.getRandomValuesnow supports BigInt64Array and BigUint64Array.- A new implementation of the standard URL implementation is available. Use
url_standardfeature flag to enable the spec-compliant URL API implementation.
2022-01-28
- No user-visible changes.
2022-01-20
- Updated V8: 9.7 → 9.8.
2022-01-17
HTMLRewriternow supports inspecting and modifying end tags, not just start tags.- Fixed bug where Durable Objects experiencing a transient CPU overload condition would cause in-progress requests to be unable to return a response (appearing as an indefinite hang from the client side), even after the overload condition clears.
2022-01-07
- The
workers_api_getters_setters_on_prototypeconfiguration flag corrects the way Workers attaches property getters and setters to API objects so that they can be properly subclassed.
2021-12-22
- Async iteration (using
forandawait) on instances ofReadableStreamis now available.
2021-12-10
- Raised the max value size in Durable Object storage from 32 KiB to 128 KiB.
AbortSignal.timeout(delay)returns anAbortSignalthat will be triggered after the given number of milliseconds.- Preview implementations of the new
ReadableStreamand newWritableStreamconstructors are available behind thestreams_enable_constructorsfeature flag. crypto.DigestStreamis a non-standard extension to the crypto API that supports generating a hash digest from streaming data. TheDigestStreamitself is aWritableStreamthat does not retain the data written into it; instead, it generates a digest hash automatically when the flow of data has ended. The same hash algorithms supported bycrypto.subtle.digest()are supported by thecrypto.DigestStream.- Added early support for the
scheduler.wait()API, which is going through the WICG standardization process ↗︎, to provide anawait-able alternative tosetTimeout(). - Fixed bug in
deleteAllin Durable Objects containing more than 10000 keys that could sometimes cause incomplete data deletion and/or hangs.
