Happy Friday, FME'ers! Welcome back to the TGIF FAQ Series: October edition.
This month, we've pulled together six questions for FME Flow and five for FME Form. On the Flow side: adding engines on a separate machine, getting back in after a forgotten admin password, email and proxy setup, Data Download quirks, and — with daylight saving transitions happening in a number of regions over the coming weeks — how clock changes affect your schedules. On the Form side: Java and JVM errors, reading straight out of zip files, renaming CSV attributes, garbled characters, and picking the right filter transformer. Let's get into it!
FME Flow — FAQs
1. How do I add FME Flow engines on a separate machine, and why isn't my engine host showing up under Hosts?
Start by running the full FME Flow installer on the new machine — not the standalone Engine installer — and choose the Distributed Engine setup type when it asks.
Have three things ready before you begin:
- the UNC path to your existing System Share (something like \\yourserver\FMEFlowShare)
- the hostname of your FME Flow Core
- the same database type and credentials your Core is already using
One requirement that's easy to miss: the engines have to be the same release as the Core. A 2026.1 Core needs 2026.1 engines — pairing it with 2026.2 engines isn't supported.
If the install goes through but the host never appears under Engines > Hosts, here's the checklist we usually work through:
- Database access. If FME Flow was originally installed with the Express option, the pg_hba.conf step may have been skipped.
- Name resolution. Confirm the Core can actually resolve the engine machine's hostname — a quick ping or DNS lookup will tell you.
- Database settings. Double-check DB_JDBC_URL, DB_USERNAME and DB_PASSWORD in fmeDatabaseConfig.txt.
- Time zones. The Core and engine hosts need to be in the same time zone.
- Ports. Engines register on 7070 and then move to a random port, so set FME_SERVER_PORT_POOL in fmeFlowConfig.txt and open that range along with 7069, 7071 and 7500.
One last tip: hostnames are case-sensitive here, so entering the same machine with different capitalisation can leave you with duplicate host entries.
- Adding FME Engines on a Separate Machine
- FME Flow Troubleshooting: FME Flow Engines
- Unable to Manage Engines from Web UI
2. I've forgotten the FME Flow admin password. How do I get back in?
We wish we had a magic answer here, but there's no back door by design. You have two routes: ask another administrator to change the password for you, or use the self-service reset — if it was switched on before you got locked out.
It's well worth enabling that in advance. Go to System Configuration > Security and turn on the Reset Password slider, which adds a "Forgot your password?" link to the login page. Two prerequisites: the account needs a valid email address, and System Email has to be configured first (see question 3 below).
If you're actually seeing "Login failed, please try again" and you're confident about the password, try these first:
- Check capitalisation — usernames and passwords are both case-sensitive.
- If the account comes from Active Directory, confirm the AD configuration and the account's case match what FME Flow expects.
Going forward, the simplest safeguard is keeping more than one enabled fmesuperuser account, so a single forgotten password never locks out the whole team. The installer also creates several author, guest and user accounts that are disabled by default — the Default User Accounts doc below covers what ships and what's enabled.
3. How do I get FME Flow sending email, and can I attach a file or a job log?
There are two separate places to configure email, and knowing which one you need saves a lot of hunting.
For system-level email — System Events, password reset messages — go to System Configuration > Network & Email > Email Settings. You'll fill in your SMTP server, port, account and password, connection security, and an Email From address. For ports, use 465 for SSL/TLS and 587 for StartTLS or None. There's a "Load Template" button that pre-fills the settings for common providers, and a Client ID field if you're using Microsoft OAuth against smtp.office365.com.
For email from a specific workflow, use an Automation's External Action > Email (send). Load a template, enter your SMTP credentials, set connection security, and then click Validate — that confirms the credentials work before you hit Apply, which is much nicer than discovering the problem when a job runs at 3am.
Attachments are straightforward once you're there. The Email Attachment field lets you either browse Resources for a static file, or use the drop-down to attach dynamic content such as the job log. You can also personalise the subject and body with event attributes like {job.status} and {automation.name} through the Text Editor.
- System Email
- Send Emails with Attachments From FME Flow Automations
- Send Email from Automations
- Emailer transformer
4. How do I configure a proxy for FME Flow, and what belongs in "No Proxy For"?
Proxy settings live under System Configuration > Network & Email > Proxy, where you'll find Proxy Enabled, Host, Port, No Proxy For, Authentication Required, credentials, and Authentication Method. If you have Version Control enabled, restart FME Flow afterwards so the changes take effect.
The No Proxy For list is the part most worth understanding, since it's where connections that should stay local get listed:
- Entries accept a * wildcard as a prefix or suffix — *.example.com or host.example.* both work.
- You can separate entries with a comma, semicolon, tab or Enter, but add them one at a time rather than pasting a list in, so each entry is delineated properly.
- localhost doesn't automatically cover 127.0.0.1 or ::1 — list those separately if you need them.
A handy one to know: adding FME Flow's own FQDN to this list is the usual fix for FMEFlowNotifier authorization failures and FMEFlowLogFileRetriever HTTP 403 errors.
A few limits to be aware of before you commit to a setup:
- Choosing Digest or NTLM authentication disables a documented set of features, including Web Connections, Azure AD user authentication, email-based Automations triggers and subscribers, Azure Event Grid, and Dropbox triggers. Basic keeps all of those available.
- Non-HTTP protocols never go through the proxy at all — that covers directory watching, FTP, SFTP, JMS, UDP and WebSocket.
- If your workspace contains Python, HTTPCaller and FMEFlowJobSubmitter will ignore the proxy exceptions unless you add ENABLE_ENGINEPROXY=false under FME SERVER SETTINGS START in fmeFlowConfig.txt.
Finally, a licensing note: dynamic (CPU Usage) engines rely on automatic licensing, so they need outbound access to the licensing URLs listed below. If FME Flow can't reach the licensing backend for seven consecutive days, dynamic engines are disabled even when you still have credits.
- Proxy
- FME Flow Troubleshooting: Proxies
- FME Flow Automatic Licensing URLs
- FME Flow Troubleshooting: Licensing
5. Why doesn't my Data Download app return a download link, or return all the files it wrote?
Worth checking one thing first: Data Download can't be used on a workspace whose destination is a database format. Output always comes back as a zip, which is also why folder-based formats like Shapefile and File Geodatabase work nicely through it.
If you're getting a zip but files are missing from it, the cause is usually how the writer path is built. Combining $(FME_SHAREDRESOURCE_DATA) with attribute values in a single writer dataset path — something like $(FME_SHAREDRESOURCE_DATA)\@Value(name).ext — prevents Data Download from packaging correctly, even though the same workspace runs fine through Job Submitter. Two ways to fix it:
- Avoid mixing a parameter and an attribute in the same path, or
- Leave FME_SHAREDRESOURCE_DATA unset at publish time so FME Flow resolves it at runtime.
If you're calling this programmatically and no link appears at all, there's a simple explanation: resultDatasetDownloadURL is never populated by the V3 submit or transact endpoints. A download URL only comes from running the workspace through the Data Download service itself — a workspace webhook is a common way to do that.
- Data Download Service
- Data Download Service Not Including All Written Files
- FME Flow REST API V3 Doesn't Return a resultDatasetDownloadUrl
- Which FME Flow Service Should I Use?
6. How do time zones and daylight saving affect my schedules?
For the most part the Web UI displays and accepts times in your own local time zone, which is what you'd hope for. There are two exceptions worth knowing:
- Schedule and Automation schedule-trigger recurrences of type Basic or CRON Expression need to be expressed in the time zone of the FME Flow instance that runs them, and cron expressions are displayed in that instance's time zone too.
- Downloaded log files carry the producing Flow's time zone, even though the Resources page shows timestamps in yours.
The daylight saving behaviour is the one that tends to come up twice a year: if you've set Repeat on Interval, that schedule doesn't adjust when the clocks change, so it shifts by an hour relative to local time. Basic and CRON schedules follow the server's zone and stay put. If a job needs to run at a consistent local time year-round, Basic or CRON is the safer choice.
Inside your data, FME handles DST well. @TimeZoneSet(...,local,auto) consults a time zone database that's updated annually. One behaviour to plan for: if only one of two datetimes carries an offset, DateTimeCalculator rejects the feature rather than assuming one — so it's worth setting offsets explicitly when you're comparing datetimes from different sources.
- About Times and Time Zones
- Schedules
- Handling Local Timezones, UTC, Daylight Savings Time, and Leap Units
FME Form — FAQs
1. Why does FME need Java, and how do I fix JVM errors?
FME ships with its own Java runtime because several plug-ins run in an embedded JVM (Java Virtual Machine), like JDBC based readers and writers, some format plug-ins, and parts of FME Flow's SSL and messaging layer.
Your specific version of the shipped Java component depends on your version of FME. For example, FME 2023 and newer ship JRE 17, while FME 2022 and earlier shipped JRE 8. That one detail explains a lot of driver puzzles. An ojdbc11 or ojdbc17 driver on FME 2022 will fail with UnsupportedClassVersionError, and ojdbc8.jar was the right pick before 2023. The Third-Party Component Versions article below lists the exact OpenJDK build for each release if you need to check.
If you're adding third-party .jar files, put them somewhere on FME's Java CLASSPATH — <FME_install>/plugins, <User_Documents>/FME/Plugins/Java, or the Flow system share, then restart Workbench.
For memory and performance, especially when reading and writing with a Java based format, the Java heap size may be adjusted. The heap size can be set with the FME_JVM_MIN_HEAP_SIZE and FME_JVM_MAX_HEAP_SIZE environment variables (use multiples of 1024, with k/m/g suffixes). On FME Flow, the usual first step against java.lang.OutOfMemoryError: Java heap space is doubling the per-component -Xmx in processMonitorConfigCore.txt. The Usage Notes for that specific format typically details this, for example, view the Usage Notes for the generic JDBC Reader/Writer.
One distinction that saves time: FME's own "Out of Memory. Please free some memory, then choose retry" is a different message with a different cause. That one isn't about the JVM at all — look at FME_TEMP placement, clearing temp files, and swap space if you're on Linux.
- Third-Party Component Versions for FME Flow
- Adjusting Memory Resources
- Getting Started with JDBC
- FME & Oracle Compatibility
2. Can I read data straight out of a zip file, or read hundreds of files at once?
Good news on both counts, and no unzipping step required.
For a zip, just point any reader's Dataset parameter at the .zip itself — use the "Zip Files" filter in the browse dialog to find it. FME extracts to a temp folder and reads it like a normal dataset. Data sitting directly in the zip, or in a single top-level subfolder, is found automatically, and since you've already chosen the format, FME picks the right files by extension.
For anything more nested, add wildcards to the path:
- C:\data\archive.zip\*.* handles mixed-case extensions
- C:\data\*.zip\**\*.shp walks arbitrarily nested folders across multiple zips
Two limits to keep in mind: password-protected zips aren't supported, and zipped datasets can't be read by the Generic reader with "Guess format name from Extension" enabled.
For reading many files at once, you have two good options:
- Use a wildcard or multi-file published parameter with $(Param)\**\*.shp in a FeatureReader Dataset.
- Drive a FeatureReader or WorkspaceRunner from a Directory and File Pathnames reader. You get one feature per file, plus a Path Filter to narrow things down — handy when you want to log or branch per file.
- Working with Archive Files and URLs
- FeatureReader
- How to read all shapefiles in a ZIP file regardless of how deep the directory structure
3. Why can't I rename attributes on a CSV reader?
This one looks like a bug but is actually intentional. Editing input attributes on a reader feature type is locked by default to prevent schema conflicts, because the source schema also acts as a filter on your source data. In the reader's Attribute Definition (Manual mode) you can change Type, but not Name.
The recommended approach is to rename downstream with an AttributeManager or AttributeRenamer — or a SchemaMapper if your renames are table-driven and you'd rather manage them in a lookup. There is an option to unlock reader editing under Tools > FME Options > Reader/Writer Options > "Allow Reader Feature Type editing," but it's flagged for advanced users for the reason above.
While you're in the reader, four parameters explain most CSV schema surprises:
- Delimiter Character
- Field Names Line — leave it blank and your columns come through as col0, col1 … colN
- Data Start Line
- Remove Duplicate Separators, useful for fixed-width data
On the writer side, stray or trailing delimiters are governed by Field Qualifier, Qualify Field Names / Qualify Field Values, and Unqualified Field Value Handling. By default FME removes unsafe characters — delimiters become a space, leading qualifiers and newlines are dropped — and logs a warning so you know it happened. "Preserve Unsafe Characters" keeps them, at the risk of a malformed file, which is also what the Prevent Formula Injection parameter helps guard against.
- Tutorial: Getting Started with CSV
- CSV (Comma Separated Value) Reader Parameters
- CSV (Comma Separated Value) Writer Parameters
- FME Workbench Options
4. Why are accented or non-Latin characters coming out garbled?
From FME 2022.0 onward, FME sets its process encoding to UTF-8 automatically — as long as the operating system allows it (Windows 10 1903+ or Server 2019 build 1809+; Linux and macOS are already UTF-8). Before 2022, FME used the machine's system locale, which is why a workspace moved between locales could produce misread attribute values and broken file paths.
The quickest way to see where you stand: open Help > About FME Workbench > More Info and look at Process Encoding. If it says windows-1252 on FME 2022 or newer, the OS is too old to allow UTF-8, and that's the thing to address. You can also check the .fmw for a FME_NAMES_ENCODING directive to see what the workspace was authored as — if it's absent, FME assumes the current OS locale.
Opening a workspace authored under a different locale may raise a Mismatched Schema Encoding notice, or "The encoded string is not a valid UTF-8 string." The best outcomes come from either avoiding conflicting datasets in that workspace, or rebuilding it on a machine set to the target locale.
On the output side, most writers default to UTF-8 through the Character Encoding parameter. If Excel is opening a UTF-8 CSV incorrectly, Write Byte Order Mark for Unicode is very often the setting you need. And if a single field needs different treatment from the rest, AttributeEncoder and AttributeDecoder give you per-attribute control.
5. AttributeFilter, Tester, or TestFilter — which one should I use?
Here's a quick way to choose:
- AttributeFilter — known discrete string values of a single attribute. You get one output port per value, plus built-in <Empty>, <Missing>, <Null> and <Unfiltered> ports, which is genuinely useful when those three cases mean different things to you.
- AttributeRangeFilter — known numeric ranges of a single attribute.
- Tester — a single pass/fail condition.
- TestFilter — everything else. Any number of tests, named output ports (much easier to read than a chain of Testers), and a choice between exiting at the first test passed or every test passed.
One AttributeRangeFilter behaviour worth knowing before it puzzles you: ranges are inclusive and evaluated in lookup-table order, so a value matching two ranges leaves through whichever is listed first. Given ranges of 1–10 and 10–20, the value 10 exits the first row. Leaving From or To blank makes a range open-ended, and anything that matches nothing exits <Unfiltered>.
And a shortcut worth remembering: if the only reason you're filtering is to write to separate layers or datasets, Fanout will do it without a filter at all.
And that's the October edition — eleven fresh questions. If what you're after isn't here, the June and August editions covered stuck jobs, upgrades, SSO, SSL certificates, ArcGIS licensing, OAuth, Automations, dynamic workflows, floating licences and CVE enquiries.
Coming up in November: fault-tolerant deployments, FME Flow as an MCP server, TLS hardening, writing to ArcGIS Online and Portal feature layers, and building change logs with ChangeDetector.
Got a question you'd like to see answered? Leave a comment and it might feature in a future edition. Happy FMEing, and enjoy the weekend!

