Unqork analyzes module configurations and flags potential issues across four categories: Performance, Security, Stability, and Maintenance. This guide documents each best practice and explains why it matters. It also includes Workflow Builder best practices for node configuration and timeout management.
Performance
Set a Submission Limit on Plug-In Components
Only retrieve the data the module needs. When a Plug-In component returns submissions without a limit, it loads all matching submissions simultaneously, which slows down the module and degrades the end-user experience.
Recommendation: Set a limit parameter on any Plug-In component that retrieves submissions.
Enable Server-Side Pagination
When a Plug-In component returns a large number of submissions, load them in pages instead of loading all submissions simultaneously. Loading them all without pagination significantly impacts performance.
Recommendation: Enable Server Side Pagination on Plug-In components that retrieve submissions.
Map Outputs Explicitly
Enabling Assign All Values Returned to Form pushes every field from an API response into the submission, including unnecessary data. Doing so bloats submission data and slows performance.
Recommendation: Disable Assign All Values Returned to Form. Map the required fields using the Outputs table.
Disable Flatten to Single Record Result
When a Plug-In component returns a single-item array, Flatten to Single Record Result converts it to a plain object. This creates inconsistent data types and limits how the data can be used downstream.
Recommendation: Disable Flatten to Single Record Result so responses always return a consistent array.
Avoid Excessive Component Nesting
Deeply nested Column and Panel components increase the complexity of the module structure and reduce rendering performance. Most configurations do not need more than three levels of nesting.
Recommendation: Keep Column and Panel component nesting to three levels or fewer.
Enable Stagger Loading
Stagger Loading lets each Navigation component load its data independently instead of loading all data simultaneously on page load. Without it, the module loads all data upfront.
Recommendation: Enable Stagger Loading in Module Settings for any module that uses Navigation components.
Avoid Formulas in View Grid Columns
Using the Formula column inside a View Grid component to manipulate data can cause unintended loops that negatively affect performance.
Recommendation: Process and format data in a Data Workflow component before passing it to the View Grid component.
Enable Image Compression on File Uploads
Large uncompressed image files increase the size of API responses and slow performance. File compression keeps uploads manageable.
Recommendation: Enable image compression on File components that accept image uploads.
Delete or Disable Unused Components
Components that are hidden, disconnected, or have disabled logic still exist in the module configuration. They add weight without contributing value.
Recommendation: Delete unused components. To temporarily preserve a component, use the Disable Execution toggle, but remove it when it is no longer needed. For unused Data Workflow components, replace them with a Hidden component instead—Hidden components are lighter weight and reduce module size more effectively than leaving a Data Workflow component in place with execution disabled.
Use Watch Mode Sparingly on Agent-Created Logic Components
Watch mode causes an agent-created logic component to execute its pipeline every time a watched component's value changes. For simple, lightweight calculations this is appropriate—but for complex pipelines or large datasets, Watch mode runs expensive processing on every keystroke or change event, which can make the module feel slow or unresponsive. Multiple logic components in Watch mode watching the same fields compound the issue further.
Recommendation: Default to Manual for agent-created logic components. Use Watch mode for lightweight, real-time calculations, like updating a price display as a quantity changes. Keep the watcher list as narrow as possible.
Avoid Outputting Data to Logic Components
Logic components are not designed to store data. Outputting a value to the same component that produced it causes performance issues and makes the module harder to maintain.
Recommendation: Output calculated or processed values to a Hidden or Text Field component instead.
Security
Enable RBAC on All Modules
Role-based access control (RBAC) restricts who can access a module and what they can do. Disabling it leaves the module open to unauthorized access.
Recommendation: Enable Customize RBAC in Module Settings for every production module.
Restrict Accepted File Types
Allowing unrestricted file uploads lets end-users upload any file type, including malicious files. accept the file types the application requires.
Recommendation: Set the File Pattern setting on all File components to specify allowed file types (for example, .pdf,.png).
Remove Console Operators and Debug Settings
Console operators and debug settings expose internal data that is useful during development but is a security risk in production.
Recommendation: Remove all console operators from Data Workflow components and disable the Debug setting before promoting to production.
Avoid Custom JavaScript
JavaScript is an imperative language that can alter module state and introduce vulnerabilities. Unqork components are designed to handle logic safely without it.
Recommendation: Replace custom JavaScript with Unqork components. Use CSS and HTML for styling and presentation.
Stability
Add an Error Trigger to Every Plug-In Component
When an API call fails, the module must handle the error instead of silently ignoring it. A Plug-In component without an error trigger leaves end-users with no feedback and the module in an unknown state.
Recommendation: Configure an Error Trigger on every Plug-In component to handle failure cases.
Restrict Buttons to a Single Click
When a button is clicked multiple times, end-users trigger the same logic repeatedly before the first execution completes, leading to duplicate submissions and unpredictable behavior.
Recommendation: Enable Restrict to Single Click on all Button components that trigger data operations or submissions.
Use the Event Button Action for Data Operations
The Save and Save Draft button action types save a submission to the module on which the button was clicked. For applications that store data in a Schema module or use Plug-In components, these action types are incorrect.
Recommendation: Use the Event action type on buttons that trigger Plug-In components or cross-module operations.
Verify All Component References
When a component references another component's Property ID and that component has been deleted or renamed, the reference fails without displaying an error, causing logic to stop working.
Recommendation: Audit component references in Initializer, Decisions, Data Workflow, and Plug-In components when renaming or deleting components.
Workflow Builder
Label All Nodes
Unlabeled nodes make workflows difficult to read and maintain, especially for anyone other than the original Creator.
Recommendation: Add a descriptive label to every node that identifies its purpose. Keep labels short for a cleaner canvas and smaller JSON payloads. Develop a labeling convention and use it consistently across workflows.
Keep Label and Path Names Unique
Duplicate node labels and names create ambiguity and make workflows harder to debug and maintain.
Recommendation: Keep Label and Path names unique for each node in a workflow.
Build Automated Tasks to Complete Within Five Minutes
Automated workflow lanes have a five-minute operation limit in the Production environment. Each module included in the workflow has an individual two-minute limit. Exceeding either limit causes the workflow to time out.
Recommendation: Build automated lane tasks to complete operations in five minutes. For large datasets, run operations in smaller batches rather than processing everything simultaneously. The five-minute limit does not apply to QA or Staging environments.
Maintenance
Add Labels to All Components
Canvas Label Text identifies each component on the Module Builder canvas. Without labels, modules are difficult to read and maintain, especially for anyone other than the original Creator.
Recommendation: Add a label to every component. For non-UI components (Hidden, Initializer, Data Workflow components, and so on), use the same text as the Property ID.
Use Closing HTML Tags
Unclosed HTML tags in Content or HTML Element components cause unpredictable rendering issues and make markup difficult to maintain.
Recommendation: Always close every HTML tag you open (for example, <h1> paired with </h1>).
Changelog
| Date | Change |
|---|---|
| — | Initial publication. |