ToolJet 3.0 Migration Guide
ToolJet 3.0 is a new major version, including breaking changes that require you to adjust your applications accordingly. We will guide you through this process and mention a few important changes.
Before upgrading, we recommend reviewing your existing applications for any usage of deprecated features. Addressing these ahead of time will help reduce the work needed to upgrade to ToolJet 3.0.
For complex applications, we also recommend setting up thorough testing procedures to ensure your apps function correctly after the upgrade.
Upgrading to ToolJet 3.0
Prerequisites ⚠️
Before attempting to upgrade to the ToolJet 3.0:
- Database Backup: Create a complete backup of your database
- Application Review: Check your apps for breaking and deprecated features listed in this guide.
- Test Environment: Only attempt upgrade in a testing environment first.
To upgrade, checkout the latest docker image here.
Breaking Changes
The following changes are breaking and require immediate action to ensure your applications continue to function correctly after the upgrade.
Dynamic Input Restrictions
You can no longer dynamically change references to component names.
Action Required
- Review your applications for any dynamic component name references and refactor as necessary
- Replace all dynamic component references with static references
- Test all component interactions after making these changes
Examples and Details
The following patterns are no longer supported:
-
Using variables to construct component names:
// This will no longer work
{
{
components[variables.componentNameVariable].value;
}
} -
Dynamically referencing components:
// This is not supported
{
{
components["textinput" + components.tabs1.currentTab].value;
}
} -
Dynamically accessing nested properties:
// This dynamic property access is not allowed
{
{
components.table1[components.textinput1.value];
}
}
Instead, use static references to components:
{
{
components.textinput1.value;
}
}
{
{
components.table1.selectedRow;
}
}
{
{
queries.query1.data;
}
}