-
Notifications
You must be signed in to change notification settings - Fork 0
Training Build a Weather Lookup Screen
Weather Lookup series · Part 1 of 3 · Level: Beginner. Start here — a complete, model-less app from a connection, a flow, and a screen. When it works, continue to Part 2 — Store the Readings (intermediate) and Part 3 — Watched Locations & Scheduled Capture (advanced). Each part builds directly on the one before.
What you'll learn: how to wire an external API into a screen with no data model — a connection, a data flow, and a screen where a user enters a value, clicks a button, and sees a richly formatted result. This is the capstone that ties the connection and flow training into one working application, and it covers the specific nuances that make a model-less, flow-driven screen behave.
You need: Administrator or Developer access type in an application (UI label "Tenant").
Time: 30–45 minutes.
Example API used: the free, no-auth wttr.in weather service (https://wttr.in/{zip}?format=j1 — ZIP in, JSON out, no key).

Four pieces work together. The user types a ZIP and clicks Get Weather; the button tells the form to load; the form's data transform runs a data flow that calls the weather API and reshapes the response, then builds markdown strings; Markdown Text elements render them.
ZIP input ─▶ Get Weather button ─▶ $components.Form1.fn.loadData()
│
Form1 Data Transform
│
$executeFlow('weatherLookupFlow', { zip })
│
wttr.in → reshaped fields → weatherMd / howtoMd
│
Markdown Text elements render the markdown
No data model is involved — the flow's response feeds the form directly. That single fact drives almost every nuance below.
- Go to Left menu → Integrations → Connections → +.
-
Name
Weather API, ConnectorHTTP, Urlhttps://wttr.in. Leave Credentials blank (no auth); Headers can stay{}. - Click the orange +.
Nuance — why
?format=j1: a plain request towttr.inreturns an ASCII/HTML weather card. Appending?format=j1(set later, in the flow's path) forces the structured JSON response we can parse. No API key and no special headers are needed for thej1format.
-
Go to Left menu → Flows & Scripts → Data Flows → +. Name it
Weather Lookup Flow, Type → Screen, pick a Module, → create. Open the flow designer (⑂). -
Drag a Source node (Debugging) on. Set its Payload to
{"zip": "90210"}so you can test the flow by itself. -
Search the Toolbox for "HTTP", expand Integration, drag the HTTP node on:
-
Connection
Weather API, MethodGet -
Path: open the
</>code editor and enter the JSONata'/' & zip & '?format=j1'(builds the path from the incomingzip).
-
Connection
-
Drag a JSONata node (Scripts) on and reshape the bulky
j1payload into clean fields:{ "location": nearest_area[0].areaName[0].value, "region": nearest_area[0].region[0].value, "tempF": current_condition[0].temp_F, "feelsLikeF": current_condition[0].FeelsLikeF, "conditions": current_condition[0].weatherDesc[0].value, "humidity": current_condition[0].humidity, "windMph": current_condition[0].windspeedMiles, "windDir": current_condition[0].winddir16Point, "forecast": weather.{ "date": date, "maxF": maxtempF, "minF": mintempF, "conditions": hourly[4].weatherDesc[0].value } } -
Wire Source → HTTP → JSONata. Run from the Source's orange trigger and confirm the console shows clean weather.
-
File → Save, then File → Deploy.
⚠️ Biggest gotcha — deploy everything.$executeFlow(...)calls the deployed version of a flow. If the flow (or, later, the screen) is only saved and not deployed, the call returns HTTP 400 / "Error retrieving data" and the flow never runs (you'll see no entry in Data Flow Logs). Deploy the flow now, and deploy the screen at the end.
Screens & Documents → Screens → +, name it Weather Lookup, pick a Module, open the screen designer, and choose the Form template. When it asks for a data model, cancel the model dialog — you keep the rendered form scaffold without binding it to a model.
Nuance — why the Form template, not Blank. Leaf elements (inputs, buttons, text) only drop reliably into visible, sized containers. An empty Blank-screen container renders as an invisible thin strip and drops miss it. The Form template gives you a rendered scaffold with real drop targets, plus the Form element that will do the data work.
Build this structure (the exact tree from the finished screen):
Screen
├─ Container1 (the top action bar)
│ └─ ActionButton "Get Weather"
└─ Form1 ← the data engine
└─ Container2
└─ Container3
├─ Number1 ZIP Code (Data Path: zip)
└─ Container6 (a ROW container) ← this creates the two columns
├─ Text1 weatherMd (Format: Markdown)
└─ Text4 howtoMd (Format: Markdown)
Nuance — two columns = one row container. The side-by-side "weather | how it's wired" layout is simply a Container set to a row (
Container6) holding the two Markdown Text elements. Set the container's flex direction to row (andflexWrapon if you want it to stack on narrow screens). The Get Weather button sits in the top action bar container.
Drop a Number input into the form. Set Data Path zip, Label ZIP Code. (Dropping it into the form auto-links it to Form1 as its Form Element.) Set its Format to 0 so it shows the raw ZIP (90210) instead of a thousands-separated number (90,210).
Nuance — Number vs Text for ZIP. With Format =
0a Number input displays cleanly (no comma) and works great for most US ZIPs. It still drops leading zeros, though — a New England ZIP like02134becomes2134. If you need those, use a Text input with a 5-digit pattern, or zero-pad in the flow ($pad($string(zip), -5, '0')).
Drop an Action button into the action bar. In Action → Action Steps, add one Transformation step:
$components.Form1.fn.loadData()
Nuance —
loadData()is the trigger. Because the data lives on the form (not a table), the button doesn't run a query or call the flow directly — it tells the form to (re)run its own data transform viafn.loadData(). This is the piece that connects "button click" to "fetch weather."
Select Form1:
-
Data → Auto Load: OFF. With no data model, an auto-load would try to build a GraphQL query and error. Off means the form only loads when the button calls
loadData(). -
Advanced → Data Transform Remote Execution: OFF. The transform reads
$components.Form1.formState.values.zip, which only exists client-side. ($executeFlowitself still runs the flow on the server — only the transform expression evaluates client-side.) -
Advanced → Data Transform: call the flow with the typed ZIP, then build the markdown. This single transform emits both
weatherMdandhowtoMd:
(
$w := $exists($components.Form1.formState.values.zip)
? $executeFlow('weatherLookupFlow',
{'zip': $string($components.Form1.formState.values.zip)})
: {};
/* condition -> emoji */
$icon := function($c){(
$l := $lowercase($c);
$contains($l,'thunder') ? '⛈️'
: ($contains($l,'snow') or $contains($l,'sleet')) ? '❄️'
: ($contains($l,'rain') or $contains($l,'drizzle') or $contains($l,'shower')) ? '🌧️'
: $contains($l,'partly') ? '⛅'
: ($contains($l,'cloud') or $contains($l,'overcast')) ? '☁️'
: ($contains($l,'sun') or $contains($l,'clear')) ? '☀️'
: '🌡️'
)};
/* a fixed "how this is wired" panel */
$howto := '## 🛠️ How this screen is wired\n\n'
& '**1. HTTP Connection** - Weather API pointing at wttr.in, no API key.\n\n'
& '**2. Data Flow** - Weather Lookup Flow (Screen type): Source to HTTP GET, then a JSONata transform reshapes the response into clean fields plus a weatherMd markdown string.\n\n'
& '**3. Screen** - from the Form template: a ZIP Number input, a Get Weather button that calls loadData, the Form data transform that runs executeFlow and builds the markdown, and Markdown Text elements that display it.\n\n'
& '_No data model needed - the flow response feeds the form directly._';
/* add weatherMd only when we actually got data */
$weatherObj := $exists($w.location)
? $merge([$w, {'weatherMd':
'# ' & $icon($w.conditions) & ' ' & $w.location & ', ' & $w.region & '\n\n'
& '## ' & $w.tempF & '°F · ' & $w.conditions & '\n\n'
& '🌡️ Feels like **' & $w.feelsLikeF & '°F** · 💧 Humidity **' & $w.humidity & '%** · 💨 Wind **' & $w.windMph & ' mph ' & $w.windDir & '**\n\n'
& '---\n\n### 📅 3-Day Forecast\n\n'
& '| Day | Sky | Low | High | Conditions |\n|---|---|---|---|---|\n'
& $join($w.forecast.('| ' & date & ' | ' & $icon(conditions) & ' | ' & minF & '°F | ' & maxF & '°F | ' & conditions & ' |'), '\n')
}])
: $w;
/* howtoMd is always emitted; weatherMd only after a successful lookup */
$merge([$weatherObj, {'howtoMd': $howto}])
)
Nuance — the
$exists($w.location)guard. When there's no ZIP yet (or the flow returns nothing), the guard returns the bare object so the transform never errors on missing fields.howtoMdis added in the final$mergeso the "how it's wired" panel shows regardless.Nuance — building markdown in JSONata. Concatenate with
&, use\nfor newlines, and| col | col |rows joined with\nfor tables. Emoji and°render fine. Keep the markdown light on(){}and backticks — the code editor auto-closes those, and a long literal full of them is easy to corrupt; prefer bold/headings/lists and-dashes.
Drop two Display → Text elements into the row container (Container6). For each, set Behavior → Format = Markdown and Data Path to weatherMd and howtoMd respectively.
⚠️ Gotcha — render markdown via a form key, never the element's own transform. A Display→Text element's own Data Transform (returning a standalone string) crashes the screen render. Always produce the markdown as a key in the form's data transform and bind the element's Data Path to that key — exactly howweatherMd/howtoMdwork here.
File → Save, then Deploy, and add a Route so users can reach it.
Open the screen, type a ZIP (e.g. 90210), click Get Weather — the flow runs and the formatted weather appears on the left, with the "how it's wired" panel on the right.

- The flow, run from its Source node, returns clean weather fields in the console.
- On the screen, entering a ZIP and clicking Get Weather renders the location, current conditions, and a 3-day forecast table.
- If you see "Error retrieving data": confirm the flow and screen are deployed, Auto Load is off, and Remote Execution is off on the form's data transform.
- If the screen crashes on load: a display element has its own Data Transform — move that logic into the form's data transform and bind the element by Data Path instead.
| Nuance | What to do |
|---|---|
$executeFlow returns 400 |
Deploy the flow and the screen (not just save). |
| No data model | Put the data transform on the Form; turn Auto Load off. |
| Button → fetch | Action step $components.Form1.fn.loadData(). |
$components is undefined in the transform |
Turn Data Transform Remote Execution off. |
| Markdown won't render / screen crashes | Emit a markdown key from the form transform; bind a Format=Markdown Text element — don't use the element's own transform. |
| Two columns | One row Container holding both Text elements. |
| Drops miss empty containers | Build on the Form template scaffold (visible drop targets). |
Number input shows 90,210
|
Set the Number input's Format to 0 (no thousands separator). |
| Leading-zero ZIPs lost | Number input still drops them — use a Text input or zero-pad in the flow. |
- Loading & empty states — show a "Enter a ZIP and click Get Weather" placeholder before the first lookup, and a spinner/disabled button while the flow runs.
-
Input validation — restrict ZIP to 5 digits (Text input + pattern) and handle a not-found ZIP gracefully (wttr.in echoes the nearest area; you can detect a missing
current_condition). -
Units toggle — the
j1payload carries both °F and °C / mph and km/h; add a Switch and pick the fields accordingly. -
Cache / rate limits —
wttr.inis free and rate-limited; for anything real, cache results (e.g., store the last lookup) or move to a keyed provider. - Reuse the pattern — point a new connection at any no-auth JSON endpoint and repeat: flow reshapes → form transform builds markdown → Markdown Text renders.
Part 2 — Store the Readings → Right now every lookup is throwaway. Part 2 adds a data model and writes each result into it (deduped by ZIP + date), then shows a running history on the screen.
Training: Call an External API with a Flow · Training: Connect to External Systems · Training: Create a Data Flow · Training: Generate a Screen from a Data Model
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)