What's New in CSML v1.5.0
Tags: programming, chatbots, ai, automation
Published: 2021-03-20 18:12:30

We just released [CSML v1.5.0](https://github.com/CSML-by-Clevy/csml-engine/releases/tag/v1.5.0)! 🎉  Let's have a quick look together at some of the highlights of this release...

## Crypto Utils
Most systems nowadays require some sort of specific authentication or encoding to communicate securely. In this release, we introduced support for Base64 and Hex encoding/decoding, creating and validating JWTs, as well as hashing and HMAC functions.

Here are some examples of what you can do with the new Crypto utils:

```cpp
say Crypto("Hello World 😆").create_hash("sha256").digest("hex")

do JWT(jwt).verify(claims, "HS256", "SECRET_KEY")

do auth = Base64("user:password").encode()
do HTTP("https://example.com")
  .set({ "Authorization": "Basic {{auth}}" })
  .send()
```

👉 [Link to the documentation](https://docs.csml.dev/language/standard-library/crypto)

## Dynamic Steps and Flows

Dynamically navigating to other steps and flows was quite hard and cumbersome to achieve until today. It usually required a long list of `if (x) goto y` in your code, similar to [this example](https://github.com/Owlie-le-Chatbot/Owlie/blob/main/flows/Default.csml).

Now, you can use the new $ syntax used for referencing variables in flow and step names instead: `goto $stepname@$flowname`. This helps make code much more concise and reusable!

Using dynamic steps and flows, the example from above can easily be refactored like so:
```cpp
// redirect to a random flow in a list of possible targets
do flows = ["flowA", "flowB", "flowC"]
do targetFlow = OneOf(flows)

goto flow $targetFlow
```

👉 [Link to the documentation](https://docs.csml.dev/language/standard-library/crypto)

## Bot Environment Variables

Efficiently and securely storing and accessing bot-wide variables (such as API keys, default configuration values, etc.) was quite difficult to do until now in CSML, since it usually required either writing these variables in clear text in many places in your bot, or replicating them in each user's memory.

With the new `_env` global read-only variable, you can access bot-wide environment variables everywhere in your bot, without ever needing to remember them or replicating the value written in clear text anywhere in the bot.

For instance, if the bot communicates with a 3rd-party API, you can store this value under `MY_API_KEY` and use it anywhere in the bot with `_env.MY_API_KEY`.

👉 [Link to the documentation](https://docs.csml.dev/language/memory/global-variables)

# CSML Studio Updates

CSML Studio also received some love with the latest update. Here are some of our favorite new features!

## Introducing: Bot Snapshots

It is a good practice to never work directly on your production code, in order to avoid impacting your end users when updating your code. This is why we just introduced Bot Snapshots: you can think of snapshots as git tags or github releases for your chatbot.

Using Snapshots, you can easily create tagged versions of your bot, pin them to your production channels as to not risk any disruption during development, or revert your code to a previous version at any time!

![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z3j6iuai0eyg7xdhozbq.png) 

## New Bot Sharing Experience

In the latest release of CSML Studio, we changed the way you can share bots with other users. You can now share any individual bot with any user, rather than all of your bots with a group of users who will also share their bots with you in return.

This is especially useful if you are working on bots that you need to share with different sets of users. For instance, if one team is working on a bot and another team is working on a different bot, you can now work on both bots without creating 2 separate accounts or giving access to both bots to both teams.

To invite a user or revoke someone's access to a bot, visit your bot's **Settings > Team > Manage team**.

![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dudqgdkup7mjggrah2hb.png)

In an upcoming release, we will also introduce roles, with differentiated access rights to each bot. Stay tuned!

## Other Improvements!

In this latest update, we also released:
- a brand new IDE with better support for CSML language, autocompletion and syntax highlighting 👩‍💻
- a new "Sign-in with facebook" button to make it easier for facebook users to create a free [CSML Studio](https://studio.csml.dev) account 🔑
- a standardized experience for NLU-enabled chatbots — check the details here 💬
- ... and also a lot of little tweaks and bugfixes 🤓

All these new features are already live on [CSML Studio](https://studio.csml.dev). Try them out today and let us know what you think!