Workers (Historic)
This page tracks changes made to Cloudflare Workers before 2023. For a view of more recent updates, refer to the current changelog.
- Conditional
PUT
requests have been fixed in the R2 bindings API.
- Queues no longer support calling
send()
with an undefined JavaScript value as the message.
- 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.
- V8 update: 10.6 → 10.8
- Implemented
toJSON()
for R2Checksums so that it is usable withJSON.stringify()
.
- 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.
DurableObjectStorage
has a new methodsync()
that provides a way for a Worker to wait for its writes (including those performed withallowUnconfirmed
) to be synchronized with storage.
- 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
500
error ↗. console.log
now 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 ↗.
- R2
put
bindings options can now have anonlyIf
field similar toget
that 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
put
options. - User-specified object checksums will now be available in the R2
get/head
bindings response. MD5 is included by default for non-multipart uploaded objects. - Updated V8 to 10.6.
- A
Headers
object with therange
header can now be used for range withinR2GetOptions
for theget
R2 binding. - When headers are used for
onlyIf
withinR2GetOptions
for theget
R2 binding, they now correctly compare against the second granularity. This allows correctly round-tripping to the browser and back. Additionally,secondsGranularity
is 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.id
in @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.
- Workers Usage Report and Workers Weekly Summary have been disabled due to scaling issues with the service.
wrangler dev
in global network preview mode now supports scheduling alarms.- R2 GET requests made with the
range
option now contain the returned range in theGetObject
’srange
parameter. - Some Web Cryptography API error messages include more information now.
- Updated V8 from 10.2 to 10.3.
- Cron trigger events on Worker scripts using the old
addEventListener
syntax are now treated as failing if there is no event listener registered forscheduled
events. - The
durable_object_alarms
flag no longer needs to be explicitly provided to use DO alarms.
- No externally-visible changes.
- It is now possible to create standard
TransformStream
instances that can perform transformations on the data. Because this changes the behavior of the defaultnew TransformStream()
with no arguments, thetransformstream_enable_standard_constructor
compatibility flag is required to enable. - Preview in Quick Edit now correctly uses the correct R2 bindings.
- Updated V8 from 10.1 to 10.2.
- 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
error
code appended in the message in parenthesis. This is a stop-gap until we are able to explicitly add the code property on the thrownError
object.
- R2 bindings:
contentEncoding
,contentLanguage
, andcacheControl
are now correctly rendered. - ReadableStream
pipeTo
andpipeThrough
now 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
offset
and an optionallength
, alength
and an optionaloffset
, or asuffix
(returns the lastN
bytes of a file).
- 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 error
being thrown. Also fix behavior for get throwing an exception on a non-existent key instead of returning null.R2Error
is 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
startAfter
option to thelist()
method in the Durable Object storage API.
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.
R2Error
is removed for the time being and will be reinstated at some future time TBD.
- 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_bindings
compatibility flag will stop accepting to be published until that flag is removed.