Chameleon makes it easy to create, deploy, and manage in-product Experiences. We are built for browser-based web applications and rely on JavaScript to show the Experience. 

We are aware that each product is architected uniquely and our goal is to support all common technologies. Nevertheless, please refer to the items below to help ensure a successful implementation.

For any further questions, feel free to email us ✉️


Chameleon supports all modern browsers, including Google Chrome, Mozilla Firefox, Apple Safari, and Microsoft Edge, for showing users product Experiences. However, for building product Experiences, we recommend using Chrome. 

We have ended support for Internet Explorer in light of its discontinued support from Microsoft.

If you have users using any version of Internet Explorer, you can select to not show them Experiences, by using our audience targeting/user segmentation functionality

Note: If you think Chameleon is not rendering correctly on any specific browser, please send us a screenshot so we can take a deeper look into the underlying issue.

Mobile web and mobile apps

Chameleon supports mobile web. Experiences are built to be responsive and will adjust as elements on your page move based on the browser size. However, at this stage, Chameleon does not support native mobile applications. 

👉 Learn more about how to enable Chameleon for mobile web.

Single-page apps (SPAs) and front-end frameworks

Chameleon supports SPAs and all common front-end frameworks (e.g. React, Angular, Ember, Vue, etc.) out-of-the-box and does not require any special engineering work. Simply implement our JavaScript code snippet or integrate it via

👉 Learn more about the different installation options

Chameleon requires an initial page load to identify users and then polls regularly to check whether a tour should show based on changing criteria (page URL or user activity).

There is no separate implementation work required for single-page applications.

Multiple products and environments

You can use Chameleon with different products or with different environments (with different domains).

To do so, simply install Chameleon using your same unique code snippet across all these products and environments. You can then specify which step should show on which product/environment by configuring the URL within the Trigger section for that step. 

Any account-level styling and configurations for your Chameleon account will apply across all these domains. This includes the admins on your account being able to access Experiences.

For billing, we will use the total uniquely identified users across all domains to calculate your total MAU count.

👉 Know more about managing multiple domains and subdomains

Dynamic URLs and multiple subdomains

Chameleon supports dynamic URLs and multiple subdomains (e.g. for your different customers) for your application.

You can use wildcard or regex matching to configure any step to a specific URL. You can also substitute any part of the URL with the specific user data, by using variables. This is akin to using merge tags to replace a part of a string with the specific content for that user.

👉 Learn more about personalization using merge tags

You can use a similar approach to handle personalized subdomains. If you change your subdomains by customer name, then we encourage you to send this part of the URL as a company attribute.

👉 Learn how you can send user properties


Chameleon allows you to build Experiences across any IFrames you might have in your application.

To guarantee ideal performance, please ensure that the Chameleon code snippet is implemented separately within each IFrame component. Having IFrames load content from the same subdomain as the top-level page makes the process more simple and seamless. Also, ensure that the IFrame element does not use the sandbox attribute

👉 Understand how to enable Chameleon to work across your IFrames

Anonymous users

Chameleon partly supports anonymous (unidentified) users, but does not yet support aliasing.

To show Experiences to users who are not logged in to your product - and therefore not identified - you need to identify this user by using any UID; although, this UID does not need to correlate with any actual IDs from your database.

Note: We do anticipate supporting automatic identification and aliasing of anonymous users soon. Feel free to drop us an email if this is important to you! ✉️

👉 Know more about how to make Chameleon work for anonymous users

Strict security standards

Chameleon takes security very seriously and we seek to continually improve our systems with the most cutting-edge techniques to guard against any attacks or unauthorized access.

We use best-in-class cloud services (such as AWS, Heroku, Compose) and serve over HTTPS using 256 bit SSL encryption.

👉 Read more about our security practices

Chameleon does not collect any personally identifiable data by default (we track user agent, IP address, and URLs). We store any data you send to us (including from events that you define within Chameleon) but we're not currently HIPAA certified. 

If your application contains a Content Security Policy (CSP) to limit which third-party code may be executed on the pages of your application, then you must whitelist our domains in order to enable Chameleon to function correctly.

👉 Know how to add Chameleon to your CSP

Multilingual support

Chameleon supports multiple languages in two different ways:

  1. By manually duplicating Experiences for different languages and targeting them based on user properties (e.g. browser language).

  2. Using liquid logic to pipe in variable content for each user and displaying that in the same Experience.

👉 Learn more about how to work with different languages

Did this answer your question?