Niagara N4 / Niagara AX

Software Pile develops on Niagara 4 and Niagara AX – custom modules, protocol drivers, Workbench tooling, and station applications for systems integrators, OEMs, and facility teams. The work is led by a Tridium-certified Niagara Full Stack Developer holding NCPD credentials in both Drivers and User Interface.

N4 Development We Deliver

  • Custom modules – control logic, data processing, engineering tools, and packaged components built against your station architecture and Niagara version, signed and compatibility-tested
  • Custom drivers – Baja driver architecture for proprietary and OEM equipment: protocol analysis, point discovery, proxy extensions, histories, and alarms validated against real hardware
  • Workbench tools – bulk tagging, station audits, deployment utilities, and custom views that cut engineering hours
  • Station and Supervisor applications – HTML5 and Hx dashboards, BajaScript interfaces, BQL reporting, alarm consoles, and role-based operator screens
  • Program objects and kitControl extensions where the built-in palette runs out

N4 and AX: Where Each Fits

New development belongs on N4. But AX is still running real buildings, and we support it: maintaining existing AX modules and AXScripting, keeping stations serviceable, and – when the time comes – planning AX-to-N4 migration so histories, alarms, and graphics survive the move. PX-to-HTML5 modernization is part of that path.

How Niagara Projects Are Scoped

Every engagement starts from your station reality: Niagara version and build, Supervisor or JACE target, host IDs, licensed capacities, and the protocols in play (BACnet, Modbus, MQTT, SNMP, oBIX, or proprietary). We develop against representative station exports, test on matching versions, and deliver signed modules with documentation – so commissioning holds no surprises.

Common Questions

Can you build a driver for equipment with no published protocol? Often, yes – via protocol capture and analysis against the physical device. We will tell you feasibility after a short assessment.

Do your modules survive Niagara updates? Modules are built against the Niagara API surface for your version line and compatibility-tested; we document version dependencies and support recompilation when you upgrade.

Can you work inside our integrator workflow? Yes – many clients are integrators. We deliver modules and tools into your engineering process, white-label where needed.

Is the certification verifiable? Yes – credential verification is available on request.

Send your Niagara version and target environment – Supervisor or JACE, and the protocol or device in question – and we will scope the work from the first call.

What Is the Difference Between Niagara AX and Niagara N4?

N4 is the current generation of the Niagara Framework; AX is the previous one. The distinction that matters commercially is not the feature list — it is that AX is a legacy platform, and a station still running it is running on borrowed time in terms of browser compatibility, security posture and vendor support.

The differences that drive migration effort:

  • User interface. AX graphics were built for an era of browser plugins that modern browsers no longer run. N4 is HTML5-based. This is usually the largest single line in a migration budget.
  • Security model. N4 handles users, roles and permissions differently. Accounts are reviewed and rebuilt rather than copied across.
  • Tagging and search. N4 adds a tagging and relation model, including Project Haystack support, which AX did not have.
  • Module format. Modules are built and signed differently. Every third-party module needs an N4 equivalent or a replacement.
  • Hardware requirements. N4 needs more resources; some older JACE controllers cannot run it at all.

Is Niagara AX Still Supported?

AX is a legacy platform and should be treated as end-of-life for planning purposes. Confirm the current support position for your specific version with Tridium or your OEM — support and security-update policies change, and the answer should come from the vendor rather than from a web page. What is not in question is the direction of travel: new development, new drivers and current security work target N4.

Can a JACE Running AX Be Upgraded to N4?

Sometimes. It depends on the controller model and its available memory and storage. Some JACE hardware supports an N4 upgrade path; some does not and must be replaced. This is the single most important thing to establish early, because it changes a software project into a project with field work, re-addressing and re-commissioning in it.

Establish it per controller, from the actual deployed hardware inventory — not from an assumption about what the site standard was supposed to be.

What Happens to AX Graphics in N4?

Conversion tooling will bring Px graphics across, and simple pages often survive well. What does not survive is anything that depended on the old plugin-based client, custom widgets written against AX-era APIs, or layouts built for a fixed workstation resolution. Those are rebuilt, not converted.

The honest planning assumption is that graphics are their own workstream with its own estimate. Treating them as a rounding error on the station conversion is the most common reason these projects overrun.

How Long Does an AX to N4 Migration Take?

There is no useful average, because the schedule is set by the inventory rather than by the station count. A single-station site with stock drivers and simple graphics can be done quickly. A multi-site estate with vendor-specific modules, custom AX graphics and controllers that cannot run N4 is a programme, not a project.

What makes an estimate credible is that someone has enumerated, per station: the Niagara version and build, every installed module and its N4 availability confirmed by the vendor, the controller model and its resource headroom, the graphics inventory, and every integration consuming data out of the station. Any timeline offered before that exists is a guess.

Migrating Without a Risky Cutover

Convert a copy of the station in a lab first and document the exact steps. Pilot on the least critical real site. Keep the AX station recoverable, with a tested backup and documented rollback, until the N4 station has run a full operational cycle including alarms, schedules and reports. Reversibility at every stage is what separates a migration from an outage.

Related services: Niagara AX to N4 migration services · graphics and dashboard rebuilds.

Platform, Station, and the Ports Between Them

A Niagara host runs two things that get conflated: the platform daemon and the station. The platform daemon is the operating system level service on the JACE or Supervisor host, and it handles module installs, backups, station start and stop, TLS configuration and licensing. The station is the running application, meaning the component tree, the drivers, histories, alarms and station users. The credentials are separate too, which is why an engineer can hold working station logins and still be unable to install anything.

On a hardened N4 host the unencrypted ports are disabled and the TLS ports carry everything, which is worth confirming before a failed connection gets blamed on a firewall. The more common problem runs the other way: a rule that opens only the station's web port yields the operator interface and nothing more, because engineering and platform work do not travel over it.

Discovery on the field side has its own constraint. BACnet/IP finds devices by broadcasting Who-Is on the local subnet, and routers do not forward those broadcasts. A station and a device on different subnets will not find each other without a BBMD on the device's subnet or foreign device registration pointed at one. Modbus TCP has no discovery at all, so every device address and register map has to be supplied rather than found.

Default ports worth knowing before a firewall request is written:

  • Fox, TCP 1911 unencrypted and 4911 over TLS. This is the station to station protocol across a Niagara Network and the one an engineering session uses.
  • Platform daemon, TCP 3011 unencrypted and 5011 over TLS.
  • Station web interface, TCP 80 unencrypted and 443 over TLS, which also carries oBIX and any REST client reading out of the station.
  • BACnet/IP, UDP 47808 by default, and it is UDP rather than TCP.
  • Modbus TCP on 502, SNMP polls on UDP 161 with traps arriving inbound on 162, and MQTT on 1883 or 8883 over TLS.

How a Module Is Structured, Signed and Installed

A module is a JAR file carrying a manifest that declares what it contains and what it needs. A module is installed on the platform, not into the station: the Software Manager view on a platform connection compares the modules in the local database against what is already on the remote host and copies the selected ones to the remote host. The station is then restarted before the new components exist. That sequence is why module delivery is a scheduled event on a live site and not a file drop.

Every N4 module carries a digital signature over its contents, and the platform verifies that signature and its certificate chain at install time. AX had no such requirement, which is part of why an AX module cannot simply be carried forward. The build toolchain differs as well: N4 modules are built with Gradle against the Niagara SDK, where AX used an Ant based build.

The failure most often seen here is not a rejected module but a certificate the host has never seen. The install stalls on an approval prompt or fails outright, and the resolution is approving the certificate in the platform's trust store, under Certificate Management, before retrying. Doing that once per host is normal; doing it silently as a habit is not, because the trust store is the only thing standing between the platform and an arbitrary JAR.

The manifest declares the vendor, the vendorVersion, and every module it depends on with a minimum version for each. A module compiled against a newer Niagara release will not load on an older host. There is no build error to catch it, because the compile happened elsewhere: the host refuses the module and the station log names the unsatisfied dependency, so the symptom on site is a component type that will not resolve.

Modules are split into parts by where the code runs, so a controller only ever receives what it needs:

  • A -rt part holds the runtime code, meaning the components and drivers themselves. This is the part a controller has to have.
  • A -ux part holds browser side JavaScript and HTML5 widgets, served to clients by the station.
  • A -wb part holds Workbench views and engineering tools, and is of no use on a headless controller.
  • A -doc part holds documentation and is routinely left off a constrained host.

Polling, Subscription and Values That Look Stale

Niagara does not read every point all the time. A proxy point is polled when something subscribes to it: an open Workbench view, a live graphic, a history extension, an alarm extension, or logic that holds the subscription. Close the view and the reads stop. This is the mechanism behind the most common false alarm in commissioning, a value that updated fine while someone was watching it and shows an hours old timestamp the next morning. The point is not stale, it stopped being read.

The practical consequence is that a link from a proxy point into control logic does not by itself guarantee the point is being polled. Where a value has to be current whether or not anyone is looking, the subscription has to come from something permanent: an extension on the point, or a component that stays subscribed on its own. Discovering this after the logic has been running on stale inputs for a week is worse than designing for it.

Drivers poll on a scheduler with fast, normal and slow buckets, and every proxy point is assigned to one of them. The scheduler reports its actual cycle time against the configured rate, and when the actual time exceeds the configured rate the network is oversubscribed, meaning there are more points in it than the bus or the device can serve. Moving points to the slow bucket is the honest fix. Shortening the configured interval to make the number look right only makes the backlog grow faster.

Tuning policy governs writes as much as reads, and it is where write behavior is decided rather than in the logic. Minimum write time throttles rapid commands so a hunting loop cannot flood a device. Maximum write time forces a periodic rewrite, which is what brings a device that lost power back to the commanded value. Write on start decides whether the station asserts outputs when it comes up. A device that quietly reverts overnight is usually a maximum write time of zero, not a device fault.

When a value does look wrong, the order of the check saves time:

  • Check device health first. A device with a failed ping monitor makes every point under it look stale at once, and the device's last ok and last fail times bound the outage before anything else is examined.
  • Then read the fault cause string on the point itself, which names the actual error rather than the symptom. On Modbus that is usually a register offset counted from the wrong base or a 32 bit value assembled in the wrong word order, not a communications failure at all.

Frequently Asked Questions

What does a station restart actually interrupt?

History collection and alarm generation stop for the duration, so trend data carries a gap for the outage window and any alarm condition that both starts and clears inside it is never recorded. Schedules are re-evaluated at startup, which means outputs land in the state the schedule calls for at that moment rather than replaying a transition they missed while down. A Supervisor connected over the Niagara Network reconnects on its own once the station is running and backfills history and alarm records from the subordinate station's buffers, but it can only import records the station actually wrote. The platform daemon keeps running through a station restart, so remote access to the host is not lost along with it.

What network access does remote work on a station need?

A route to the host itself, normally a VPN or a jump host on the building network rather than anything exposed to the internet. The account used over that path can be read only for a survey or an inventory pass, since write access is only needed once changes are actually being made. Where the path terminates matters as well: reaching a Supervisor over the Niagara Network is not the same as having platform access to the controllers behind it. If the site prefers not to open a path at all, a station export can be handed over instead for the scoping stage.

Does the same module run on both a JACE and a Supervisor?

Usually, but the binding constraint on a controller is headroom rather than compatibility. A JACE has a fixed amount of RAM and flash shared with the station database, the histories, and every module already installed, so a module that is unremarkable on a Supervisor can be what pushes a small controller into memory pressure or fills its storage. Check free memory and free disk on the platform's resource view before adding to a controller that is already carrying a large point count. Where the work is reporting or aggregation across several stations, it belongs on the Supervisor regardless of whether the controller could hold it.

Can development be done against a copy of our station, or does it need the live one?

What a copy has to match is the installed module set at vendorVersion level, not only the Niagara release. A backup taken before the site's last upgrade will compile clean and then fail to load on the current host, because the dependency floors moved underneath it. A copy also cannot exercise the field side: timing on a live RS-485 trunk, a device that answers slowly under load, and a vendor's non-standard register map only appear against real hardware. That is why driver work needs either a device on the bench or a protocol capture taken from the site.

What does the Niagara license actually gate?

The license is locked to the host ID of the specific controller or server, and it enumerates both feature entries, which determine whether a given driver type can run at all, and capacity limits such as maximum devices, points and histories. Adding a protocol driver consumes against those counts, so a station near its point limit can accept the module and still fault the new points. Read the license off the platform before scoping rather than working from the purchase order, because the deployed license and the ordered one are not always the same. Capacity increases have to come from whoever issued the license.

When is a custom module the wrong answer?

When configuration already covers the requirement. Logic that can be assembled from standard control blocks, a schedule and a tuning policy change should be, because it stays visible to the next engineer in Workbench and survives an upgrade without a recompile. A custom module earns its place when configuration genuinely cannot express the requirement: an unsupported protocol, a transformation too large to wire block by block, or an engineering task repeated across hundreds of points. The same test applies to reporting, where a BQL query in a view often replaces a module that was going to compute the same numbers in Java.