Release notes

We are always thinking of new ways to help our clients. Here is an outline of what we've changed in our latest releases. For a full list of changes, go to the help section in your Rulecube environment.

Version 2.6 - Q2 2026

New features

This release delivers a wide set of improvements and new capabilities to improve the ease of use and flexibility for both users and managers. This touches Forms, Workflow and data management.

The release also delivers many improvements aimed to improve the overall performance of the Rulecube platform.

Internal data source

With this release you have access to a new Data Source Type: Internal (Functions). This allows you to connect any Form directly to your own Ruleset functions to fetch, add, edit or delete custom data, no external data source required. This allows you to present information in a way that is more comprehensible for your audience, present relative data (only x days left, you are at y% of your savings goal) or offer an indication of expected outcome without polluting your database with insignificant data.

New capabilities for Persisted Entities

We’ve added several new capabilities for Persisted Entities.

The new Entity.createFilterBuilder() method makes it easier and cleaner to build queries for operations like .getAll().

Ownership of Persisted Entities can now be transferred to another user or role.

The role-based access model for Persisted Entities has been extended with additional filtering options, enabling support for complex, multi-layered access models.

Improvements

Rulesets

  • Improved error message on execution when the engine is not available
  • When using lookup() on a constant table that is just a simple key/value table, the key column can be used to perform the lookup
  • When losing connection in a ruleset, your changes are restored upon refresh
  • Constant table: added button to shift the 'key' column to the right as a new value column
  • The last modified date is now updated after an import of an existing ruleset
  • Search now finds in Library aliases as well
  • Services page now has a section to view the connections between all rulesets
  • Diagnostics are now limited in size (10K per argument to console.log/warn/error methods)

Workflows

  • A warning is now shown when an Input is used in a step other than the Start step
  • The default Retention policy can now be configured in Workflow settings. This means that after a given number of days, a completed workflow instance will be deleted
  • Admins can finish/delete dangling tasks
  • Users can now access workflow instances that they started themselves

Forms

  • Form action lists + new actions: RunActionList and SetActionVariable
  • Input labels and field widths can now be customized on form-, page-, section- and element-level
  • Width types from 1/12 to Full are now supported in Section widths and Input labels and fields
  • Dynamic content is now supported in Data source filter values
  • Smart merge of persisted entities: when a user edits a persisted entity and saves it, only the changed properties will be saved. This makes working collaboratively on the same entity in a Form much safer and significantly reduces the risk of overwriting changes made by other users
  • Conditional visibility styling changes when Not and Strict are on/off
  • Added global _IsValid var that represents the validity of the form. Can also be accessed programmatically in e.g. Template code as state.isValid
  • Improved search, searches deep inside any type of form element
  • Sub Forms and Data sources now show their usage in the form, and unused ones are detected and marked with a grey warning icon
  • Extra custom classes for setting width and min/max widths on elements: w-50px, w-100px, w-min-200px, w-max-250px etc. (all the way from _-50px to _-2500px, with increments of 50)
  • Template element: added 'On destroy' lifecycle event
  • In Template code, state.executeRuleSetFunction() and state.executeLibraryFunction() can now be used
  • Autocompletion / intellisense in Template code!
  • Template code no longer requires this.x to reference its own properties/functions/computeds
  • Template function parameters can now be defined
  • Dialog buttons will now be hidden entirely instead of showing the default 'OK' button if all of them are invisible
  • Persisted entity filter builder: Entity.createFilterBuilder() to make building queries for e.g. .getAll() much easier
  • Persisted entity data sources now support filters with meta props (ID)
  • When a data source is invalid, it will be detected by the compiler (unknown entity, wrong library, etc.)
  • Display currency symbols for Currency inputs in Table columns
  • Improved Charts default styling
  • Create action list from existing (copy and move)
  • Table actions: access the created/edited/deleted item via actionContext.item in actions
  • Collapse's Title property now supports accessing its open state in dynamic content
  • Redirecting to another page from a Page's on-enter actions is now supported
  • Any executed ruleset / ruleset function diagnostics are now logged to the Dev Console in preview mode
  • Tables now support conditional visibility on columns
  • Execution failures are no longer shown with technical information in toast messages
  • Table with columns bound to Template elements can now be sorted (Template elements in subforms can have their path configured now)

Persisted entities

  • The Entity ID is shown in a column and in an instance's details
  • Instances can now be sorted by Created and Modified and by default the most recently created instances are shown first
  • Persisted entities can now be exported and imported from the Data page
  • An "Additional filter" can now be defined for a persisted entity. This is code that should return an entity filter. This filter is applied when, e.g., entities are fetched
  • Persisted entities' methods now support elevation
  • Ownership can now be transferred
  • Search is now supported in the Persisted entities screen

Code

  • WAIT(ms) - suspend the execution for a given number of milliseconds
  • Http.StatusCodes - a handy enum for the most common HTTP status codes, e.g. Http.StatusCodes.OK
  • System.notifySupport() and System.notifyAdmins()
  • DATE("2026-02-17").getWeek() method - returns the ISO week number of the date
  • Workflow.removeDocument() - delete a specific document by ID
  • GlobalCounter namespace - for incrementing tenant-isolated counters. Can be used e.g. for invoice numbers
  • API keys are no longer hard-deleted and now have an IsDeleted flag instead
  • Compression.zip() - zip a list of files
  • Persisted entity's .aggregate() method - for advanced aggregation queries
  • UserStore.delete()
  • System.currentUser - access the user info associated with the current execution
  • Persisted entity's static .merge() method
  • Persisted entity's .deleteMany() method
  • Persisted entity's .getCollectionName() method
  • Entity's propertyNames, e.g. Entity1.propertyNames.abc
  • Persisted entity's .elevate() method
  • Persisted entity's getAll() method now supports an include filter property for fetching only the specified properties of the entities
  • System.setStatusCode() - set the HTTP status code for the execution response

Performance and stability

  • Editing very large rulesets with large forms is now many times more performant and without any lag

Misc. changes

  • Unique referers are now stored per API key, to offer insight into where API keys are used on external websites
  • Added aggregation endpoint for persisted entities
  • Persisted entities now support a 'Disallow API access' flag, so that it can only be fetched via a ruleset rule or function
  • More 'magic numbers' are now allowed (3-12)
  • User search in tenant profile
  • Generated PDFs that use tables with class table-striped are now rendered correctly
  • Analytics: Rulesets tab now supports filtering per API key
  • Administration: sorting and search in logs
Fixes
  • API: Fixed issue where calling a Triggered Webhook with API key limited to one ruleset would always be blocked
  • Fix: 'Same domain only' was true by default, even if user did not check box
  • Improved DocAI interfaces and fixed bug in classify
  • Fix: Persisted entities could potentially be saved to a deleted ruleset if no version is specified
  • Fix: Forms: Output element text-alignment property not visible
  • Fix: Forms: When using a numeric Output field it would store NaN in its path
  • Fix: Forms: When data-sourced tables had a 'Prevent add modal' flag, they would not create a data source item
  • Fix: Forms: Bug in data source filter related to legacy filters
  • Fix: Forms: Execute ruleset function action function order was not sorted alphabetically (UX)
  • Fix: Template monaco ordering bug
  • Fix: Creating an entity based on a constant table's row gave an error
  • Fix: Forms: Dropdown with Required set to true would always be valid even if the value was empty
  • Fix: Saving a persisted entity that has a calculated property that references a library ruleset would not work
  • Fix: When importing a CSV file in a constant that has newlines in it, the constant table breaks
  • Fix: 'Recently changed' is no longer a group option for new rulesets
  • [#339] Fix: Missing links when exporting a ruleset with circular references
  • Fix: Forms: Data source filter that evaluated to an empty string would disappear even if 'Skip if empty' was not
  • Fix: Forms: Charts in a non-visible tab get the wrong width
  • Fix: Forms: Multiselect set to required would not validate correctly
  • Fix: Forms: Switching from Select to Multiselect no longer removes all options
  • Fix: Forms: When editing in a ruleset with multiple referenced persisted entities, the Path dropdown could have multiple $id properties
  • Fix: Forms: When switching between a Multiselect and another enumerable Input, it would lose its options
  • Fix: Forms: Pagination is reset if filter causes current page to be blank
  • Fix: DATE() now clones the first param if it is a Date before returning it
  • Fix: Services: Edit button on non-expanded ruleset now edits the latest version
  • Fix: Workflow: System user now inherits from the System API key's roles

Version 2.5 - Q4 2025

New features

DocAI - Extract data from documents using AI

DocAI introduces AI capabilities directly into rulesets and workflows. Users can now leverage AI models to enhance their automation processes, enabling more intelligent decision-making and data processing within their
applications. You can use DocAI to analyze text, generate content, and perform various AI-driven tasks seamlessly integrated into your existing workflows. This feature is experimental and may require additional configuration and setup. Please refer to the Manual for more information on how to get started with DocAI. Note that this may become a paid feature in the future.

Webhooks

Webhooks allow external systems to send HTTP requests to Rulecube to trigger workflows or other actions. There are two flavors of webhooks: Workflow webhooks, which can be used to signal or interact with workflows, and Trigger webhooks, which expose an endpoint that can execute a ruleset or start a workflow when called.

Recent rulesets in overview

The services page now displays a list of recently accessed rulesets, making it easier for users to quickly navigate back to their frequently used projects.

Custom email templates

Organizations can now create custom email templates for various notifications, such as user invitations and password resets. This allows for better branding and personalization of communication with users.

Organization whitelabeling

A default tenant/organization can now be configured to set the language and styling for public pages like Login, Activation, and Reset password. This helps maintain a consistent brand experience for users interacting with
these pages.

Collaborative chat

Collaborative editing sessions now have a chat feature, allowing users to communicate in real-time while working on the same ruleset. This enhances collaboration and makes it easier to discuss changes and ideas without leaving the Rulecube environment.

Nullable input types

Ruleset input types can now be set to 'nullable', allowing them to accept null values. This provides greater flexibility in handling optional data and improves the robustness of ruleset logic.

Restore of unsaved changes after forced logout

In the event of a forced logout, users will now have their unsaved changes restored upon logging back in. This helps prevent data loss and ensures a smoother user experience.

Improvements

API keys

Public workspace pages now require an API key that is specific to that form's ruleset and nothing more.

Rulesets

  • Recent rulesets on the services page
  • Persisted entity's permission view now has smarter placeholders
  • A warning is shown when changing a persisted entity's property name
  • New API endpoint to execute a Ruleset's function
  • Ruleset executions now return diagnostics logged with console.error() by default. Previously, no diagnostics were returned when no logLevel was specified.
  • A custom message can now be specified when exporting a ruleset
  • Http.get(), Http.post(), etc. now support fetching of binary files as base64

Workflow

  • Created signal URLs now support redirection
  • Created signals are now encrypted and can be used for public-facing purposes
  • Workflow.getDocument() now returns the latest version of a document by default
  • Workflow.removeDocuments() method to remove all documents in a workflow of a given type2 / 7
  • Accessing workflow documents from a step without any access now stops and tells the user to check 'Access documents' first
  • Dead ends (steps without a next) will no longer result in the completion of a workflow
  • Added workflow document delete endpoint to API
  • Full-screen editing of workflows
  • Workflow instance's documentTypes property now always reflects the documents with upload steps currently defined in the workflow, not at its instantiation
    Admins can nudge/jump a workflow instance in case of emergencies

Forms

  • Basic search in form definitions in the ruleset editor
  • New workflow-related actions in forms: Assign task to user, Assign user to workflow instance, Release task from me, Force release task
  • New element type: Collapser
  • Dynamic content support in Labels
  • Actions can now be defined for when the Form loads (under a Form's Settings)
  • Button customization: button type, icon classes, button classes, with preview
  • Persisted entity data sources now support complex filters
  • New element type: Tabs
  • Collapse all button in form editor
  • Set local/global variable and Run code button action
  • New action: Create data source item
  • Input elements now support the 'Pattern' property (reg exp)
  • Custom default option for enumerable input types (dropdown, radio, etc.)
  • The current modal object can now be accessed with $current
  • Added support for more advanced expressions within dynamic content accolades {{ }}
  • New conditional visibility recipes related to a user's roles and permissions
  • Template element's functions can now be used for output inside the template
  • New Input type: Multiselect
  • Library entities can now be used in an element's path binding
  • Selected data source items IDs are now persisted in the URL along with the data source's name instead of its ID
  • Support for sorting of Table columns bound to a Persisted Entity data source
  • Made it clearer in the UI that a Path can also be used for Conditional visibility values
  • Debounced input events to prevent multiple actions / executions
  • Data sources can now be configured to not initialize as soon a form is loaded
  • New Table actions: Edit submit actions, Edit cancel actions, Add cancel actions
  • Table buttons now support visibility (Always, Never) and conditional visibility for edit, delete, add and custom buttons
  • Duplicate action button
  • New action: Clear URL query parameters
  • New action: Set data source item in URL
  • Special vars such as _User and _Printing are now moved outside of the form model in the debug panel
  • Conditional visibility shows dropdown when the path is User roles, User permissions
  • New element type: Dialog
  • Conditional visibility based on the current page
  • New action: Remove data source item
  • Global variables
  • New action: Start Library Workflow
  • Conditional visibility for Subform element's buttons
  • New actions: Download data URL & Preview data URL
  • Access to value in input element on-change actions, access to table row data from table button actions with value (e.g. {{ value.FirstName }})
  • New input type: Search - typeable dropdown
  • HTML support for Input's Help text
  • More info badges and duplicate/delete buttons for data sources
  • Subform elements now support data sources
  • Input text alignment setting
  • Input on submit actions (enter/return)
  • Go to subform button when editing Subform/Table/Dialog/Collapse/Table elements
  • New action: Execute Ruleset Function
  • Tab index property for input elements
  • Input element Trim setting
  • Return ruleSetId and diagnostics in execute function
  • Any form item (page, section, element, sub form) can be deep-linked via the link icon in its bottom right corner
  • Add datasource IN and Contains filters
  • Deep link element/section/page
  • New Textarea settings: auto-resize and number of (initial) rows
  • Go to page action now has an open-in-new-tab setting
  • New CSS classes: d-800px to d-2600px for custom responsive visibilities with a minimal screen width. Also, d-max-800px to d-max-2600px for visibility up until certain screen sizes
  • Set var actions now support dynamic content in paths
  • Actions now have an active flag, so they can be (temporarily) disabled by the user
  • New action: Halt - halts all of the next actions
  • New action: Comment - does nothing, but serves as a way to provide documentation for the form developers
  • New action: Set PDF locale (language)
  • Actions can now be dragged to other action lists in other elements
  • Template code blocks now auto-resize based on their content
  • Table columns now support 'Subform' elements as choosable options
  • Size limit setting for File Inputs
  • Workflow instance data sources now support pagination in Tables

Workspace

  • The start page of a form can now be configured
  • Content wrapping - header and footer
  • Edit workspace settings modal can now be saved without closing, and also supports Ctrl+S as a
    shortcut
  • Language is set based on the default tenant
  • Default tenant/org can now be configured. The application will use this to set the language and styling for the public pages, such as Login, Activation, and Reset password.
  • Workspaces show their title + org name in the browser's window/tab title
  • In the organization profile, a dark-mode logo and favicon can now be uploaded. These will be used in the workspace.
  • Template errors are no longer shown on the page, the template will be made invisible, and an error is logged to the Dev console

Code

Please check the Manual for more information about these changes.

  • Persisted entity's assignUser() and unassignUser()
  • User.getByEmail()
  • Workflow.assignUser() and Workflow.unassignUser()
  • PDF.setPrivileges()
  • Persisted Entity methods are now also available inside a persisted entity's rules
  • New Persisted Entity method: getMetaData() - returns metadata object containing date modified, date created, etc.
  • Date.addWorkDays() - add workdays to a date; this will skip weekends by default, but also supports specifying a culture to take holidays into account as well.
  • Date.getHolidays() - get the holidays for a given year and culture
  • Date.firstDayOfMonth() - get the Date representing the first day (of the week) of the month for a given year and month (e.g., the first Tuesday of May 2025)
  • Date.lastDayOfMonth() - get the Date representing the last day (of the week) of the month for a given year and month (e.g., the last Sunday of May 2025)
  • Date.isWeekend() - returns whether the date is a weekend, by default Saturday or Sunday, but a culture can be specified.
  • Date.isHoliday() - returns whether the date is a holiday using a given culture.
  • Date.MONDAY, Date.TUESDAY, etc. constants to more easily work with JS's Date methods that use a 0-based weekday parameter.
  • DocAI: a library with a set of methods to use LLMs in the execution of rulesets and workflows. Supported methods:
    • classify(): classify a document/image
    • ask(): ask questions about a document/image
    • extract()<c/ode>: extract data from a document/image
    • extractMarkdown(): extract all text as markdown from a document
    • extractStructuredData(): extract structured data (JSON) from a document/image based on a
      given model/schema
    • chat(): chat with a LLM model of choice
  • Workflow.getDocumentTypes() - get document types defined for the current workflow
  • Persisted entity's static getAllBy(propName, value) and getOneBy(propName, value)
  • The ROUND/FLOOR/CEIL functions have been improved to better handle floating point errors
  • Compression.unzip() - unzip all files in a given zip file
  • Support for fetching binary files as base64 via Http methods by using the option responseType: 'base64'

Performance and stability

  • Improved scaling of Persisted Entity tables
  • The auto-logout mechanism has been stabilized
  • In collab sessions, it is now always checked if you're editing the latest version of that ruleset and on
    disconnect, the ruleset is no longer editable
  • Datasources and their permissions are now fetched concurrently
  • Typing code in very large rulesets could become quite laggy; this has been solved

Misc. changes

  • Duplicate output names within entities are now detected - also in inherited from. parent interface ruleset entities
  • Custom email templates per organization
  • Improved support for modals in modals
  • Using PDF.renderForm() now uses the target form's PDF settings
  • Configurable reset/forgot password token timespan
  • Users can now request a re-send of an invitation if it has expired
  • Persisted entity data overview now displays metadata in the modal
  • Preferred tenant is restored after login and not just after activation
  • Documentation/Manual page now makes a clearer distinction between static methods and normal ones
  • Webhook support. Two flavors: Workflow and as a Trigger
  • Persisted entity data overview shows a smart summary for each row
  • Changed sandbox workflow logs layout to improve readability
  • Public pages now require an API key that is specific to that form's ruleset
  • Organization profile active tab is now persisted
  • Persisted entities can now be moved to other ruleset versions in the data overview
  • The default persisted entity page size is displayed in code completion and a Form's Data source definition
  • Persisted entities fetched via the API now contain their respective ruleset name, ruleset version, and
    entity name
Fixes
These are the bug fixes that have been made in this release.
  • Rules or inputs with the same name within an entity would collapse the two items. This is no longer the case.
  • Loop limiting caused by for..of and for..in loops to break unexpectedly. This is now fixed.
  • Forms: 'Set variable' actions no longer set [object Object] when an object property is set (either literally or via dynamic content)
  • Forms: Printing of textarea now renders its entire contents and no scrollbars
  • Forms: Checkboxes with hidden options now work.
  • Forms: The wrong page is opened in some cases. This is now fixed.
  • Forms: Splitting a section no longer creates new IDs for split elements
  • Forms: Create new subform button now works correctly within subforms
  • Forms: Inputs with repeat type 'Array' no longer have [object Object] as a default value
  • Workspace: default tab with roles now works correctly
  • Libraries with a circular reference no longer prevent the entire ruleset from opening
  • Libraries overview showed active version instead of installed version
  • Error when changing roles that were used by Persisted Entities no longer occurs.
  • Workflow/Task images were not rendered due to more strict CSP policies. This is fixed.
  • Forms: Access to workflow instances and tasks in new ruleset version
  • Forms: The params variable is no longer marked with a red underline when used in a Function's code block
  • Persisted entity intellisense for delete now allows the id property in the first parameter.
  • Workflow with parallel wait steps now sets the correct state (Running)
  • Services page search now matches on partial ruleset names
  • Ruleset save-as no longer shows "Are you sure?" if you have any unchanged changes
  • Inherited entity props is now selectable in form paths
  • Recursive library entities now work in form paths
  • Rare race condition in engine workers is fixed
  • Sub type definition in rulesets when changing a sub type from array to another type is fixed.
  • Conditional visibility label overflow in form editor is fixed.
  • Reset Form action now resets to the initial page
  • Ruleset Input that was added to workflow state would incorrectly be disabled if a property of the same name existed in another entity that's not the State entity. This is now fixed.
  • When a persisted entity fails to save in the Data page, the user is now notified
  • Forms: When a persisted entity fails to save/be deleted from a Forms Table, it now notifies the user of an error
  • Forms: Image URLs now work in Form's PDF header and footer <img> tags
  • API keys with IP whitelist now works correctly when used in combination with fetching persisted entities from a rule

Version 2.4 - Q2 2025

New features

Public workspace pages

Public workspace pages allow a tenant admin to define pages (forms) that an unauthorized user can access. Thisis useful for creating public forms, such as a registration form, without the need for the user to log in. The tenant
admin can define which pages are public and which roles can access them.

Persisted entity permissions

Persisted entities now support granular role-based permissions. This allows the tenant admin to define which roles can read, create, update, and delete data in a persisted entity. This is useful for restricting access to sensitive data.

New field type: File

To make handling uploaded files from a form easier, we've added a new field type: File. This field type is a special system entity that wraps the uploaded file and provides easy access to the file's metadata and content.

New Forms features

We've added many new features to Forms to make building forms easier and more powerful. Some of the highlights include:

  • File upload / Workflow document upload
  • Improved Template element with advanced features. The Template element now supports making calls to the Rulecube API and can access some library methods for advanced use
  • New actions: Release task, Confirm, Delay, Set print context value, Set URL query parameter
  • Print settings, including PDF settings like page size, orientation, margins, and header/footer content
  • Table improvements, including before delete action list, warning when there are no columns defined, and support for columns bound to a dropdown with a data sourced option source
  • Chart improvements, including stacking option, label and helptext support, legend settings, and Y-axis window setting
  • Button to easily sync enums with Options elements (Dropdown, Radio, ButtonGroup)
  • Easy way to quickly add a new subform and columns for Table elements based on an entity
Improvements

API keys

API keys now support an IP whitelist and a Same-domain flag, so the user can limit where an API key is used from

Rulesets

  • Persisted entities are now marked with an icon in the left menu of a ruleset
  • Added delete all revisions button on ruleset history page
  • Persisted entities now support encryption for certain properties marked with 'Sensitive data'

Workflow

  • When completing a Task a comment can be given or even required

Forms

  • Easy way to add a new subform and columns for Tables
  • File upload / Workflow document upload
  • Tables now support columns with Template elements
  • Workflow Instance data sources can now be filtered on stage
  • Improved editing experience by keeping track and restoring of the collapsed/opened elements and scroll position of the user
  • Table add button location setting (top, bottom or both)
  • More user friendly label/paths on data-sourced Dropdown Inputs
  • Added support for Tables with a column bound to a dropdown with a data sourced option source.
  • Input elements on a page's path input has been simplified
  • Form can now define its PDF settings for when it is rendered to PDF via the HTML2PDF service
  • The current culture (language) can now be used in conditional visibilities
  • Persisted entity data sources can now be sorted
  • Path operators: ^ and / to go up a level and back to root of form model
  • The loop index variable can now be used in a repeating subform
  • Workflow instances can now be deleted via a table bound to a workflow instance data source
  • Chart:
    • Stacking option
    • Label an helptext support
    • Legend settings
    • Y-axis window setting
  • New Actions:
    • Release task
    • Confirm - shows a dialog to the user and lets them cancel or continue with the rest of the actions
    • Delay - delay the next action with a given amount of time
    • Set print context value - set parameter to be used when printing to PD
    • Set URL query parameter - set parameter in the URL to save variables between refreshes or when sending a link to someone else
  • Table: before delete action list
  • Template element now supports making calls to the Rulecube API and can access some library methods for advanced use (utils, domUtils, fetch)
  • Table: show warning when there are no columns defined
  • New setting on a form to display a warning to the user when there are unsaved changes
  • Template element has been extended with properties, functions, computed properties, created and mounted event code
  • Sync enums with Options elements (Dropdown, Radio, ButtonGroup)

Workspace

  • It's now possible to add roles per page. This determines who can see the tab in the top menu and who can access it
  • Public workspace pages. Allows a tenant admin to define pages (forms) that an unauthorized user can access
  • Login/activation/forgot password pages can now be styled with workspace settings css

    Code

    Please check the Manual for more information about these changes.

    • UserStore.invite()invite a user with a given email, expiration date and roles - Render any URL to PDF
    • Crypto library: (Note: Replaces the Encryption library introduced in 2.3)
      • Crypto.encrypt() - encrypt a string using AES
      • Crypto.decrypt() - decrypt a string using AES
      • Crypto.getPrivateKeyFromCertificate() - converts a base64 encoded PKCS12 DER certificate to a PEM private key
      • Crypto.getClientAssertion() - creates a JWT client_assertion string for use in an OAuth 2.0 call
    • Hashing and conversion methods
      • Crypto.sha256() - calculates the SHA256 hash of a string
      • Crypto.hmacSha256() - calculates the SHA256 hash of a string using a key (HMAC)
      • Crypto.hash() - calculates a string with a given hashing algorithm
      • Crypto.hmacHash() - calculates a string with a given hasing algorith and key (HMAC)
      • Crypto.convertString() - converts a string from one encoding to another
      • Crypto.sign() - sign data with a (private) key
    • MongoDB.countDocuments()
    • Http.all() - perform multiple concurrent/parallel HTTP requests, takes an array of requests and returns an array of responses
    • WRAP(val, min, max) - modulo wrap a value within a min and max
    • XLSX2JSON() - convert an Excel file to an JS object

    Performance

    • Revision pagination memory optimization

    Misc. changes

    • User invitation expiration can now be configured
    • Persisted data overview improvements:
      • Refresh button
      • JSON editor instead of a text area
      • Load indicator on page change
      • Clickable IDs and improved expanding/collapsing
    Fixes

    These are the bug fixes that have been made in this release.

    • Redirect URL in Web App not honored after SSO
    • An Entity's parent properties can be selected in Form paths now
    • PDF render-all-pages / print mode rendered a blank page
    • Persisted entity data overview would show data from deleted rulesets
    • When printing a form in the browser, conditional visibility is no longer disregarded due to a timing issue. 
    • SSO user display names are now handled correctly
    • User can no longer enter a not-allowed password on activation page and get locked out
    • When printing a form to PDF, the user's locale is now applied (currency formatting, translations)
    • Inputs with constraints can now be reset to empty
    • PDF render-all-pages now no longer only execute the actions of the first page
    • Persisted Entity data edit and save checks JSON validity now
    • PDF print now applies workspace CSS
    • Forms: Help text on radio buttons is now properly aligned
    • Multi-tenant users redirect is now working, also after a log out

    Version 2.3 - Q4 2024

    New features

    Forms

    Forms goes out of beta this release and is now a stable feature. Many features have been added and improved since the beta release, and we're excited to see what you will create with it!

    Form rendering

    You can now render a form to a PDF using the PDF.renderForm() method. This can be useful when you want to generate a PDF from a form submission, for example when you want to send a confirmation email with a PDF attachment in a Workflow. The result of the PDF.renderForm() method is a base64 encoded string that you can use to create a PDF file, which you can then send as an email attachment or save to a file using Mail.send().

    User expiration

    As a tenant admin, you can now set an expiration date for users. When the expiration date is in the past, the user will be deactivated. This can be useful for temporary users or when you want to automatically deactivate users after a certain period. When inviting a new user, you can set the expiration date right away. Existing users can have their expiration date set in the user overview.

    Persisted Entities overview

    On the Data page you can now see an overview of all instances of a persisted entity. This overview shows all the properties of the entity, and you can create, read, update and delete instances directly from this page. This can be useful when you want to quickly check or modify the data in a persisted entity without having to create a form for it.

    Entra Enterprise Application SSO

    Rulecube now supports Single Sign-On (SSO) for Entra enterprise applications. Entra ID was already supported, but now you can also use your Entra enterprise application account to log in to Rulecube.

    Figlo SSO

    Rulecube now supports Single Sign-On (SSO) for Figlo. This means you can use your Figlo account to log in to Rulecube. This can be useful when you want to integrate Rulecube with your Figlo account, for example when you want to use Figlo data in a Rulecube ruleset or form. This also enables users to write back data to Figlo.

    Improvements

    Rulesets

    • Added 'include tests' option when exporting. This will let the user decide if they want to include the tests in the exported ruleset.

    Workflow

    • Workflow instances page is now paginated and can be sorted / filtered
    • Workflow instances can now have an expire date, to automatically delete them  after a certain amount of time

    Forms

    • New: Template Element (HTML)
      • Allows the user to add custom HTML to a form with support for interaction, conditionals and repeating. (Vue is used to realize this)
    • New: Chart Element
      • Allows the user to add a chart to a form with support for interaction, conditionals and repeating. (Google Charts is used to realize this)
      • Supported chart types: Line, Bar, Column, Area, SteppedArea, Scatter, Combo, Histogram, Pie, Donut, Bubble
    • New Input types:
      • Percentage
        • Similar to Currency and Number, but with a percentage suffix
      • Phone
        • Allows the user to enter a phone number with support for different formats
      • Hidden
        • Allows the user to add a hidden input to a form. Can be used to set a value in the form model using the Default value setting
    • New Actions:
      • Set Variable
        • Allows the user to set a variable in the form model
      • Execute Library
        • Allows the user to execute a library ruleset
      • Show Toast Message
        • Shows a toast message (a small temporary popup)
      • Validate Form
        • Validates the form. Will halt the next actions if the form is invalid
      • Go to URL
        • Navigate to a URL
      • Post to URL
        • Post data to a URL and navigate there
      • Print current page
        • Print the current page using the browser's print dialog
      • Print form to PDF
        • Print an entire form to a PDF. This requires an HTML2PDF service to be configured by the system administrator
    • Page visibility settings
      • Entire pages can now be hidden based on conditions. This is useful when you want to render the form to a PDF and exclude certain pages.
    • Page On Enter + On Leave actions
      • Under a Page's advanced settings, you can now add actions that will be executed when the page is entered or left
    • Customizable invalid form text
      • The text that is shown when a form is invalid can now be customized / translated
    • Extra debug settings in Form preview (accessed via the </> button at the bottom)
      • Simulate printing - Shows the form as it would be printed
      • Render all pages - Renders all pages in the form preview at once
      • Show hidden elements - Shows elements that are hidden based on conditions as transparent boxes
      • Show element paths - Shows the path of each element in the form preview
    • Extra debug information in Form preview (via the </> button at the bottom)
      • When a Ruleset execute result contains Alerts or Diagnostic messages (e.g. when using console.log), these will be shown here
    • Table improvements:
      • Table element now renders cell contents based on their respective element types
      • Tables can now be edited inline by enabling 'Inline edit'
      • Table add/edit/delete button labels can now be customized
      • On add & On delete actions can now be defined
      • Table can be hidden if it contains no data
      • Text can be specified for empty tables
      • Table header columns now show a tooltip icon if their respective column element has defined one
      • Edit buttons can be hidden
    • Persisted entities data sources now have 'Recalculate' option to recalculate all of an entity's calculated properties when fetched
    • Changes made to a Form are immediately visible if you have Form preview open in another tab
    • Form pages can be set to take up the full width of your screen
    • CSS classes can be added to any page, section, element or table column
    • Header elements now have 6 different heading levels
    • Decimals can now easily be entered in Currency, Numeric and Percentage Input elements - with support for both comma's and periods as decimal separators
    • Currency, Numeric and Percentage inputs are now formatted when not in use
    • Textual inputs now have minimum and maximum length settings
    • Support for dynamic content in an Input's Default value ({{ a.b }})
    • Overall more help texts and tooltips have been added to the Form Builder to help users understand the different settings

    Workspace

    • Force theme (dark, light)

    Triggers

    • Triggers can be enabled and disabled
    • Trigger CRONs can no longer be set to run at a per-second level, the highest resolution is minutes now
    • Triggers that start a Workflow can now specify an expiration date for the Workflow instance

    Analytics

    • Analytics can now be seen for 'All time' and the individual lines per API key can now be shown as a single total line
    • Ruleset versions are now clickable in the per-ruleset statistics table
    • Admin dashboard now has Analytics support to see an overview of statistics for all tenants

    Code

    Please check the Manual for more information about these changes.

    • PDF.createFromUrl() - Render any URL to PDF
    • PDF.renderForm() - Render a Form to PDF
    • MongoDB.updateOne() and MongoDB.updateMany() now support a 6th param for passing in options (e.g. { upsert: true })
    • Statistics.percentile() - A method to calculate the percentile on a list of numbers. Works similar to Excel's PERCENTILE function.
    • Encryption.encrypt() and Encryption.decrypt() - Encrypt and decrypt a value with a key using the AES algorithm
    • Compression.gzip() and Compression.gunzip() - Compress and decompress a string using the GZIP algorithm

    Performance

    • SQL optimizations have been made by using async methods where possible
    • Workflow instances load faster due to moving logs to separate table
    • Removed / refactored lots of legacy code

    Misc. changes

    • Update to Node 22 and all its JS language features (for use in rulesets)
    • Styling tweaks
    • Improved security monitoring, enabling us to detect and fix vulnerabilities in dependencies and docker
    • images, and making hotfixes for our customers
    • Implemented a number of suggestions from a recent pentest
    • Tenant Admins are now able to reset the 2FA key in case a user has lost access to their authenticator app
    Fixes

    These are the bug fixes that have been made in this release.

    • WorkspaceUser now has ruleset execution permissions (also fixed in 2.2.1)
    • Testcases are now correctly updated when an input or rule that's in the output is removed (also fixed in 2.2.1)
    • Fix in workspace setting when selecting a form as a page and there's multiple versions of the same ruleset
    • Fix in Triggers of type ExecuteRuleSet where Persisted Entities could not be accessed
    • Fix in CSV separator detection when uploading for constant tables
    • Regular username/password login for Entra users has been disabled
    • Workflow resume on startup is now delayed until all update scripts have been run
    • Fix in Form input with options' default value now selects default value if bound property has a value that's not one of its options
    • An Output element in a Form can now have its options specified by the user, just like for Input elements (Radio, Dropdown, etc.)

    Version 2.2 - Q2 2024

    New features

    Forms

    This version of Rulecube will go live with the beta version of Forms. Forms are a new feature that allows you to create forms that can be filled in by users or serve as a page in the workspace. The data from these forms can be used to execute rulesets, create entities, or trigger workflows. Forms can be created in the ruleset UI and are fully
    customizable.

    Workspace

    The workspace is a new feature that allows you to create a custom workspace for your organization. The workspace is fully customizable and can be used to create a custom dashboard for your organization. Forms can be used as pages in the workspace and a custom CSS stylesheet can be added to style the workspace to whitelabel it for your organization.

    The configuration of the workspace is done in the organization profile page. Workspace will need to be enabled first in the organization settings, after that, you can configure it in the 'Workspace settings' tab. To get to the workspace, click on the play-icon button in the top right corner of the screen.

    We've also added a new role to the organization roles: 'WorkspaceUser'. When a user logs in with this role (and not TenantUser or TenantAdmin), they will be redirected to the workspace instead of the ruleset overview.

    Organization Roles

    Another tab has been added to the organization profile page: 'Roles'. By default, you will see all the system roles here. You can create custom roles by clicking the 'Create role' button. Custom roles can be assigned to users in the 'Users' tab by clicking the edit button on a user or when inviting a new user.

    Persisted Entities

    Persisted entities are a new feature that allows you to store entities in the database. This data can be used in rulesets, workflows, and forms. To enable this in a Ruleset, the version setting 'Library' should be checked along with 'Allow persistency'. Once this has been done, any current Ruleset Entity can be made persistent by checking the 'Allow persistency' checkbox in the Entity's settings. Entities can be created, updated, fetched and deleted in a ruleset, but also via our new API endpoints under api/persisted-entity and via Forms.

    Improvements

    Rulesets

    • Constants now display the type / interpreted value below the input field
    • External constants can now use other external constants in their URL, HTTP headers and Mapping.
    • Libraries can now be refreshed with a button, so the page does not need to be reloaded anymore
    • New alert type: Success
    • Improved missing returndetection in functions and rules
    • Ruleset name, version, id, app url and date are now included in the execution results

    Workflow

    • Workflow instances now have owner and creator fields
    • Total running time for workflow instances is now updated in real-time

    Metrics and Alerts

    • These can now be fetched by ruleset name and version instead of just by id
    • These can now be deleted by tags as well

    Analytics

    • The analytics page is now 9 times faster due to optimizations
    • Execution analytics now shows stats per ruleset version

    Ockto

    • Added support for partner on separate device flows

    Code

    Please check the Manual for more information about these changes.

      • Mini Apps in Simple mode now support intellisense on the Session class and showLogin().
      • User is warned when 'new Date' usage is detected
      • Functions that should be Rules are now detected and the user can simply convert them by clicking a button
      • Execution tags can now be accessed via System.getModel().options.tags
      • Workflow instances now have a custom stage property, that can be set via
        Workflow.setStage('Custom stage name here')
      • Entities marked as persisted will have .save() and .delete() methods on their instances
        • E.g. let myEntity = new MyEntity(); myEntity.save();
      • Entities marked as persisted will have a .get() , .getAll() , .update() and .delete() method on the Entity itself
        • E.g. MyEntity.getAll()

        Quality & Performance

        • Many improvements to Metric and Alert aggregations
        • Workflow instances overviews now load much faster
        • Removed 3700 lines of dead code.
        • Analytics now renders the chart 9 times faster
        • Opening a rule in a very large ruleset is now many times faster

        DevOps

        • We now also publish our packages to our Azure DevOps public Artifact Feeds. If you are interested in using this instead of the usual Docker images, please contact us.

        Misc. changes

        • Upgrade to .NET 8
        • Update to Node 20 and all its JS language features
        • Azure AD has been renamed to Microsoft Entra ID in UI and errors strings
        • Referer will no longer be used for emails, AppUrl is used instead
        • Engine is automatically restarted in the event it is stopped
        • When an external constant can not be fetched, admins will only receive an e-mail about this once a day (instead of every 15 minutes)
    Fixes

    These are the bug fixes that have been made in this release.

    • Code in Mini Apps no longer shows Ruleset-only methods like RANDOM(), ROUND(), etc.
    • Ruleset folders now order their items alphabetically after rename
    • Workflow no longer create duplicate Wait signals if one was created manually with Workflow.createSignal()
    • Bulk execution is now halted for offline/under maintenance rulesets
    • api/workflow/start now throws an exception if the target Ruleset is not a Workflow ruleset (anymore)
    • Entity property list would sometimes show a false positive warning icon
    • External constants linked to deleted rulesets can no longer be opened
    • Mail.send no longer uses SMTPS by default, as it has been deprecated (This is related to the secure flag, SSL/TLS is still used by default)
    • Environment variables save button is now disabled during save, plus a toast notification is shown on completion
    • Fixed some styling issues with multiselects
    • Fixed an issue where when importing a ruleset fails, it will keep the import dialog open so the error is visible to the user
    • User locked-out state is reset after successfully changing your password

    Version 2.1 - Q1 2024

    New features

    Ockto support

    Ockto can now be configured on a per-tenant basis. Workflows can now be created that integrate with Ockto. A how-to guide for creating a workflow is available in the Rulecube documentation environment.

    Note: this is a Premium feature and may not be available in your plan.

    Improvements

    Rulesets

    •  
    • Layout now makes more optimal use of the screen width
    • The used-by banner is only shown on the general settings page, so there is no need to scroll on each item
      page anymore
    • Ruleset search now also searches in Workflows
    • Search results display proper icons (types, alert types, included in output, etc.)
    • On upload/paste, entities can be put in a folder
    • Only simple constants can be encrypted now
    • Code check after cloning a Ruleset item
    • Encrypted constants now use a different encryption algorithm
    • Functions no longer require a return for single-statement multi-line expressions
    • Folders now show a warning if they have no name or if they are duplicate when they're included in the
      output
    • Non-library rulesets can no longer be published to the Hub
      Entities may now have circular references
    • Errors/hints/code issues in alerts and multi-lingual alerts now show their proper location
    • Test cases now have a Description field
    • Deleting an item from the output also updates all test cases where it is used
    • Warning is shown when user enters a Rule's output name that is identical to its name

    Workflow

    • Workflows are now fully event-driven. Events can be handled using an internal event bus (single Rulecube
      instance) or RabbitMQ (single and multiple Rulecube instances). Locking mechanism used can also be
      configured: in memory, or distributed via database (MongoDB only) or Azure blob storage
    • Workflows with an incorrect state Input or state Entity show an error now
    • Join steps in a Workflow now set the state to Suspended if they are incomplete
    • Diagnostics generated in a step (console.log, etc.) are now saved to the Workflow instance if a step fails
    • Workflow instances overview now only displays non-completed ones by default
    • A workflow ruleset's swagger definition now contains the workflow/start endpoint
    • Workflow Tasks can now be released by admins
    • Workflow Tasks can now be extended with a checklist, which can optionally be required to be completed
      before the task can be fully completed

    Misc. changes

    • Toast notification location
      • You can now set the location of toast notifications in your user settings (Click on your name in the
        top right corner > Settings)
    • Organization profile page has been overhauled: Settings, Users, Contact info, and API keys are now in
      separate tabs
    • Counter badges have been added to all pages that deal with lists and tables of data
    • When external data can not be fetched, the admins of that organization will be sent an email
    • Added GMT hint in the edit dialog for Triggers with a schedule
    • Improved styling of the History page's Rollback button
    • Analysis Log has been limited to 10,000 entries
    • When calling console.log() with a base-64 data URI image, the image is now displayed in the Sandbox.

    Code

    • Finance.An() - Calculate the present value of a lumpsum
    • Finance.Sn() - Calculate the future value of a lumpsum
    • Workflow.stop() - Gracefully stop a workflow
    • The entire Ockto library and its methods.
    • A Constant Table's name can now be accessed programmatically with YourTable.name

    Quality & Performance

    • Rulecube now performs a self-diagnosis on startup to detect potential problems with the
      deployment/environment.
    • Code coverage of the engine code base increased to 100%
    • Code coverage of the entire code base increased to 95%
    • Analytics page is many times faster and no longer hangs the browser
    • Test cases are now at least 2x smaller in network size and no longer slow down the opening of a Ruleset
    • Converted our application to Vue 3
    • Application bundle size has been decreased from 2.3MB to 181kb, making the app load much faster over
      a network
    Fixes

    These are the bug fixes that have been made in this release.

    • Input/rule output name clash is detected after cloning
    • Bug related to SSO with Azure AD overwriting your username
    • DB stats negative size overflow bug
    • Ruleset > Tools > Delete all tests now works properly
    • Authorization HTTP header checks were case-sensitive
    • Fixed an issue in HTTP headers and case sensitivity
    • Fixed role assignment/invitation issue
    • Fixed a security issue related to JWT
    • Added System-ExecutionOnly API key to all tenants
    • Fixed visibility of API keys to tenant users
    • Fixed an issue in SQL where a Metric Alert was sometimes not saved
    • Removed a permission of TenantUser so they can no longer edit the Organization profile / API keys
    • Fixed an issue in Mail.send() for use in Ruleset code.
    • Fixed an issue in Database updater scripts when the connection to the DB fails
    • Fixed an issue in SQL instances of Rulecube where long numerical values caused an error
    • Fixed an error in api/alert/list in SQL instances if no tags were specified
    • Fixed an issue where not all tests were deleted if this was done from the Tools page
    • Fixed a bug where the parameters of a parent Function could be changed in a child ruleset
    • 2FA can no longer be enabled for AD users, as it will use the AD settings
    • Fixed a bug where environment variables used in a library were not available when Test cases were run
    • Environment variables in a shared ruleset default to the source tenant's environment variable value
    • When a rule's output name is the same as its name, an error is no longer generated during execution
    • Fixed a bug where when a ruleset item's name is cleared, the user got redirected to the General settings page
    • Fixed a bug where a Join step in Workflow would not work properly if the previous step is a Wait or Switch
    • API: Admins can no longer delete themselves
    • API: Tenant admins can no longer delete or downgrade themselves
    • Old refresh tokens are now deleted on refresh
    • Fixed a bug in the Output list of a ruleset for rules with the type of an Entity
    • Fixed a bug where an invalid redirect could lead to the user being stuck on the Login page
    • Workflow steps with code are now also refactored when an item is renamed
    • Workflow signals are now handled after the current step has been completed
    • Workflow Switch steps with a return value that doesn't match one of its branches no longer set the state
      to 'Completed', but to 'Failed'
    • Fixed issues for libraries that were several levels deep (Library that uses a library that also uses a library,
      etc.)
    • Fixed line numbers bunching up in Workflow step code editors
    • Fixed statistics errors when workflow steps are executed
    • Password can no longer be changed for Azure AD users through Rulecube
    • Fixed intellisense for Constant Table's intersect() method
    • Fixed intellisense for MongoDB's aggregate() and bulkWrite() methods
    • Alerts for programmatically instantiated entities now generate alerts if any are defined
    • New metrics without alerts now correctly remove any previously linked alerts
    • Fixed an issue in Http.delete() where it would not perform a DELETE call correctly
    • Fixed an issue where changing a Ruleset's parent interface would lock it for other users
    • Fixed Add/Edit Trigger modal so that it can not save if there's no Ruleset selected
    • Tasks are now properly filtered according to their stakeholder groups
    • Fixed metric filters when used in cases where a numeric field is actually internally a string
    • Disabled forgot password functionality for Azure AD users
    • If saving of metric fails, the execution call will not fail entirely

    Go ahead, ask us anything.