ToolJet 3.0 Migration Guide Self-Hosted
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, update your Docker image to:
tooljet/tooljet:v3.0.0-ee-lts
This is a beta release. Test thoroughly in a non-production environment first.
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;
}
}
Component and Query Naming
This is only an issue during the upgrade process. Once your application is running on ToolJet 3.0, you can use identical names for components and queries without any problems.
Action Required
- Review your applications for any instances where queries and components share the same name
- Temporarily rename either the component or the query to ensure unique names
- Document all renamed components/queries for potential post-upgrade reversion
- Test affected components and queries after renaming
Details and Examples
When upgrading, if a component is referencing a query with the same name, the upgrade process may break that mapping. This occurs because ToolJet previously used a global ID-to-name map for both components and queries, which is now split in 3.0.
Example scenario: If a table component named userData is referencing a query also named userData, this reference may break during the upgrade process.
Property Panel Logic
Action Required
- Review all property panel variable checks
- Update any existing variable existence checks to use the new recommended format
- Remove any instances of unsupported logic patterns
- Test all components using variable checks after updates