Back to blog
November 26, 2023

Introducing Workflows and a New Starter 🌱 Edition in SaasRock v0.9.2

  • Name
    Alexandro Martínez
Introducing Workflows and a New Starter 🌱 Edition in SaasRock v0.9.2

Introducing Workflows and a New Starter 🌱 Edition in SaasRock v0.9.2

Hey there! With SaasRock Workflows in the fresh v0.9.2 release, tackling complex tasks just got a whole lot easier with no-code. Also, a new Starter edition has been released!

TLDR: Watch a demo.

Summarizing the v0.9.2 release:

Why is this not v1.0 yet? Help Desk and Affiliates are the 2 missing features. But in order to build Help Desk, I needed to build a workflow engine first.


  • Blocks: Triggers and Actions.

  • Variables and Credentials: Global variables and encrypted credentials.

  • Executions: A single run of a Workflow.

  • Workflow Context: Inputs and Outputs within a workflow execution.

Execution Modes

Choose between different modes for triggering a workflow:

  • Manual: Manually trigger a Workflow.

  • API 🪨: Use the API to trigger a Workflow @ /api/workflows/run/$id.

  • Stream 🚀: Get updates from a stream (chat-like).

Tenants/Accounts can also create and run their own Workflows 🪨.

Workflow Features

There are 4 workflows editions:

See the full feature comparison in the following table.

Screenshot 2023-11-25 at 20.42.35.png

Workflow Blocks


  • Manual: By clicking a button

  • Row Event 🚀: created, updated, deleted


  • IF: True and False paths

  • HTTP Request: Set method, URL, Body, and Headers

  • Log: Logs to system

  • Alert User: Sends alert to current user

  • Switch 🪨: Default, case1, case2... etc, paths

  • Iterator 🪨: For loop using a variable

  • Variable 🪨: Set a context variable

  • Wait for Input 🚀: Waits for user input (support in Manual, API, and streaming)

  • GPT Chat Completion 🚀: Call OpenAI API

  • Row Get 🚀: Create an entity row

  • Row Create 🚀: Create an entity row

  • Row Update 🚀: Update an entity row

  • Row Delete 🚀: Delete an entity row

Plus, on the Enterprise Edition 🚀, I'll work on (long-term):

  • Crons support (Sleep, Delayed until...)

  • Send Emails

  • Global workflows (create a workflow in the admin dashboard for all tenants)

  • Advanced Workflow Analytics (i.e. percentages paths in a funnel)

Variables and Credentials

Sometimes it's useful to have a global state. For example, you may have multiple GPT blocks across many workflows, and if there's a new model released, you could create a variable {{$vars.gptModel}}.

In the case of credentials 🚀, the only difference between them is that they're encrypted before storing and decrypted before using it, click here to see the method.

Workflow Context

A workflow execution will always have an output similar to this:

  "$params": {},
  "$session": {
    "tenant": {},
    "user": {},
  "$vars": {},


  • $params: Every execution starts with a JSON input

  • $session.tenant: If the execution is on the admin side, it's null

  • $session.user: If the execution is not started manually by a user, it's null

  • $vars: Global variables are injected

Finally, each executed block will have a value with the block name. For example, the following output is from the "GPT Simulator" workflow template.

  "$params": {},
  "$session": { "tenant": null, "user": null },
  "$vars": {
    "gptModel": "gpt-3.5-turbo"
  "waitForInput": {
    "input": "Hi"
  "if": {
    "condition": false,
    "expression": "{{waitForInput.input}} Equals bye"
  "gpt": {
    "result": "Hello! How can I assist you today?"

Using Variables

Since the workflow context has everything you need from the workflow execution, you now can access values from previous blocks. Using the previous example:

  • {{gpt.result}} will be "Hello! How can I assist you today?"

  • {{$session.tenant}} will be an empty string

  • {{$credentials.OPENAI_API_KEY}} will decrypt the value on the fly and destroy it

This is possible thanks to Handlebars.js.

Workflow Templates

I created a few templates that use every supported block, some of them are Core and/or Enteprise-only.

Screenshot 2023-11-25 at 18.50.51.png

Input Examples

While building and testing your workflows, it's useful to set a few input examples instead of having to type the input body every time. For example:

  • Existing item: The input is { id: 10 }, so you know the workflow must go through the success path

  • ID parameter not provided: This tests that the initial execution (manually, via the API or in streaming mode) is sent correctly.

And so on.

Input Validation

The Manual Trigger has a special "validation" field that receives a JSON configuration. This validates the schema using Ajv JSON schema validator:

  "type": "object",
  "properties": {
    "id": {
      "type": "number"
  "required": [

You can create any necessary validation schema to ensure the correct execution of a workflow.

I hope you're as excited as I am for workflows!

Let me know what you think on the Discord server or subscribe to my newsletter to get notified on new saasrock features.

We respect your privacy.

This website uses cookies to help personalize your online experience. Learn more.