We added JavaScript support in July'21 for destinations table name selection and webhooks body composition. But we didn't plan to stop there. As of today, we are happy to announce an expansion of JavaScript support in Jitsu: JavaScript Transform comes as a modern and flexible replacement of the Mapping feature.
The Mapping feature with its predefined set of rules served well but has some shortcomings:
- Complicated – each mapped field requires its UI block, making any rich mapping setup too bloated and very hard to manage.
- Not flexible – having just four rule types (move, remove, cast, and constant) significantly limits what one can do with the data.
- Not applied by default – some destination that relies on mapped data (e.g., Google Analytics or Facebook marketing) requires a user to manually apply the appropriate mapping template.

JavaScript Transform solves all this and brings more to the table:
- Even complicated mapping now can fit a single screen.
- The power and flexibility of the JavaScript language allow computing new objects or fields based on incoming event data.
- Given the nature of JavaScript object creation, Transform code may represent the resulting data structure in an obvious form:
const context = $.eventn_ctx || $
const user = context.user || {}
const conversion = context.conversion || {}
return {
event_name: $.event_type,
event_id: context.event_id || $.eventn_ctx_event_id,
event_source_url: context.url,
user_data: {
client_ip_address: $.source_ip,
em: user.email,
client_user_agent: context.user_agent,
},
custom_data: {
currency: conversion.currency || $.currency,
value: conversion.revenue || $.revenue,
},
}
In the UI version of Jitsu new Google Analytics, Facebook, and Amplitude destination setups now have the appropriate Transform function initially enabled.
New to Javascript Transform#
The following features weren't possible with the previous Mapping implementation:
- Producing Multiple events based on data of a single incoming event.
- Selecting a destination table or skipping an event
- Using predefined variables and functions
Event multiplexing#
Let's say Jitsu receives a conversion event with multiple products added to the shopping cart. Now it is possible to break this event into a set of purchase events - one for each product.

Selecting a destination table or skipping an event#
Select destination table with ease by setting one special property of resulting event:
return { ...$, JITSU_TABLE_NAME: "new_events" }
to skip event from processing, simply return null
Using predefined variables and functions#
Your transformation code is executed in a context where Jitsu puts some extra constants and functions that you may use:
- destinationId – constant containing id of current destination
- destinationType – constant containing type of current destination (e.g., facebook, google_analytics)
- toSegment(event) – the function that transforms event to make it compatible with segment data schema (part of Segment Compatibility)
- toGoogleAnalytics(event), toFacebook(event), toAmplitude(event) – builtin transform functions for corresponding destinations. In the UI version of Jitsu enabled by default for new destinations setup.
Improved Code Debugger#
As you may already notice on the screenshot above, we have significantly improved our Code Debugger UX. It now enables code completion based on loaded event data. It is the only instrument you need to write and debug transformation code for your data.
Learn More#
- Read more in the documentation.
- Follow us on Twitter to get updates on further expansions of Javascript support.
- Follow & star Jitsu on GitHub
- Try a cloud version of Jitsu. It's free for up to 250,000 events per month
- Join our Slack! Our community will help you with any questions!