To debug components, you'll need to be using them in a xap. Users tend to tackle debugging in one of two ways:

  • They have two tabs open, one with the component editor and the other with the dataflow.
  • They just have the dataflow open, and they open the component editor from within the dataflow by hovering over the component and clicking the pencil icon.

It is also useful to have the xap running in a separate tab or window.

This article will introduce you to the tools you have for debugging components.

Browser Developer Tools (for Javascript Components)

You can use the debug tools built into your choice of browser to debug client-side components at runtime. Add the following query string to your URL of the xap to enable debug mode. 


Debug mode will send the client side component scripts back either under the `exaptive/component` or `exaptive/studios/{{Your Studio}}/component` directories depending on where you are running the Xap. Without debug mode enabled you still will have access to the component scripts but they will be identified by UUID, where as in debug mode they are identified by name_UUID.

After enabling debug mode you are able to use the debug tools that come with your choice of browser like normal (making use of breakpoints, logs, etc).

Xap Error Log

While building or editing a Xap, you can open the xap's log. 


Log, Error, and Warning Functions in the Component Script

For each type of component you might be building - Javascript, Python, or R - there are functions for sending messages with values to the xap log.


this.api.log(msg, [value]);

this.api.warning(msg, [value]);

this.api.error(msg, [value]);



  1. msg {String}: The message to log.
  2. value {*}: An optional value to log with the message.



this.api.log("This is a log")

// With values
self.api.log("This is a log", 1)
self.api.log("This is a log", this.value.integer(1))




self.api.log(msg, [value])

self.api.warning(msg, [value])

self.api.error(msg, [value])



  1. msg {str}: The message text.
  2. value {*}: An optional value to log with the message. 



self.api.log("This is a log")

# With values
self.api.log("This is a log", 1)
self.api.log("This is a log", self.value.integer(1))




self$api$log(message[, value])

self$api$warning(message[, value])

self$api$error(message[, value])




  1. message {character}: The message to log. If a non-character is passed, it is cast to a character vector with 'as.character()' and collapsed with 'paste()'.
  2. value {*}: Optional. A value to include in the log.