Pipe library, native pump controls, and model validation
June was another big month at Iterating. The two headline features are the pipe library — an age-to-roughness lookup table for your pipe materials, applied across the network in one action — and native pump controls, time and level based controls you define directly in the asset panel.
Alongside those, we’ve shipped custom attributes, support for empty values backed by a new set of model validations, scoped customer point allocation, and three additions to the model build: pipe material and installation year from GIS, preserved projections, and the whole experience in your language.
Pipe library
Paid plansThe pipe library lets you build a reusable set of pipe materials, each with its own age-to-roughness table, so roughness can quickly be defined by accepted standards and then later calibrated.
When you apply the library, epanet-js works out each pipe’s age from its installation year, finds the row its age falls into in the material’s table, and fills in the roughness. It only ever fills pipes whose roughness is empty, and those with material and year values already set. The one exception is materials that have a single roughness value, these will also get a roughness assigned even if the year is missing.
The library is quick to set up too. It gathers all the unique pipe materials in your model, figures out the years they were installed, and builds the initial library for you — you then update it with the correct roughness values. When you’re done, export it to CSV or XLSX and use it in future projects, or if you already have a library, import it and you’re ready to go.
Now when you import GIS data, include the material and year of construction and it’s even easier to set accurate roughness coefficients and get your model up and running quickly.

Each material carries its own age-to-roughness table; apply the whole library in one action.
Native pump controls
Priority accessUntil now, pump controls had to be written out manually. There was no easy way to create them directly on the asset. Now you can define a control directly in the pump’s asset panel.
You can define two types of controls on pumps. A time-based control switches the pump on and off at the clock times you choose, and level-based controls activate the pump based on the levels of a tank you choose. If a pump already has legacy controls from an imported INP file, the panel flags them so the two don’t silently conflict.

A level-based control in the asset panel: PU1 switches on tank T1’s level.
Custom attributes
Paid plansCustom attributes let you add your own text or numeric fields to any asset type and keep that data with the model. Define your fields once, then edit the values wherever you work: the asset panel, the multi-asset panel, or the data tables.
Next we’ll bring custom attribute data in from the model build, so the fields in your GIS come along from day one.

Define a custom attribute once, then fill it in from the asset panel, the multi-asset panel, or the data tables.
Model attribute validation and empty values
Paid plansUntil now, every attribute had to hold a value from the moment an asset existed. Import pipes from GIS without roughness and we’d fill in a default, which was rarely the value anyone intended and had to be found and cleaned up later.
This month that changes: nearly any numeric field can now be empty. Import pipes without roughness and they arrive blank. Draw a new asset like a pump or tank and values start empty instead of being filled with incorrect defaults.
A model with gaps can’t always run, though, so validation keeps you on top of them. Any field that’s missing a required value, or holds an invalid one, is highlighted orange right where you edit — in the asset panel, the data tables, and the multi-asset panel — so gaps are easy to spot.
The network review also gains a new group of model attribute checks covering missing or invalid attributes (pipe roughness, tank levels, pump curves, unallocated customer points, and many more), with errors listed first. Click an issue to see the affected assets and select them on the map. The same checks run before every simulation, and if any issues could stop your model running correctly, you’re warned before it starts — jump to the network review to fix them, or run anyway.
The highlights and the pre-simulation warning are there for everyone; the full model attribute list is part of paid plans. We’ll keep adding checks and validations to help you see where your model stands and work through issues faster.

The network review’s new model attribute checks list missing and invalid values by asset
Scoped customer point allocation
Customer point allocation no longer has to be applied across the whole network. A new scope section in the allocation dialog lets you restrict the operation to the pipes you’ve selected or to the customers inside a zone. Leave both off and it works network-wide as before.

Scope an allocation to selected pipes or a zone instead of the whole network.
Pro model builder
Paid plansThe Pro model builder picked up three additions this month: pipe material and installation year can now be mapped from your GIS data, the source projection is preserved through to export, and the whole workflow runs in your language.
Pipe material and installation year
The pipe attributes we added in May are now part of the Pro model builder: map material and installation year from your GIS fields and they land on your pipes, ready for the pipe library.

Map material and installation year from your GIS data.
Projection preserved
When you build a model from GIS data, the source projection is now stored with the project file. Previously, model builds were forced into latitude and longitude, so exports came back in a different coordinate system than your source data. Now, what you export matches what you brought in.
In your language
The model build works in the language you use in epanet-js from the first step to the last, rather than defaulting to English.

Improvements
- Faster data tables on big models: Sorting, copying, and pasting now show a loading state instead of freezing the table during heavy operations.
- Zone import from Shapefile: Zone polygons can now be imported from Shapefile as well as GeoJSON.
- Customer point multi-select: Customer points can now be selected together with junctions, pipes, and other assets (with the pointer, the area select, or the data table), and the multi-asset panel, exports, and map context menus all handle the mix. It powers bulk disconnection too: select every customer point in the data table and disconnect them in one go.
- Floating drawing toolbar: The drawing tools have moved into a floating toolbar on the map itself, tidying the layout and giving the playback and drawing controls more room on smaller screens.
- Attribute search in the model build: The mapping step now has a search box, so you can find the right GIS field without scanning a long list.
- Zoom to asset from the data table: Selecting a row zooms the map to that asset.
- Shared defaults: The model build now uses the same default values as the rest of epanet-js.
Fixes
- If the model database got into an incorrect state where a pipe was missing connected junctions, it would stop the simulation and network reviews from working. This has since been fixed.
- Fixed several issues that could cause epanet-js to crash if you left a session open for multiple hours.
- Importing an INP file with an unsupported headloss formula now falls back to Hazen-Williams and flags the substitution in the import issues.
- A simulation that runs out of memory now shows a clear out-of-memory message with next steps, instead of a blank failure.
- Clicking overlapping customer points now selects the one closest to your pointer.
- Redrawing a pump’s geometry no longer discards its assigned pump curve.
- Base demands accept negative values again, after the new validations briefly blocked them.
What’s next
Our focus continues on the overall experience of building a model, with lots of small improvements planned. Among them:
- Customers and zones in the model build: Import customer points and zone polygons during the build itself, rather than afterwards.
- Custom attributes in the model build: Bring your GIS fields in as custom attributes from the start.
- More validations, with suggested fixes: More checks that catch problems early (a disconnected system, for example), with suggested fixes that point you in the right direction.
Support EPANET by using software that supports it back.
— Luke and Sam