> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://akamai.ferndocs.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://akamai.ferndocs.com/_mcp/server.

# Release notes

## Monitor overview and Reports improvements

The [Monitoring](doc:about-monitoring) section now includes a table that summarizes each of the options available to help you gain insight about the performance of your EdgeWorkers functions. This overview can help you, for example, decide if you want to deliver [JavaScript logs](doc:enable-javascript-logging) via [Enhanced debug headers](doc:enable-javascript-logging#use-enhanced-debug-headers-to-view-javascript-logs)  or a [DataStream 2 stream](doc:ds2-javascript-logging).

You'll also find the following improvements to the built-in [EdgeWorkers Reports](ref:reports-1).

- Resolved an issue that caused inconsistent date displays on graphs.
- Applied consistent terminology when referring to Execution time and CPU time.
- Improved filtering when selecting EdgeWorker IDs and versions.
- Applied consistent timezones in date pickers and graphs.
- Reports are now loaded by default when least one EdgeWorker ID is selected in the report filters.
- Added a Report overview to the EdgeWorker ID listing table.

## New validation details for activations

If validation fails when activating an EdgeWorker version, details about the error are now provided in the UI.

When creating the first version of a new EdgeWorker ID, you can now see the default [configuration options](doc:manage-edgeworkers##code-bundle-configuration-settings)  when you open the `bundle.json` file in the [Code bundle editor](doc:code-bundle-editor).

## Dynamic reactivation disabled by default

[Flexible composition](doc:flexible-composition) lets you create and deploy multiple EdgeWorkers for the same website. You can enable dynamic reactivation when you [activate a parent EdgeWorker](doc:manage-edgeworkers#activate-an-edgeworker-version) by disabling the auto pin option.

By default, the initial revision created when you activate the parent EdgeWorker is pinned. Pinning prevents dynamic reactivation.

## Support for response.getHeaders

The [getHeaders()](doc:response-object#getheaders) method for the Response Object is now available to return a JavaScript object that contains all HTTP response headers as properties. You can use the [getHeaders()](doc:response-object#getheaders) method on the `onOrigin Response` and `onClient Response` event handlers.

## Support for OPTIONS HTTP method

The EdgeWorkers event handlers now support the OPTIONS HTTP method. To use the OPTIONS method you need to add the `PMUSER_EW_ENABLE_OPTIONS` variable to your rule and set the value to `true`. The name of the variable must be UPPERCASE.

## New clientIp property for the Request Object

The request object now supports the [`clientIp`](doc:request-object#clientip) property. You can use it to get the original client IP address that can be either IPv4 or IPv6.

## Override default JavaScript log level

Now when you deliver JavaScript logs to an external endpoint using a DataStream 2 stream you can use the EdgeWorkers Management application to [override the default log level](doc:manage-edgeworkers#override-the-javascript-log-level).

## Flexible composition beta exit & CLI support

Flexible composition is now available to use without having to join the Beta program.

The [EdgeWorkers CLI](https://github.com/akamai/cli-edgeworkers) now supports flexible composition via the following new commands:

- `list-revision-activations`
- `activation-revision`
- `download-revision`
- `get-revision-bom`
- `get-revision`
- `list-revisions`
- `compare-revisions`
- `pin-revision`
- `unpin-revision`

## Deliver JavaScript logs via DataStream 2

You can now use a DataStream 2 stream to deliver JavaScript logs to an external endpoint. You can also set the log-levels for the logs sent via DataStream 2.

For more information, go to the [Use DataStream 2 to deliver JavaScript logs](doc:javascript-logging) tutorial.

## Static revisioning support for flexible composition

You can now import a specific Revision ID, instead of the active version, of a child into a parent EdgeWorker. If the owner of the child EdgeWorker continues to activate new versions of the child your dependency tree will not import these changes. This lets you freeze the dependency tree for a particular child if that tree is triggering unneeded revisions. To learn more see, [Import a static revision](doc:review-a-static-activation).

## subWorkers

You can now use subWorkers to make HTTP requests to EdgeWorkers on different properties or different accounts.

subWorkers let you divide the work and responsibilities for large projects amongst different teams. Each team can own a separate EdgeWorker, deploy it on different schedules, and use their preferred tool chains. You can also use subWorkers to share the results of computation across accounts and use Akamai optimizations to cache or accelerate a sub-request.

To learn more see, [Create a subWorker](doc:create-a-subworker) and [Fragment generation using subWorkers](doc:subworkers-tutorial) in this guide.

## ESI support on the enhanced TLS network

You can now configure an EdgeWorkers function to execute via an [ESI (Edge Side Includes)](https://techdocs.akamai.com/property-mgr/docs/esi-edge-side-includes) fragment request on the enhanced TLS network. 

To execute EdgeWorkers from an ESI fragment, add the  `PMUSER_ENABLE_EW_ESI_FRAG` [user-defined variable](https://techdocs.akamai.com/property-mgr/docs/user-defined-vars) to your rule and set it to `true`. The name of the variable must be UPPERCASE.

> 📘 
> 
> The user-defined variable is not required if you are using the Standard TLS delivery method. ESI is supported on the standard TLS network.

## Change to PMUSER_BYPASS variable behavior

All EdgeWorkers PMUSER_BYPASS variables are now evaluated at the stage that corresponds to the event handler. For example, PMUSER_BYPASS_EW_CLTREQ_EVENT is now evaluated in `onClientRequest`. Previously the PMUSER_BYPASS variables were all evaluated at the `content-policy` metadata stage regardless of the event handler invoking the request. 

> 📘 
> 
> This change occurred on January 31, 2024. You should review any rules created before this date that use the PMUSER_BYPASS variable to see if you need to make any adjustments.

You can find more information about BYPASS variables in the [EdgeWorkers event model](doc:event-handler-functions) section of this guide.

## Log level support for JavaScript logs

You can now specify the severity of the logging messages included in the [JavaScript logs](doc:enable-javascript-logging). For more information go the [log](doc:log) built-in module.

## Update to Standard TLS support

You no longer need to contact your Akamai representative to opt-in to this feature.

Standard TLS, used to serve non PCI compliant traffic over HTTPS via an edgesuite.net edge hostname, is supported as a delivery method for EdgeWorkers.

## Flexible Composition Beta

Flexible composition lets different development teams within an organization work separately to create and deploy multiple EdgeWorkers for the same website.

Now, two or more EdgeWorkers can handle a single request. You can create and deploy code bundles that include dependencies defined in the `bundle.json` file. To learn more and for instructions on how to get started, go to the [Flexible composition](doc:flexible-composition) section in this Guide or check out the [EdgeWorkers APIs](ref:get-revisions), also available in beta.

To join the **Flexible Composition Beta program**, contact your Akamai representative.

## get Headers() event handler support

The [getHeaders()](doc:request-object#getheaders) method for the Request Object now supports all EdgeWorkers event handlers.

## New watermarking and cwt built-in modules

A built-in  [watermarking](doc:watermarking) module is now available to use in your EdgeWorkers functions. You can use it to watermark Over-The-Top (OTT) content delivered in an Adaptive Bitrate (ABR) format. This watermarking solution currently doesn’t support interoperability with partial object caching. Please reach out to your account team if you require partial object caching.

We also added the [cwt](doc:cwt) module that lets you create, sign, and verify CWT tokens. The [watermarking](doc:watermarking) module supports cwt for token verification.

## mPulse error reports for EdgeWorkers

You can now view EdgeWorkers error reports in the mPulse **App Error List **and **App Error Summary** dashboards. These reports include data about EdgeWorkers errors generated due to JavaScript errors. You can also find additional information in the form of a JavaScript stack trace. To learn more, go to the [Integrate mPulse reports](doc:mpulse) section in this guide.

## Support for the sign() method in the crypto module

The built-in [crypto](doc:crypto) module now supports the [sign()](doc:crypto#sign) method that you can use to generate digital signatures.

_Showing the 20 most recent of 56 entries. Append `/llms.txt` to the changelog URL for the complete index._