Flows are extremely powerful. With great power comes great responsibility. Sometimes flows can cause errors in your projects.
Learn how to find and fix flow errors for optimal project performance.
How do I know something isn't working?
Flow Error
If there is a flow error, the affected geometry will appear neon magenta / bright pink on the map.
Engine Failure
Sometimes the flow might break the rendering for some or all of the geometries in your project. You will see an engine status error in the bottom left corner of your Giraffe tab.
Try pausing and re-starting the engine (click the pause button to the left of the error text).
If pause and restart doesn't work, try removing the flow from geometries in the project.
Crash
Sometimes, a flow error will completely crash your Giraffe tab. (Usually this happens when you have self-referencing nodes or a bad loop).
Try refreshing the tab. If you are unable to get back in, reach out to support for assistance retrieving the file.
Troubleshooting steps
The glasses button
Turn on the glasses button (View evaluated flow for selected feature) from the top bar. This displays the state of all nodes in the Flow.
Review Warnings and Errors
Any nodes with an error will appear in red. Red nodes mean the entire flow is failing due to the error.
Any nodes with a warning will appear in orange. Orange nodes mean that the flow is still able to complete. Some information may be missing.
Read the Status
If a node has an error or a warning, you may want to use the Reader node to review the status.
Add the Reader node to the Status (S) output of the node with the error/warning to see the message.
Pause Nodes
Try pausing a specific node to see if it is causing the issue. Right click on the node title -> Disable.
Pause Engine
Pause the entire Giraffe engine to stop all geometry generation.
Click the pause button in the bottom bar.
Recompute
If processing seems stuck, try clicking recompute. This stops the flow process and restarts it.
Refresh Tab
If all else fails, try refreshing your browser tab.
Problems with flows
A flow draws as a polygon when it should be a line
When you pick a flow from the flow tool in the drawing toolbar, the flow starts drawing with the first geometry type in its Allowed geometries. A flow with no allowed geometries set accepts every type and starts with a rectangle. Roads, paths, and other linear flows need Line set as their geometry type to start as a line.
Open the flow's properties.
Under Allowed geometries, turn on Line.
Turn off Point and Polygon if the flow only works on lines.
When a flow allows more than one geometry type, a bar appears while you draw with a button for each shape. Click Line in that bar to draw a line. If Remember shape is on, the flow starts with the last shape you picked.
If you draw a shape the flow doesn't allow, Giraffe draws the geometry without the flow.
A flow doesn't apply its usage
When you draw with a flow from the flow tool in the drawing toolbar, the flow applies a usage to the new geometry only when the usage is set in the flow's defaults. For example, a carpark flow needs a carpark usage in its defaults to apply it.
Open the flow's properties.
Open the Defaults tab.
Turn on Usage and choose a usage.
Turning on Usage without choosing a usage saves nothing. The default usage applies to geometries you draw with the flow after you set it. To change the usage on a geometry you already drew, select it and change the usage in the Property palette.
Changing a property doesn't change the flow's result
Change a flow's settings for one geometry in Flow Controls. A flow reads its settings from Flow Controls, so a property with the same name in the Property palette, like a road width, doesn't change what the flow draws.
Select the geometry.
Find Flow Controls. It shows the flow's name and its settings.
Change the setting. Click Revert to default next to a setting to go back to the flow's value.
A setting changed in Flow Controls changes only the selected geometries. To change a setting for every geometry that uses the flow, edit the flow itself. Learn which flow values win over others.
A parking flow draws no parking spaces
A parking flow draws no spaces when the site is too small to fit a drive aisle with bays on either side. The Parking Lots node shows the warning No parking lots could be generated with the given inputs and parameters.
Make room for the layout in one of these ways:
Make the site larger.
Lower Road Width, Bay Length, or Boundary Road Width.
Turn on Single Loaded to put bays on one side of the aisle.
Turn off Center Islands, or lower Center Islands Size.
Road Width is the width of the drive aisle between rows of bays. Boundary Road Width is the width of the road around the site's edge, and Giraffe uses whichever of the two is larger there.
I want to delete part of a flow's result
A flow redraws its result every time it runs, so you can't delete one piece of it directly. Choose one of these:
Bake the geometry. Right-click it and choose Bake. Giraffe replaces the flow's result with plain geometries you can edit and delete. The geometry no longer uses the flow after you bake it.
Change the flow. Edit the flow to remove the part you don't want. Editing a flow changes every geometry that uses it. To change only some geometries, duplicate the flow and edit the copy.
Bake works on up to 249 geometries at a time. Press Cmd/Ctrl+Z right after baking to undo it.
Flow error messages
When a node fails, its status reads <Node name> error: <message>. For example, Offset line error: (intermediate value) is not iterable comes from the Offset Line node. Find the part after "error:" in the table below.
Some messages come straight from the browser, like is not iterable or Cannot read properties of undefined. They read like code, and they still mean the node got input it can't use. The node name before "error:" tells you where to look.
When a flow fails on a geometry, all of its node errors are listed together under Errors evaluating flow "<flow name>".
Error | What it means | How to fix |
(intermediate value) is not iterable | The node expected a list of points and got nothing at that position. This usually means a line with only one point. For Offset Line, any line or line part with a single vertex causes it. | Make sure every line feeding the node has at least two distinct points. Remove points and single-point lines upstream, for example after Cull Duplicate Points, Explode, or Sub Curve. |
Cannot read properties of undefined | Missing inputs, or a geometry with no coordinates. With Offset Line, a polygon with no ring shows Cannot read properties of undefined (reading 'length'). | Add the correct input data by connecting another node, and check the geometry is not empty |
... is not a function (for example x.map is not a function) | The node expected a list and got a single value, or the reverse | Check whether the upstream node outputs a list or a single item, and match what the input expects |
Cannot offset a point | Offset Line received a point | Feed lines or polygons only. Filter out points before the node |
Error getting inputs for node "<name>": ... | Giraffe couldn't collect the node's inputs. The rest of the message says why, such as Graph contains a cycle or Node <id> of type <type> does not have a list input. | Fix the wiring into the named node. Remove loops and connect lists only to list inputs |
Missing required inputs: <name> (orange warning) | A required input has nothing connected and no default value. The flow can still run. Output may be incomplete. | Connect an edge to the named input, or set a default value on the node |
Feature is required | A Scale, Orient, or Get Segments node has nothing connected to its feature input | Connect a geometry to the node |
Center is required / Center must be a vector | The Circle node has no center, or the center is not a vector | Connect a vector to the center input |
Node type not found / Unknown node type: "<type>" | The node's type no longer exists in Giraffe. This is usually a retired node kept from an older flow, or an unsupported node from an import | Right-click the node to see if an upgrade is offered; otherwise delete it and rebuild with a current node |
unknown can not be executed | The node is a placeholder for a node type Giraffe can't load | Delete the node and rebuild that step with a current node |
evaluate javascript is not supported | The flow uses the Evaluate JavaScript node, which doesn't run | Replace it with standard nodes |
Division by zero (warning) | A Divide (or similar math) node got 0 as its denominator. The node still returns a result, often Infinity | Check the upstream value feeding the denominator and guard against zero |
Input must be a polygon / Feature must be a polyline (and similar "must be a ___" messages, including Feature must be a polygon or multipolygon, Line must be a LineString, and Origin must be a Point) | The node received the wrong geometry type, for example a line where a polygon was expected | Trace the input back to where the geometry type changed and add a conversion or filter node |
Invalid geometry type / Unsupported geometry type / <type> is not supported / Unsupported geometry type for fillet corners / Unsupported geometry type for frame on polyline | The node can't work with this kind of geometry | Convert or filter the input so the node only gets the geometry types it supports |
Polygon has no edges / Centroid could not be computed for this geometry / Could not fit a rectangle inside the polygon / Could not fit a circle inside the polygon / Polygon must have at least one ring / MultiPolygon has no polygons / MultiPolygon must have at least one polygon | The input geometry is empty, degenerate, or invalid (e.g. zero area) | Check the source geometry is valid and non-empty before this node |
Line must have at least two points / At least 3 points are required | The line or point list is too short for the node. Bezier and Catmull-Rom curves need at least 3 points. | Add points, or remove short lines upstream |
Count must be greater than 0 / Length must be greater than 0 / Factor must be greater than 0 / Resolution must be greater than 1 / segments must be a finite number | A numeric parameter is out of range, empty, or not a number | Fix the parameter value, or check the upstream node/slider feeding it |
Cannot find frame for a point / Failed to evaluate polyline at given distance / Failed to split polyline | Frame on Polyline or Sub Curve got a point, or a distance or split value that falls outside the line | Feed a line, and keep the distance between 0 and the line's length |
Bezier corners are not supported yet | Fillet Corners has its blend set to bezier | Choose round or chamfer |
No lines to join | The join node received an empty list | Connect at least one line, and check upstream filters aren't removing all of them |
Failed to parse geometry: <detail> / Failed to deserialize Cartesian: <detail> | The node received data that isn't valid geometry | Check the data source or import step feeding this node |
Flow with id <id> not found / No flow id provided | A Function (sub-flow) node points to a flow that's been deleted, or has none selected | Open the node's settings and select a valid flow |
Recursion is not supported | A flow calls itself, directly or through another flow | Remove the circular reference between flows |
Block definition not found for blockId: <id> | A block node points to a block that was deleted | Select a block that exists, or remove the node |
incorrect number of edges | An Exit node is wired with the wrong number of connections | Connect exactly one edge into the Exit node |
Usage <name> not found / No grid found in project boundary | A Usage or Project node references a usage or grid that no longer exists in this project | Re-select a valid usage/grid on the node |
Output <key> is not a number / Input list must contain either all numbers or all vectors | A math node received mixed or non-numeric data | Check the upstream data type; make sure list items are consistently numbers or all vectors |
Vector2 not supported | A node that needs 3D vectors received a 2D vector | Pass a 3D vector, adding a z value of 0 if needed |
unsupported operator "<operator>". Use one of: ... | A "modify property" node was given an operator it doesn't recognize | Pick one of the operators listed in the error message |
value is undefined, property "<name>" will be set to undefined (warning) | A set property node got no value for the named property | Connect a value to the node |
no property provided, object/feature left unchanged (warning) | A set property node has no property name | Enter the property name on the node |
Graph contains a cycle | Two or more nodes are wired into a loop that isn't a supported iteration structure | Remove the circular connection, or rebuild the loop with a Map/Reduce/Iterate node |
No input provided to <node> (warning) | A generative node received an empty input | Connect geometry to the node, and check upstream filters aren't returning nothing |
empty site or no patterns / empty pattern provided | A pattern node has no site geometry or no pattern to place | Connect a site and at least one pattern |
No features were generated. Please check the parameters. (warning) | The generative logic ran. The input geometry/parameters left no room for a valid result | Loosen the parameters, or check the input geometry is large/valid enough |
No parking lots could be generated (warning) | The parking layout logic ran, and the site or parameters left no room for parking | Use a larger site, or loosen the parking parameters |
null (shown as a node's output value, not a labeled error) | The node's output is JavaScript's null, usually because an upstream calculation had nothing valid to return | Check the input data type and/or logic to ensure the node can process a result |
"Node with id [id] not found" (toast) | You tried to duplicate a flow node that no longer exists. | Refresh and try again. |
Typical Problems
Flows need a project
Flows only work inside a project. If you're working in a Space, open or create a project to use flows.
You don't need a project boundary to use flows. A flow runs on any geometry in the project, whether or not the project has a boundary.
I edited a flow on my geometry, and it changed all of them
A flow definition is shared by every geometry that uses it, so editing its flow graph updates all of those geometries at once. To change only some geometries, give them their own copy of the flow.
Open the flow and duplicate it.
Edit the copy.
Select the geometries you want to change, and apply the copy to them from the flow dropdown in Flow Controls.
Learn how to duplicate a flow.
Missing an Input value
If a required input has nothing connected to it, the node shows an orange warning reading Missing required inputs: <name>. The flow can often still run. The output may be missing data. Connect an edge to the named input, or set a default value on the node itself.
Data type mismatch
Nodes expect specific data types: a polygon, a number, a list of vectors, and so on. Feeding in the wrong type produces errors like Input must be a polygon, Feature must be a polyline, or Output is not a number. Trace the connection back to where the type changed and add a conversion or filter node, or check the source data.
Providing a List when Single Object is expected
Some nodes expect a single geometry or value, not a list. Passing a list in usually shows up as Cannot read properties of undefined, because the node tries to read a property that only exists on a single object. Add a node like First or Get Item before the input, or check whether the upstream node is unexpectedly outputting a list.
A length, area, or volume comes out the wrong size
Lengths, areas, and volumes in a flow's JSON are always in meters, square meters, and cubic meters. Transform nodes like the Envelope Transform show their settings in your project units, and they store them in meters, square meters, and cubic meters. When you write one of these values into a transform setting with Write Property, or read one with the Reader, the value is in meters, square meters, and cubic meters. A length written in feet comes out about 3.3 times too large, and an area in square feet about 10.8 times too large. Convert before writing, for example 40 ft is 12.192 m and 1,000 sq ft is 92.903 sq m.
Use the Reader node to check the value the transform actually receives.
A property the flow writes doesn't show in the Property palette
A property your flow writes is on the geometry, even when you can't see it in the Property palette. Giraffe saves it in the geometry's JSON as an evaluated value. Analytics and Urban read that value like any other property. The Property palette only shows editable properties, so an evaluated value doesn't appear there as an input.
To check that the flow wrote the property, select the geometry and open its JSON. In Giraffe 6, open the JSON Editor app. In Giraffe 4, switch the Property palette to its JSON view. Look for the property name and value you wrote. If they're there, the flow is working.
To edit the value from the Property palette, do one or both of these:
Add the property as a flow default. Open the flow's properties and add it on the Defaults tab.
Add the property to the geometry in the Property palette with Add Property.
If a Fix Doesn't Seem to Work
Before switching to a different node or a different approach, confirm the change you already made is actually reaching the geometry you're looking at.
Turn on the glasses button (View evaluated flow for selected feature) and check that the node you just added or edited shows a result, not an error or warning.
If your flow branches, confirm which branch actually feeds the
write featuresnode connected to the geometry you see on the map. A change on the wrong branch won't show up, even if the node itself is set up correctly.Use the Reader node on the output you just changed to confirm the value is what you expect, before assuming the whole approach is wrong.
If a change genuinely isn't working after checking the above, say what you checked and why before trying something different. Switching to an unrelated node without explaining the change makes a flow harder to debug, for you and for anyone helping you with it.
Other flow messages
These toasts confirm that something worked, or ask you to fix a small thing before you continue.
Message | What triggers it | What to do |
"Added a new flow "[flow name]"" | You created a new flow from the flow picker. | None |
"Copied to clipboard" | You copied flow nodes. | None |
"No features using this flow." | You clicked the select button on the flow toolbar. No geometries use the open flow. | Apply the flow to some geometries first. |
"Saved input defaults for "[flow name]"" | You saved input defaults for a flow. | None |
"Select a shape with a flow first" | You tried to show flow handles with no flow geometry selected. | Select a geometry that has a flow. |
"Selected [N] features using this flow." | You clicked the select button on the flow toolbar and the geometries using the flow got selected. | None |
"The input defaults of "[flow name]" are already up to date" | You saved input defaults for a flow. None of them changed. | None |
"The selected shape has no editable flow handles" | The selected geometry has no flow handles to show. | Select a different geometry. |
"There is no active flow to edit" | You tried to save input defaults for a flow that no longer exists. | Open a flow first. |
"There is no active flow to save" | You changed a flow. There was no flow open to save it to. | Open a flow first. |






