--- title: "Platform Best Practices" slug: "platform-best-practices" status: "update" updated: 2026-10-13T18:19:42Z published: 2026-10-13T18:19:42Z canonical: "docs.unqork.io/platform-best-practices" --- > ## Documentation Index > Fetch the complete documentation index at: https://docs.unqork.io/llms.txt > Use this file to discover all available pages before exploring further. # Platform Best Practices 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 only 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 only 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. Only 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 only. ## 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 only 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. | End-users, also known as Express Users, are the individuals accessing an application through Express View. In most cases, end-users are the customers using the product. Pagination is the process of separating content into individual pages. APIs (application programming interfaces) are a set of protocols and definitions developers use to build and integrate application software. APIs act as the connective tissue between products and services. Enter outputs components and actions you want the component to perform. An array is a type of object that stores one or more data types. Data types supported in arrays include numbers, strings, and objects. An object is a type of data structure that represents a single, self-contained entity that acts as a container for the characteristics of that entity. Data types are a classification of data that determines how it is stored and interpreted. Rendering is the process of loading components and displaying the final result on the front-end screen. RBAC (Role-Based Access Control) is a method to control system access for authorized users. The role in RBAC refers to the levels of access employees have to a network. End-users, also known as Express Users, are the individuals accessing an application through Express View. In most cases, end-users are the customers using the product. Debugging is the process of finding and resolving errors or bugs in an application. To debug an application in Unqork, use UNQENG tools in Express View. JavaScript is an object-oriented computer programming language. It is most-commonly used for interactive effects in the browser. Cascading Style Sheets (CSS) is a style sheet language used for presenting how a HTML or XML document looks to end-users. HTML (Hyper Text Markup Language) is the standard markup language for for achieving font, color, graphic, and hyperlink effects when creating web pages. A Property ID is the unique field ID used by Unqork to track and link components in your module. Also known as Unqork Users, or Designer Users; is anyone who is inside the Unqork platform. JSON (JavaScript Object Notation) is an open standard file and data interchange format. Unqork uses JSON for submission (record) data. Label Text conveys what the input component is and what information it displays. Enter the purpose of the corresponding component or field. The Production environment is the final stage of the development process. Use this environment to promote tested and functioning application so your end-user can interact with it. Use your QA (quality assurance) environment to test applications to ensure reliability, security, and functionality before releasing them to the end-user. The Staging environment is the first level of application building in Unqork. Use it to build, test, and style your applications. Canvas Label Text indicates the purpose of the corresponding field or component. For non-input components, the Canvas Label Text isn't end-user facing, and only appears in the . The UI (user interface) is a device's end-user interaction and communication point. It can include display screens, keyboards, and mouse. It is also how a user interacts with your application.