-
Notifications
You must be signed in to change notification settings - Fork 0
Fuuz Bindings $predicateFilter
Article Type: How-To Audience: Developers, App Admins Module: How To
Every model in the Fuuz GraphQL API has a generic WhereInput type used to filter queries against that model. These WhereInput types assign a PredicateInput type to each field on the model. If you have made a query against a Fuuz GraphQL API, you have likely used a WhereInput to filter the results. These predicates provide a quick and easy way to define filters through a Fuuz GraphQL API, making them a natural fit for the internal workings of screens and Data Flows.
Example query:
# query for CalendarEvents...
query GetEvents ($where: CalendarEventWhereInput) {
calendarEvent(where: $where) {
id
timeZone
calendarId
}
}Variables — where the CalendarEvent's timeZone is 'America/Detroit':
{
"where": {
"timeZone": { "_eq": "America/Detroit" }
}
}…or with Calendar ID "myCalendar" and priority greater than 100:
{
"where": {
"calendarId": { "_eq": "myCalendar" },
"priority": { "_gt": 100 }
}
}A predicate can be thought of as a "test" that data must pass in order to be accepted by the filter. If you're using this binding, you should be familiar with this concept from JSONata's $filter function. The main difference between $filter and $predicateFilter is one of representation.
$filter
- A predicate is represented as a function.
- An element is accepted if the predicate function returns
truewhen applied to it. - Even relatively simple predicates need to be expressed in terms of functions:
$filter(
$data,
function($element) {
$element.code = "A" and $element.active = true
}
)
$predicateFilter
- A predicate is expressed as an object of predicate inputs (described below).
- An element is accepted if it satisfies all of the inputs.
- Predicates look more like the data they are being used to filter:
$predicateFilter(
$data,
{
"code": { "_eq": "A" },
"active": { "_eq": true }
}
)
Note: There are subtle differences between these two example snippets! For example,
$predicateFilteruses case-insensitive comparison for strings by default.
These predicate inputs are available for use against fields of any type.
An equality comparison. Matches when the field value equals the provided input value.
Note: String equality is case-insensitive by default (see
caseSensitiveComparison).
Payload
[
{ "id": 1, "label": "One" },
{ "id": 2, "label": "Two" },
{ "id": 3, "label": "Three" },
{ "id": 4, "label": "Four" }
]Transform
$predicateFilter(
$,
{ "id": { "_eq": 1 } }
)
Result
[
{ "id": 1, "label": "One" }
]A null-checking comparison.
- An input value of
truematches where the field value isnullor undefined. - Any other input value matches where the field value is not null.
Payload
[
{ "id": 1, "userId": "example" },
{ "id": 2, "userId": null },
{ "id": 3, "userId": "test" },
{ "id": 4 }
]Transform
$predicateFilter(
$,
{ "userId": { "_isNull": true } }
)
Result
[
{ "id": 2, "userId": null },
{ "id": 4 }
]Matches when the field value is contained in the list provided by the input value. (Membership is tested using the same rules as _eq.)
Payload
[
{ "id": "myCalendarEvent1", "calendarId": "myCalendar", "eventJson": {} },
{ "id": "otherCalendarEvent1", "calendarId": "otherCalendar", "eventJson": {} },
{ "id": "testCalendarEvent", "calendarId": "testCalendar", "eventJson": {} },
{ "id": "myCalendarEvent2", "calendarId": "myCalendar", "eventJson": {} },
{ "id": "otherCalendarEvent2", "calendarId": "otherCalendar", "eventJson": {} }
]Transform
$predicateFilter(
$,
{ "calendarId": { "_in": ["myCalendar", "testCalendar"] } }
)
Result
[
{ "id": "myCalendarEvent1", "calendarId": "myCalendar", "eventJson": {} },
{ "id": "testCalendarEvent", "calendarId": "testCalendar", "eventJson": {} },
{ "id": "myCalendarEvent2", "calendarId": "myCalendar", "eventJson": {} }
]These predicate inputs compare the field value to the input value using their respective comparisons.
| Input | Comparison |
|---|---|
_gt |
(strictly) greater than |
_lt |
(strictly) less than |
_gte |
greater than or equal |
_lte |
less than or equal |
Note: String comparison is case-insensitive by default (see
caseSensitiveComparison).
Payload
[
{ "id": 1, "label": "One" },
{ "id": 2, "label": "Two" },
{ "id": 3, "label": "Three" },
{ "id": 4, "label": "Four" }
]Transform
$predicateFilter(
$,
{ "id": { "_gt": 2 } }
)
Result
[
{ "id": 3, "label": "Three" },
{ "id": 4, "label": "Four" }
]These predicate inputs can be used against string fields.
Performs a starts/ends-with comparison against the field value. Matches if the field value starts/ends with the input value.
Payload
[
{ "id": "myCalendarEvent1", "calendarId": "myCalendar", "eventJson": {} },
{ "id": "otherCalendarEvent1", "calendarId": "otherCalendar", "eventJson": {} },
{ "id": "testCalendarEvent", "calendarId": "testCalendar", "eventJson": {} },
{ "id": "myCalendarEvent2", "calendarId": "myCalendar", "eventJson": {} },
{ "id": "otherCalendarEvent2", "calendarId": "otherCalendar", "eventJson": {} }
]Transform
$predicateFilter(
$,
{ "id": { "_endsWith": "Event1" } }
)
Result
[
{ "id": "myCalendarEvent1", "calendarId": "myCalendar", "eventJson": {} },
{ "id": "otherCalendarEvent1", "calendarId": "otherCalendar", "eventJson": {} }
]Performs a contains comparison against the field value. Matches if the field value contains the input value. The input value can be either a string or a regular expression.
Payload
[
{ "id": "hourly", "label": "Hourly" },
{ "id": "daily", "label": "Daily" },
{ "id": "weekly", "label": "Weekly" },
{ "id": "monthly", "label": "Monthly" },
{ "id": "yearly", "label": "Yearly" }
]Transform
$predicateFilter(
$,
{ "label": { "_contains": "rly" } }
)
Result
[
{ "id": "hourly", "label": "Hourly" },
{ "id": "yearly", "label": "Yearly" }
]Note: Regular expressions have their own case-sensitivity options, so make sure to use the
/iflag if you want case-insensitive regular expressions:
Transform
$predicateFilter(
$,
{ "label": { "_contains": /[aeiou]{2}/i } }
)
Result
[
{ "id": "hourly", "label": "Hourly" },
{ "id": "daily", "label": "Daily" },
{ "id": "weekly", "label": "Weekly" },
{ "id": "yearly", "label": "Yearly" }
]These predicate inputs can be used on JSON object fields. Unlike the previous examples, JSON predicate input values are provided as objects with two properties:
{
"path": ["the", "object", "path"],
"value": "the value to test against the path on the object"
}If path is empty, the value is tested against the whole object.
Performs an object contains comparison. The predicate matches when the JSON field contains the provided JSON path/value entries.
Payload
[
{ "data": { "id": 1, "code": "A", "active": true } },
{ "data": { "id": 2, "code": "B", "active": true } },
{ "data": { "id": 3, "code": "A", "active": false } },
{ "data": { "id": 4, "code": "B", "active": false } },
{ "data": { "id": 5, "code": "A", "active": true } }
]Transform
$predicateFilter(
$,
{
"data": {
"_containsObject": {
"path": [],
"value": { "code": "A", "active": true }
}
}
}
)
Result
[
{ "data": { "id": 1, "code": "A", "active": true } },
{ "data": { "id": 5, "code": "A", "active": true } }
]Important: This function always treats strings case-sensitively. Case-insensitive behavior can be achieved using other predicate inputs.
Performs an object-has-key comparison. The predicate matches when the JSON field value contains a key matching the input value.
Payload
[
{ "id": 1, "metadata": { "user": { "id": "example" } } },
{ "id": 2, "metadata": { "user": { "id": null } } },
{ "id": 3, "metadata": { "user": { "id": "test" } } },
{ "id": 4 }
]Transform
$predicateFilter(
$,
{
"metadata": {
"_has": {
"path": ["user"],
"value": "id"
}
}
}
)
Result
[
{ "id": 1, "metadata": { "user": { "id": "example" } } },
{ "id": 2, "metadata": { "user": { "id": null } } },
{ "id": 3, "metadata": { "user": { "id": "test" } } }
]All prior predicate inputs (_eq/_isNull/_in/etc.) can be used on JSON objects as well. These input values can be provided in two ways.
Nested style — predicate inputs can be nested under any number of property names, implicitly defining the path and value to test the predicate against:
/* Nested Style (implicit `path`/`value`) */
$predicateFilter(
[
{ "id": 1, "metadata": { "user": { "id": "example" } } },
{ "id": 2, "metadata": { "user": { "id": null } } },
{ "id": 3, "metadata": { "user": { "id": "test" } } },
{ "id": 4 }
],
{
"metadata": {
"user": {
"id": { "_in": ["example", "test"] }
}
}
}
)
/* ->
[
{ "id": 1, "metadata": { "user": { "id": "example" } } },
{ "id": 3, "metadata": { "user": { "id": "test" } } }
]
*/
This approach is intuitive, but can lead to some issues when property names conflict with predicates (see Special Cases below). It also doesn't translate as neatly to query filters, since this structure doesn't match the JSONPredicateInput type used for JSONObject query fields:
{
"metadata": {
"user": {
"id": {
"_in": ["example", "test"],
"_lt": "foobar"
}
}
}
}JSON predicate input style — the path/value object can be provided to any predicate input to run that predicate against the given path on that field value:
/* JSON Predicate Input Style (explicit `path`/`value`) */
$predicateFilter(
[
{ "id": 1, "metadata": { "user": { "id": "example" } } },
{ "id": 2, "metadata": { "user": { "id": null } } },
{ "id": 3, "metadata": { "user": { "id": "test" } } },
{ "id": 4 }
],
{
"metadata": {
"_in": {
"path": ["user", "id"],
"value": ["example", "test"]
}
}
}
)
/* ->
[
{ "id": 1, "metadata": { "user": { "id": "example" } } },
{ "id": 3, "metadata": { "user": { "id": "test" } } }
]
*/
This approach is more explicit and better reflects the JSONPredicateInput type used for filtering JSONObject fields. However, it is more awkward to compose complex object filters in this way, requiring the use of an _and predicate to apply multiple filters to the same object:
{
"_and": [
{
"metadata": {
"_in": {
"path": ["user", "id"],
"value": ["example", "test"]
}
}
},
{
"metadata": {
"_lt": {
"path": ["user", "id"],
"value": "foobar"
}
}
}
]
}Predicates can be logically combined under _and/_or/_not as follows:
{
"_and": [ { "...predicate 1": {} }, { "...predicate 2": {} } ],
"_or": [ { "...predicate 1": {} }, { "...predicate 2": {} } ],
"_not": { "...predicate": {} }
}-
_andpasses if all predicates in the array pass. -
_orpasses if any predicate in the array passes. -
_notpasses if the given predicate does not pass.
Predicate filters can be applied to two kinds of payloads: arrays and objects.
Array payloads are filtered in a similar way as with the $filter function. Each element of the array is tested individually and included in the result only if it satisfies the provided predicate.
$predicateFilter(
[
{ "id": 1, "code": "A" },
{ "id": 2, "code": "B" },
{ "id": 3, "code": "a" }
],
{ "code": { "_eq": "A" } }
)
/* ->
[
{ "id": 1, "code": "A" },
{ "id": 3, "code": "a" }
]
*/
Object payloads are filtered in a similar way as with the $sift function. Each property of the object is included in the result only if its value satisfies the provided predicate.
$predicateFilter(
{
"foo": { "id": 1, "code": "A" },
"bar": { "id": 2, "code": "B" },
"baz": { "id": 3, "code": "a" }
},
{ "code": { "_eq": "A" } }
)
/* ->
{
"foo": { "id": 1, "code": "A" },
"baz": { "id": 3, "code": "a" }
}
*/
Dates in JSON data are typically represented as formatted strings. This is also true for query filters against DateTime fields, since the GraphQL API knows which fields are supposed to be dates and which fields are just plain strings.
This is not true for the $predicateFilter binding; it does not know when a given string is supposed to be a date or not, and therefore will not compare formatted strings correctly as dates.
For example:
/* THIS WILL NOT FILTER DATES PROPERLY */
$predicateFilter(
[
{ "id": 0, "code": "CODE-A", "time": "2024-01-01T00:00:00.000-04:00" },
{ "id": 1, "code": "CODE-B", "time": "2024-01-01T00:00:00.000-02:00" },
{ "id": 2, "code": "CODE-C", "time": "2024-01-01T00:00:00.000+00:00" },
{ "id": 3, "code": "CODE-D", "time": "2024-01-01T00:00:00.000+02:00" },
{ "id": 4, "code": "CODE-E", "time": "2024-01-01T00:00:00.000+04:00" }
],
{ "time": { "_gte": "2024-01-01T00:00:00.000Z" } }
)
/* -> [] (INCORRECT) */
When working with dates, ensure that both your payload and predicate fields are cast to Date objects or moment instances if you want to compare them:
$predicateFilter(
[
{ "id": 0, "code": "CODE-A", "time": $moment("2024-01-01T00:00:00.000-04:00") },
{ "id": 1, "code": "CODE-B", "time": $moment("2024-01-01T00:00:00.000-02:00") },
{ "id": 2, "code": "CODE-C", "time": $moment("2024-01-01T00:00:00.000+00:00") },
{ "id": 3, "code": "CODE-D", "time": $moment("2024-01-01T00:00:00.000+02:00") },
{ "id": 4, "code": "CODE-E", "time": $moment("2024-01-01T00:00:00.000+04:00") }
],
{ "time": { "_gte": $moment("2024-01-01T00:00:00.000Z") } }
)
/* ->
[
{ "id": 0, "code": "CODE-A", "time": "2024-01-01T04:00:00.000Z" },
{ "id": 1, "code": "CODE-B", "time": "2024-01-01T02:00:00.000Z" },
{ "id": 2, "code": "CODE-C", "time": "2024-01-01T00:00:00.000Z" }
]
*/
Sometimes, payload elements will contain properties with names matching predicate input names (like _eq or _in).
For an (admittedly contrived) example, you might want to remove filters from a WhereInput object when they contain "_isNull": true:
/* THIS WILL NOT FILTER PROPERLY */
$predicateFilter(
/* A hypothetical WhereInput to be used in a query */
{
"name": { "_contains": "foo" },
"metadata": { "_isNull": false },
"userId": { "_in": ["example", "test"], "_isNull": true }
},
/* trying to filter out fields containing `{ "_isNull": true }` */
{ "_not": { "_isNull": { "_eq": true } } }
)
The property name "_isNull" conflicts with the _isNull predicate input, making the filter ambiguous. In these ambiguous cases, the $predicateFilter binding always prefers to interpret it as a predicate instead of an implicit path. To disambiguate, use the explicit path/value style described in the JSON Predicate Inputs section above:
$predicateFilter(
{
"name": { "_contains": "foo" },
"metadata": { "_isNull": false },
"userId": { "_in": ["example", "test"], "_isNull": true }
},
{
"_not": {
/* the `path`/`value` style for JSON properties is unambiguous */
"_eq": {
"path": ["_isNull"],
"value": true
}
}
}
)
/* ->
{
"name": { "_contains": "foo" },
"metadata": { "_isNull": false }
}
*/
(Boolean: defaults to false)
While false (the default), string values will be compared case-insensitively. (Both predicate and payload field values will be converted to lowercase for comparison.) This reflects the behavior of a Fuuz GraphQL API, which matches string fields case-insensitively.
While true, string fields will be kept in their original casing for all comparisons.
$predicateFilter(
[
{ "id": 1, "code": "A" },
{ "id": 2, "code": "B" },
{ "id": 3, "code": "a" }
],
{ "code": { "_gte": "B" } }
)
/* -> [{ "id": 2, "code": "B" }] */
$predicateFilter(
[
{ "id": 1, "code": "A" },
{ "id": 2, "code": "B" },
{ "id": 3, "code": "a" }
],
{ "code": { "_gte": "B" } },
{ "caseSensitiveComparison": true }
)
/* ->
[
{ "id": 2, "code": "B" },
{ "id": 3, "code": "a" }
]
*/
An equality comparison. Matches when the field value equals the provided input value.
$predicateFilter(
[
{ "id": 1, "label": "One" },
{ "id": 2, "label": "Two" },
{ "id": 3, "label": "Three" },
{ "id": 4, "label": "Four" }
],
{
"id": { "_eq": 1 }
}
)
Result:
[{ "id": 1, "label": "One" }]Performs an object contains comparison. The predicate matches when the JSON field contains the provided JSON path/value entries.
$predicateFilter(
[
{ "data": { "id": 1, "code": "A", "active": true } },
{ "data": { "id": 2, "code": "B", "active": true } },
{ "data": { "id": 3, "code": "A", "active": false } },
{ "data": { "id": 4, "code": "B", "active": false } },
{ "data": { "id": 5, "code": "A", "active": true } }
],
{
"data": {
"_containsObject": {
"path": [],
"value": { "code": "A", "active": true }
}
}
}
)
Result:
[
{ "data": { "id": 1, "code": "A", "active": true } },
{ "data": { "id": 5, "code": "A", "active": true } }
]Object payloads are filtered in a similar way as with the $sift function. Each property of the object is included in the result only if its value satisfies the provided predicate.
$predicateFilter(
{
"foo": { "id": 1, "code": "A" },
"bar": { "id": 2, "code": "B" },
"baz": { "id": 3, "code": "a" }
},
{ "code": { "_eq": "A" } }
)
Result:
{
"foo": { "id": 1, "code": "A" },
"baz": { "id": 3, "code": "a" }
}- Expressions
- Higher-Order-Functions
- How-to-Create-APIs-Using-Data-Flows-in-Fuuz
- How-to-Create-a-RESTful-API-Using-the-Fuuz-Platform
- How-to-use-API-Explorer-and-GraphQL-to-Query-Data-in-Fuuz-for-Beginners
Source: support.fuuz.com
Getting Started (14)
- Access Field Level Help within the Fuuz Platform
- Field-Level Help
- Fuuz Platform 101: Low/No-Code Technology in Manufacturing
- Fuuz Platform Architecture
- Getting to Know the Fuuz Platform
- Logging into Fuuz – Cloud Access
- Manage what displays in Field Level Help throughout Fuuz
- Recovering Your Fuuz Account
- Sharing A Page
- Switching Between Apps in Fuuz
- Switching between Fuuz Environments (Build, QA, Production)
- Trouble Logging Into Fuuz
- Unique Email Plus Addressing
- Welcome To Industry Accelerators!
Training Guides (52)
Applications
- Brand and Configure Your Application
- Create an Application
- Deactivate (Retire) an Application
- Find Pages Beyond the Left Menu
- Install a Fuuz Package
- Navigate the Application Designer
- Retire an Application
Access & Users
- Approve Access Requests
- Approve Application Access Requests
- Configure the Internal Password Policy
- Create a Role
- Create an API Key
- Deactivate and Reactivate a User
- Grant Permissions with Policies
- Investigate Login Activity
- Invite a User to an Application
- Manage App Users
- Request Access to an Application
- Switch Applications, Roles, and Environments
- Understand Developer Access
- Understand Web Access
- Use the User Menu (Profile, Theme, and More)
Data Models & Schema
- Add a Custom Field
- Create a Data Model
- Create a Sequence
- Design Model Fields in the Schema Designer
- Relate Two Data Models
Screens
Weather Lookup Series — guided 3-part build
- Part 1 · Build the Screen (Beginner)
- Part 2 · Store the Readings (Intermediate)
- Part 3 · Watched Locations & Scheduled Capture (Advanced)
Data Flows & Integrations
- Call an External API with a Flow
- Connect to External Systems
- Create a Data Flow
- Create a Notification Channel
- Create a Webhook
- Save Queries, Scripts, and Data Mappings
- Schedule a Data Flow
- Use the Script Editor
Data, Reporting & Monitoring
- Browse Data with Data Explorer
- Build a Document (Report or Label)
- Check Component References
- Create Configuration Records (Modules, Units, Calendars, and More)
- Explore the GraphQL API
- Export Data
- Import Data into an Application
- Investigate Application Logs
- Save an Export Configuration
- Trace a Data Change
Enterprise & Organizations
Platform Concepts & Architecture (10)
- Bridging the Red and Blue Data Divide - How Fuuz Became the First Industrial Platform to Merge Operational and Business Intelligence
- Claude AI Skills for the Fuuz Platform
- Cool Things we built with Fuuz Episode 1 12.5.2025 (Public)
- Differences between MES and ERP from an ERP Consultant Eric Kimberling
- Fuuz can be your "Connected Worker Platform"
- Listen and Learn what MES is and what makes it unique
- Manufacturers struggle with Build versus Buy for their MES and what are the Core 4 Elements
- Stock Price Application
- Why All Manufacturers Build their MES System Part 1
- Why All Manufacturers Build their MES System Part 2
Screens & Application Design (17)
- Application Designer Guide
- Array Input
- Combobox
- Dynamic Field Configurations
- Fuuz Deployment Methodologies
- Fuuz Form Detail Screen Specification
- Historical Data Table Screen Design Standard
- JSON
- JSON Form Fields in Action Steps
- JSON Schema Inputs
- Master Data Table Screen Design Standard
- Mobile Screen Design Standard
- Screen Context Container
- Screen Generation (AI) Flow Template V1.5.1
- Setup Data Table Screen Design Standard
- Table Column Conditional Formatting
- Transform Data in a Column
Data Models & Schema (8)
Data Flows & Scripting (51)
Designing Flows
- Data Flow Design Standards
- Data Flow Logs
- Debugging and Testing our Fuuz Data Flows
- Flow Schedules
- Fuuz Data Flows enable DataOps at Scale, ETL, iPaaS and more
- How to Create APIs Using Data Flows in Fuuz
- How To General E-Commerce Integrations using Data Flows in Fuuz iPaaS
- How to Setup a daily file import using Fuuz Data Flows
- Managing Large Datasets in Fuuz: Data Flow Engine Performance Optimization
- The Power of Data Flows - Unlocking Industrial Intelligence with Fuuz
- Using Fuuz with FTP integrations and Data Flows iPaaS
Data Flow Nodes
- Data Flow Nodes Reference
- Debugging & Context Nodes
- Flow Control Nodes
- Fuuz Platform Nodes
- IIoT & Gateway Nodes
- Integration Nodes
- Notification Nodes
- Source & Trigger Nodes
- Transform Nodes
JSONata Reference
- Aggregation Functions
- Array Functions
- Boolean Functions
- Boolean Operators
- Comparison Operators
- Composition
- Construction
- Constructs
- Custom Fuuz Only JSONata Library
- Date Time Functions
- Date Time Processing
- Expressions
- Fuuz Bindings: $predicateFilter
- Higher Order Functions
- Jsonata Tutorial
- Numeric Functions
- Numeric Operators
- Object Functions
- Other Operators
- Path Operators
- Predicate Expressions
- Processing Model
- Regex
- Simple Queries
- Slow Transform Performance: JSONata vs JavaScript Optimization Guide
- Sorting Grouping and Aggregation
- String Functions
Scripting
Integrations & Connectors (30)
General & iPaaS
- API Keys
- Cloud Connectors - Complete Reference Guide
- Connecting a CRM with your ERP using Fuuz
- Connecting a Vending Machine to your ERP system using Fuuz
- Creating a Scheduled Integration & Sending a CSV File in an Email
- Debug a NetSuite SOAP API integration
- Fuuz Connections help you integrate your Systems and Devices
- Fuuz has lists of Connectors and Drivers you can use
- Fuuz has pre-built integration Connectors
- How to create a check an ODBC connection with another system
- How to Create a RESTful API Using the Fuuz Platform
- How to create a simple Integration and Store data in Fuuz
- How To Design or Configure Policies and Policy Groups for my App in Fuuz
- How to Integrate Fuuz with another product or another API
- How to Integrate with an HR system like ADP using Fuuz iPaaS
- How to use API Explorer and GraphQL to Query Data in Fuuz for Beginners
- How you Integrate your ERP with your MES
- Industry 3 and Industry 4 differences in ERP and MES Integrations
- Integrated Carrier Package
- Make REST-Based Calls With An API Key
- Policy Groups
- System connectivity validation - testing a connection when your 3rd party moves its hosting
- Using Fuuz as an iPaaS to Connect - to an API, Collect - Data from the API, Store - that data in Fuuz tables
Plex
- How to connect using Plex UX datasources from Fuuz iPaaS
- How to integrate with Plex Classic using Fuuz iPaaS
- How to Setup and Connect to Plex APIs
EDI
IIoT & Edge Gateway (18)
- Edge Connections: Complete Industrial Integration Reference
- Edge Gateway Flows
- Edge Gateway Installation Step-by-Step
- Edge to Cloud Infrastructure
- Gateway Deployment & Architecture
- Gateway System Requirements
- How IIoT fits into the Industrial Data "Stack"
Physical Device Connectors
- Connecting To Kepware OPCUA Server
- Fanuc Robot Connectivity using Edge Gateway
- HMI Template Standard - ISA-101 Compliant
- How to connect OPC/UA simulator to the Edge Gateway
- Modbus TCP
- MQTT
- Omron PLC/HMI NX102 Connectivity with Edge Gateway
Edge Data Connectors
Reporting, Documents & Dashboards (8)
- Building a Non-Conformance Report (NCR) Application in Fuuz
- Create responsive structured dashboard layouts using the Grid Container and Grid Cell components
- How to add visualizations (charts and graphs) to reports in Fuuz for Beginners
- How to build real-time reports in Fuuz from scratch for Beginners
- How to modify existing reports in Fuuz for Beginners
- Non-Conformance Report Accelerator
- Printing Documents
- Printing Documents From Fuuz
Administration & Access Control (27)
- Access Control
- Access Requests
- Access Requests: Overview
- Access Type Overview
- Access Types
- Add Users to Fuuz Apps
- App Admin Access
- App Management
- App Users
- Applications (Tenants)
- Authentication Events
- Change a User's Access Type
- Configurations
- Create Users and Set Access Type
- Enterprise Admin Overview
- Enterprise Users
- Enterprise Users vs Access Requests
- How To Login to your Fuuz Enterprise - Non Single Sign On
- How To Login to your Fuuz Enterprise - Single Sign On
- Identity Providers
- Notifications
- Notifications
- Organizations
- Roles
- Settings
- Switching my active Role within Fuuz
- Troubleshooting User Login Errors Due to Identity Provider Misconfiguration
Data Management (8)
Accelerators, Templates & Packages (8)
- Create a Quality Batch Golden Record Analysis Tool in Fuuz
- Fuuz Developer 101 Bootcamp - 2026 Schedule & Enrollment
- Fuuz Developer 101 Bootcamp - Program Overview
- Fuuz Industry Accelerators - Installation & Best Practices
- Fuuz Industry Accelerators - Overview
- How-To: Managing Green/Blue Deployments with Fuuz Package Management Zero-Downtime
- Model Agnostic Scheduling System APS
- Setting up In-House Fuuz
Design Standards (1)
How-To Guides (8)
- Connecting to Fuuz from a remote system to execute a Fuuz API
- Connecting to Fuuz from a remote system to execute a Fuuz API - Extended Features Part 2
- Data Mapping
- Document your Application using Atlassian Confluence and our Pre-Built App
- Fuuz Platform Capabilities
- How to add multiple data records to the Fuuz database with a single API call
- How to on Best Practices for Designing Flows in Fuuz
- Using the Transformation Explorer
FAQ & Troubleshooting (1)
Release Notes (117)
2026
- 2026.1 (January 2026)
- 2026.2 (February 2026)
- 2026.3 (March 2026)
- 2026.4 (April 2026)
- 2026.5 (May 2026)
- 2026.6 (June 2026)
2025
- 2025.1 (January 2025)
- 2025.10 (October 2025)
- 2025.11 (November 2025)
- 2025.12 (December 2025)
- 2025.2 (February 2025)
- 2025.4 (April 2025)
- 2025.5 (May 2025)
- 2025.6 (June 2025)
- 2025.7 (July 2025)
- 2025.8 (August 2025)
- 2025.9 (September 2025)
2024
- 2024.1 (January 2024)
- 2024.10 (October 2024)
- 2024.11 (November 2024)
- 2024.12 (December 2024)
- 2024.2 (February 2024)
- 2024.3 (March 2024)
- 2024.4 (April 2024)
- 2024.5 (May 2024)
- 2024.6 (June 2024)
- 2024.7 (July 2024)
- 2024.8 (August 2024)
- 2024.9 (September 2024)
2023
- 2023.5 (May 2023)
- 2023.1 (January 2023)
- 2023.10 (October 2023)
- 2023.11 (November 2023)
- 2023.12 (December 2023)
- 2023.2 (February 2023)
- 2023.3 (March 2023)
- 2023.4 (April 2023)
- 2023.6 (June 2023)
- 2023.7 (July 2023)
- 2023.8 (August 2023)
- 2023.9 (September 2023)
2022
- 2022 Q1 Fuuz Package Updates (03/11/2022)
- 2022 Q1 Fuuz Release Notes v3.87.0 (03/17/2022)
- 2022 Q1 MFGx Release Notes v3.78.0 (01/06/2022)
- 2022 Q1 MFGx Release Notes v3.79.0 (01/13/2022)
- 2022 Q1 MFGx Release Notes v3.80.0 (01/20/2022)
- 2022 Q1 MFGx Release Notes v3.81.0 (01/27/2022)
- 2022 Q1 MFGx Release Notes v3.82.0 (02/03/2022)
- 2022 Q1 MFGx Release Notes v3.83.0 (02/10/2022)
- 2022 Q1 MFGx Release Notes v3.85.0 (02/28/2022)
- 2022 Q2 Fuuz Release Notes v3.90.0 (04/14/2022)
- 2022 Q2 Fuuz Release Notes v3.91.0 (04/21/2022)
- 2022 Q2 Fuuz Release Notes v3.92.0 (04/28/2022)
- 2022 Q2 Fuuz Release Notes v3.93.0 (05/06/2022)
- 2022 Q2 Fuuz Release Notes v3.94.0 - v3.97.0 (June 13, 2022)
- 2022 Q2 Fuuz Release Notes v3.98.0 (06/16/2022)
- 2022 Q2 Fuuz Release Notes v3.99.0 (06/30/2022)
- 2022 Q3 Fuuz Release Notes v3.100.0 🎉 (07/06/2022)
- 2022 Q3 Fuuz Release Notes v3.101.0 (07/21/2022)
- 2022 Q3 Fuuz Release Notes v3.102.0 (08/11/2022)
- 2022 Q3 Fuuz Release Notes v3.103.0 (08/18/2022)
- 2022 Q4 Fuuz Release Notes v3.107.0 - v3.109.0 (10/27/2022)
2021
- 2021 Q1 MFGx Release Notes v3.29.0 (1/7/2021)
- 2021 Q1 MFGx Release Notes v3.30.0 (1/14/2021)
- 2021 Q1 MFGx Release Notes v3.34.0 (2/4/2021)
- 2021 Q1 MFGx Release Notes v3.37.0 (2/26/2021)
- 2021 Q1 MFGx Release Notes v3.38.0 (3/5/2021)
- 2021 Q1 MFGx Release Notes v3.40.0 (3/25/2021)
- 2021 Q1 MFGx.io Release Notes v3.32.0 (1/21/2021)
- 2021 Q1 MFGx.io Release Notes v3.33.0 (1/28/2021)
- 2021 Q2 MFGx Release Notes v3.41.0 (4/1/2021)
- 2021 Q2 MFGx Release Notes v3.42.0 (4/8/2021)
- 2021 Q2 MFGx Release Notes v3.43.0 (4/16/2021)
- 2021 Q2 MFGx Release Notes v3.44.0 (4/22/2021)
- 2021 Q2 MFGx Release Notes v3.45.0 (4/29/2021)
- 2021 Q2 MFGx Release Notes v3.47.0 (5/13/2021)
- 2021 Q2 MFGx Release Notes v3.48.0 (5/20/2021)
- 2021 Q2 MFGx Release Notes v3.48.0 (5/27/2021)
- 2021 Q2 MFGx Release Notes v3.50.0 (6/03/2021)
- 2021 Q2 MFGx Release Notes v3.51.0 (6/10/2021)
- 2021 Q2 MFGx Release Notes v3.52.0 (6/17/2021)
- 2021 Q2 MFGx Release Notes v3.54.0 (6/28/2021)
- 2021 Q3 Fuuz Release Notes v3.58.0 (7/22/2021)
- 2021 Q3 MFGx Release Notes v3.55.0 (7/1/2021)
- 2021 Q3 MFGx Release Notes v3.60.0 (8/5/2021)
- 2021 Q3 MFGx Release Notes v3.61.0 (8/17/2021)
- 2021 Q3 MFGx Release Notes v3.62.0 (8/19/2021)
- 2021 Q4 MFGx Release Notes v3.68.0 (10/8/2021)
- 2021 Q4 MFGx Release Notes v3.69.0 (10/14/2021)
- 2021 Q4 MFGx Release Notes v3.70.0 (10/21/2021)
- 2021 Q4 MFGx Release Notes v3.71.0 (10/28/2021)
- 2021 Q4 MFGx Release Notes v3.72.0 (11/04/2021)
- 2021 Q4 MFGx Release Notes v3.73.0 (11/11/2021)
- 2021 Q4 MFGx Release Notes v3.74.0 (11/19/2021)
- 2021 Q4 MFGx Release Notes v3.75.0 (12/02/2021)
- 2021 Q4 MFGx Release Notes v3.76.0 (12/09/2021)
- 2021 Q4 MFGx Release Notes v3.77.0: The Holiday Update (12/16/2021)
2020
- 2020 Q2 MFGx Release Notes v2.32.0 (4/9/2020)
- 2020 Q2 MFGx Release Notes v2.33.0 (4/16/2020)
- 2020 Q2 MFGx Release Notes v2.35.0 (4/30/2020)
- 2020 Q2 MFGx Release Notes v3.5.0 (6/18/2020)
- 2020 Q2 MFGx Release Notes v3.6.0 (6/25/2020)
- 2020 Q2 MFGx.io Release Notes v2.32.0 (4/9/2020)
- 2020 Q3 MFGx Release Notes v3.10.0 (7/23/2020)
- 2020 Q3 MFGx Release Notes v3.11.0 (7/30/2020)
- 2020 Q3 MFGx Release Notes v3.13.0 (8/13/2020)
- 2020 Q3 MFGx Release Notes v3.17.0 (9/21/2020)
- 2020 Q3 MFGx Release Notes v3.7.0 (7/6/2020)
- 2020 Q3 MFGx Release Notes v3.8.0 (7/9/2020)
- 2020 Q4 MFGx Release Notes v3.20.0 (10/13/2020)
- 2020 Q4 MFGx Release Notes v3.21.0 (10/15/2020)
- 2020 Q4 MFGx Release Notes v3.22.1 (10/22/2020)
- 2020 Q4 MFGx Release Notes v3.23.0 (11/5/2020)
- 2020 Q4 MFGx Release Notes v3.24.0 (11/12/2020)
- 2020 Q4 MFGx Release Notes v3.26.0 (12/3/2020)
- 2020 Q4 MFGx Release Notes v3.27.0 (12/10/2020)
- 2020 Q4 MFGx Release Notes v3.28.0 (12/17/2020)