Skip to content

What's new in test builds

Plain-language highlights for each test-channel release. Nodes on the Beta channel also receive every stable release — see What’s new.

  • A controller claimed into JasperX can now be reached through JasperX’s remote access, on the ports listed in its settings, and the link closes by itself after five idle minutes.
  • The Logger mark in JasperX’s Automation Builder now lights for warnings as well as errors.
  • Downloading a programme to a controller now keeps that controller’s own settings, such as its remote access and update channel; only the programme’s tag and script defaults travel with it.
  • A controller on this version no longer shows as “Changed on the controller” in JasperX when nothing changed, so Transfer and Deploy work again; saved flow diagrams are removed from the controller.
  • On a controller claimed into JasperX, Jasper can now use the connectors’ own tools, such as InfluxDB history, the Modbus probe and the EtherCAT scan; outside development a tool that writes to a device waits for your Approve, and Jasper never asks for a Wi-Fi password in chat.
  • When a controller’s programme is changed outside JasperX, JasperX now marks it “Changed on the controller” and offers to keep the controller’s version as a new revision or to put the master back.
  • Jasper’s script deploy from the JasperX chat now goes through your Accept, and outside development through the approval card for a change to running logic; Approve is refused when what the card shows changed after you read it, and a card that ends without deploying says why.
  • A controller claimed into JasperX can no longer be claimed by another organisation until a Manager there releases it; a controller waiting for that release says so in its log and joins by itself within 30 seconds of the release.
  • On a commissioning or production controller Jasper can no longer change a value, script or connector that is already running: nothing is applied, and he tells you the one step to take, such as setting the value yourself or pressing Deploy all.
  • On a commissioning or production controller, a connector Jasper installs or updates from JasperX waits for your Approve before anything is installed.
  • Jasper can no longer change a connector’s internal tags directly or pause and resume the controller’s logic: he changes a connector through its settings and its own tools, and asks you to press Start or Stop.
  • A tag’s time now shows when its value last changed rather than when it was last written, so a steady sensor shows how long it has held its value; history and live values carry the same time.
  • Switching on a field connector now asks you to look first when one of its outputs changed while it was off, when something else drives one, or the first time after a restart; JasperX’s card lists the outputs with their live values and never blocks your Approve.
  • JasperX’s live view now asks the controller only for the values that come into view, and script counters are read when their panel opens, so the controller sends less over its link.
  • A tag that a running connector owns can no longer be renamed or deleted in the moment just after the connector starts or its settings change.
  • A controller installed with Docker keeps its place in JasperX when its container is recreated. A beta.3 or beta.4 container recreated to take this update needs one release and a new claim, then never again.
  • A programme downloaded to a controller in its first seconds after starting no longer fails because the controller has not yet looked up a connector it needs.
  • On a controller claimed into JasperX, Jasper can no longer reach a device by editing a connector’s request tag: a probe or a network change goes through the connector’s own tool and, outside development, your Approve.
  • JasperX now shows how many connectors a controller runs, where it showed none.
  • The JasperX connector on the controller now shows it is disconnected as soon as its link to JasperX drops.
  • Jasper’s deploy right after he saves a script from the JasperX chat no longer fails asking him to read the script again first.
  • When Jasper tests scripts that feed one another, the result and the approval card now show each script on the new values of every script that feeds it.
  • Renaming a tag now also updates scripts waiting to be deployed, and switching a script folder on or off covers them too.
  • On a commissioning controller a new script Jasper deploys from JasperX needs only your Accept in the chat, not the full approval card.
  • Deleting a connector from JasperX now removes its tags as deleting it on the controller does, and never removes a tag another connector reads.
  • An approval card waiting on a controller is withdrawn when a programme is downloaded to it or when it is claimed again, so a late Approve cannot change the replaced programme.
  • A controller’s change history reaches JasperX even when its connection drops: changes made while it is offline appear in the activity feed once it reconnects.
  • A controller claimed into JasperX can be updated and restarted from its page in JasperX. Only a person can start either: Jasper can tell you an update is waiting, and cannot install it or restart the controller.
  • The Docker installer can now install test builds on a new controller: curl -fsSL https://dl2.jasperx.io/jn/docker.sh | JN_CHANNEL=beta-v2 bash.
  • The Docker installer can claim the controller into JasperX as it installs: add JX_CLAIM=<code from Add node> after the pipe.
  • The Add node install line now moves a running 2.0 controller to JasperX in one step: it stops the controller, keeps a copy of its data beside it, installs the new version on the channel in the line and claims the controller.
  • When Jasper tests a script change, the controller now works out what else the change moves and the approval card lists it, so Jasper no longer spends turns predicting the value of every script downstream.
  • Test builds from 2.1.0-beta.4 are published on a new channel, beta-v2, and a controller following the old Beta channel is offered nothing newer than 2.1.0-beta.3: switch a 2.0.x controller to Stable in System Config, and move one on a 2.1 beta to JasperX with the Add-node line and its claim.
  • A controller on 2.0 is never moved to JasperX by an update or by re-running an installer: moving it is the Add-node line, run with its claim.
  • On a commissioning or production controller Jasper now asks for your Approve before switching on any field connector, and the card lists every output it will drive; in development it switches them on directly, and your own Start is never held for approval.
  • Jasper can only switch a connector on through its enable step, so on a commissioning or production controller it cannot skip your Approve by editing the connector’s settings directly.
  • On a commissioning or production controller Jasper can no longer switch a field connector on without your Approve by scripting it, arming a script, renaming a tag onto it or setting its start-up value; an auto-reconnect script it writes waits for your Approve like any enable.
  • On a commissioning or production controller Jasper can no longer change the settings of a running field connector on its own: the change waits for your Approve, and the card shows the old settings against the new and the outputs the connector drives.
  • On a commissioning or production controller, anything Jasper needs your sign-off for now waits for your Approve or is refused, where it could go ahead first and tell you afterwards. Installing a new connector type is one of them, and its card names the connectors that will start.
  • A connector setting the controller refuses now says which field is wrong and what it accepts: its range, its choices, or the characters a tag path may hold. Jasper’s connector changes are checked the same way before anything is saved.
  • A tag that a running connector owns can no longer be renamed or deleted: JasperX names the connector to stop first, and the same change goes through once it is stopped.
  • On a controller claimed into JasperX, the controller’s own local screen is now read-only and has no chat: every change is made from JasperX.
  • Removing a publish or output entry from a connector no longer deletes that tag.
  • Creating a tag from JasperX with a name the controller does not allow now says what to change instead of reporting a controller error.
  • Duplicating a tag in JasperX onto a name that already exists now says the name is taken, instead of quietly making a copy with _2 on the end.
  • When the controller refuses to rename a tag because a running connector owns it, JasperX now says which connector to stop first, instead of calling the request malformed.
  • Restoring a program that holds a tag name the controller does not allow is now refused up front with the fix, instead of leaving the controller with part of the program.
  • When a connector Jasper sets up is refused over its settings, Jasper now corrects the settings and starts the same connector instead of deleting and recreating it.
  • A connector you saved on the controller’s local screen without starting it can now be started by Jasper or from JasperX, instead of being called half-created and deleted.
  • A script test that hits a limit now says which step and which tag it stopped on and what to change, instead of failing silently.
  • Jasper’s script-test replies are much shorter, with the same facts, so each turn costs less.
  • When a tag rounds its value to a set number of decimals, Jasper sees that and tests against it, instead of failing a correct test.
  • In Agent (with approvals), Jasper changing only a tag’s description no longer stops for your approval; a value, type, decimals or boot-behaviour change still does.
  • After you approve a deploy, Jasper no longer spends extra turns re-reading what it just put live.
  • After you approve or reject a deploy in the card, Jasper is always told, so it no longer looks stuck waiting for an answer you already gave.
  • A download from JasperX that cannot be applied in full now leaves the controller running the programme it had, and says what did not land and which connectors were switched off. Before, the controller could end up running part of each.
  • A download from JasperX no longer overwrites the values the plant is running with: a setpoint stays where it is, and only a new tag starts at its saved value.
  • A claimed controller that starts before its network is up, or during a JasperX outage, now joins JasperX by itself once it can reach it. Before, it stayed offline until someone restarted it.
  • A virtual controller no longer fails to come online after a restart once it holds several connector types or around a hundred text tags.
  • Once a connector is running again, whether you fixed its settings or the device came back, its old fault leaves its status in JasperX and Jasper stops reporting it as current.
  • Adding or editing a connector whose output is a tag one of your scripts already drives could restart the whole controller, with every connector down for about ten seconds. The connector is now created as usual and the controller keeps running, whether you or Jasper made the change.
  • The Docker installer now fetches the current build before it starts the controller, so a machine holding an older copy of the image no longer installs that one.
  • A node you claim into the new JasperX platform now brings its existing programme with it — tags, scripts and connector setup appear in the cloud instead of having to be rebuilt there by hand.
  • New one-line Docker install: curl -fsSL https://dl2.jasperx.io/jn/docker.sh | bash on macOS/Linux, or irm https://dl2.jasperx.io/jn/docker.ps1 | iex on Windows. It asks for a node name, the connectors you want and a port, then starts the node — run it again with another name for a second node on the same machine.
  • A node running in Docker now updates itself from Account → System Updates, exactly like a native install — no more pulling the image and retyping the run command. Start new nodes from the published compose file (docs.jasperx.io → Getting started); a node started from an older image needs one manual pull first, then every update is a button.
  • A node joined to the new JasperX platform can install and update connectors and receive JasperNode updates again — on 2.1.0-beta.1 its catalogue stayed empty. That node needs this one update applied by hand (re-run the installer or pull the image); after that, updates are a button again.
  • JasperNode can now join the new JasperX platform. It is opt-in for this beta: start the node with the claim code from the platform’s “Add node” (JX_CLAIM=…) and it enrols itself; a node you do not claim keeps working with the current JasperX exactly as before. Claiming a node is a one-way step — it leaves the old JasperX link, and only a factory reset brings that back.
  • When a connector cannot take a tag, Jasper now tells you why and what to do — another connector already drives it, or the node’s tag table is full and some tags must go — instead of hunting for an owner that does not exist or treating a full node as a broken connector package.
  • A connector whose status lamp was bound on an HMI page before the connector started could fail to start at all (Modbus showed error -205), and deleting and re-adding it did not help. It now starts normally — update the core and restart.
  • Some connector status tags (for example is_connected) showed 1/0 instead of true/false in the IDE and to Jasper, and a restart did not fix it. They now show their real type.
  • HMI lamps and displays bound to another connector’s status recover by themselves when that connector is restarted, instead of staying blank until the page is re-saved. The page editor now shows the problems the HMI server finds on a page (it silently showed none before), plus a note when a page leans on another connector’s status tags. Update the core first, then the HMI connector to 1.0.6.
  • When Jasper asks you to approve a connector probe — a Modbus write test, a JasperMate network command, an InfluxDB admin action — the Approve card now tells you in two sentences what it will do and what you will see, in every mode.
  • Asking Jasper to scan an EtherCAT segment no longer shows an Approve card. The scan still refuses to run while an EtherCAT instance is enabled — disable it first. Update the EtherCAT connector to 1.6.1.
  • A second InfluxDB data logger set up on the same node now gets working query tags of its own. Until now only the first one did — the others still logged their data, but their ad-hoc query tags were silently missing. Update your InfluxDB connector along with this version. Loggers you already have keep working exactly where they are.
  • If a connector shows a configuration error because an older version saved it, opening its page and pressing Save no longer fixes it — and it never reliably did (the MQTT Broker is the exception; its page still repairs itself in one Save). Instead, the connector now tells you exactly what is wrong: open the connector and read “Recent errors” on its status card, which names the setting it will not accept. Correct that setting — by hand, or by asking Jasper to do it for you — and enable the connector again. If you have an MQTT Broker saved by a version older than 1.3.0, its static usernames and passwords are no longer carried over for you and must be typed in again before clients can log in; until you do, the broker refuses all connections rather than accepting anonymous ones. A Modbus register saved with a data type its address space does not allow is now shown as an error on the register instead of being silently corrected when the page opens.
  • Pressing Scan, Probe, Rebirth or Discover a second time while the first one is still running no longer loses the second press. It used to be thrown away in silence, and the panel or the chat then sat there until it timed out on a request nobody was ever going to answer. Update your Modbus and EtherCAT connectors along with this version to get the fix on those two.
  • Update your connectors along with JasperNode — every one of them carries the fix above, so a node left on the beta.20 packages keeps the bug.
  • Jasper’s two JasperMate skills — reading a device’s I/O cards and changing its Wi-Fi or Ethernet — now come from the JasperMate connector itself rather than from JasperNode. Update the JasperMate connector when you update to this version — until you do, Jasper cannot read a device’s I/O cards or change its network at all, because those skills no longer ship in the node. After that they improve whenever you update the connector, without waiting for a JasperNode release. Asking Jasper to look at a JasperMate on some other address no longer overwrites the address you saved on the Discovery page. Changing the device’s network from a chat now asks you to approve it first, the same card you already see before other device writes. The Discover button and the Network page work exactly as before.
  • Asking Jasper about your InfluxDB history no longer needs a saved query set up first — just ask, and it writes the query. Changing your database (creating or deleting a bucket or organization) now shows you an Approve card first when the node is not in development mode, because deleting a bucket destroys its history for good. Your saved queries and the Probe tab are untouched. These tools now ship with the InfluxDB connector rather than with JasperNode. Update the InfluxDB connector when you update to this version — until you do, Jasper cannot query your history or manage your database at all. After that, updating the connector is what improves them.
  • When you scan an EtherCAT bus, each PDO now reports which way it runs under the same name a mapping uses — dir — so a mapping built from the scan works as copied, whether you build it yourself or ask Jasper to. Update the EtherCAT connector when you update JasperNode; scan results and the scan panel have to be the same generation.
  • Rebirth now works on edge nodes whose group or node name has a space, a dot or a colon in it — it used to fail on those with a misleading message. The Rebirth button on the MQTT page also tells you what actually happened now: the request went out, the broker is not connected, or there is no such edge node in the config, instead of just looking like it worked. If you update JasperNode you also need to update the MQTT connector, and vice versa — they ship as a pair this time.
  • Reading one bit out of a Modbus register is now spelled one way and one way only: set “Bit (single)” to the bit number and leave the Type alone. Picking bool as the Type of a 16-bit register was never what it looked like — it gave you “any bit set”, not the bit you wanted — so it is no longer offered. Most affected connectors are fixed by opening the Modbus page and pressing Save once; everything is filled in for you. If one of your registers had its Type set to bool, the page will ask you to choose instead — pick “Bit (single)” to keep a true/false tag, or a numeric type if you want the whole number (that one also needs the old tag deleted and the node restarted, and the page tells you so).
  • In the EtherCAT scan results, a PDO whose direction could not be read used to be labelled OUT — which could send you to map an input as if it were an output. It now shows ?, with a note telling you to bring JasperNode and the EtherCAT connector to matching versions and scan again.
  • You can now put the username and password straight into an MQTT connector’s broker address — mqtt://user:password@broker.local:1883 — the way most other MQTT tools let you. It used to save without complaining and then never connect. If the password contains an @, a : or a %, write them as %40, %3A and %25. The separate Username and Password boxes still take priority: fill the Username in and those two are used, leave it empty and the address is used instead.
  • Connector settings that mean the same thing now have the same name everywhere — a polling time is cycleTimeMs, a timeout is timeoutMs, and a mapping’s direction is dir. One thing to do after this update: each Modbus, Serial, EtherCAT, S7, JasperMate, MQTT and Modbus Server connector will show a config error until you open its page and press Save once. Everything is filled in for you — Save just writes it in the new format.
  • The EtherCAT Mode dropdown and its Init start state are gone — neither ever changed how the bus ran, so having them there only invited you to set something that had no effect. Modbus’s old noGroup option is gone too; use “no read group” on inputs and “no write group” on outputs. Open the connector’s page and press Save once and it is fixed for you.
  • Typing a network range like 192.168.1.0/24 into a Modbus Server’s allowed-clients list used to save fine and then block every device that tried to connect. It is now rejected as you save, with a message telling you to list the addresses one by one instead.
  • If you ask Jasper about an MQTT Broker or HMI connector, it no longer sees the passwords or PINs you configured — until now those were sent to the AI in full. Usernames and who can sign in still show, so the answers stay useful. One thing to do after this update: if your MQTT Broker has static users, its page will show a config error until you open it and press Save once. Your users and passwords are filled in for you — Save just writes them in the new format.
  • When a Modbus or InfluxDB connector cannot connect, the error now tells you which problem you actually have — nothing listening on that port, a name that will not resolve, no route to the device, or a certificate that does not match — instead of an operating-system code or no reason at all. For Modbus over a serial line it also names the serial faults: no such port, the port is already in use, or JasperNode not being allowed to open it.
  • When an MQTT connector cannot reach its broker, the error now tells you which problem you actually have — nothing listening on that port, no route to the host, a name that will not resolve, or a typo in the broker URL — instead of blaming DNS for everything. Each one names the thing to check.
  • If you tick “Disabled” on a Modbus register or an S7 mapping, its tag now stays where it is, keeping its value and history, and you can drive it from a script. Previously the tag was usually deleted the moment you parked it — which defeated the point, since parking a point to simulate it is the main reason to use the setting. If you park a mapping and then write a script for its tag, that now works.
  • If you change the data type of a mapping while it is disabled, JasperNode now tells you to delete the tag first, exactly as it does for a mapping that is running. Before, it accepted the change and left the tag on its old type, which showed up as the wrong kind of value in the IDE.
  • When you ask Jasper to probe a Modbus device or scan an EtherCAT network, those tools now come from the connector rather than from JasperNode itself. In practice this means a connector update alone can improve what Jasper can do with that protocol — you no longer have to wait for a JasperNode release. Nothing changes in how you ask for it.
  • The sidebar now has a link that opens the JasperX platform in a new tab. It points at whichever platform your node is configured to use.
  • If one register on a Modbus device times out now and then — common on a noisy RS-485 line or a device with a slow parameter — you can tick “tolerate errors” on that register. The connector stays green and keeps talking to everything else instead of dropping the connection and restarting. If that one register keeps missing (as many times in a row as your “max consecutive failures” setting), the connector still reports it and reconnects. A counter on the connector page shows how many misses were tolerated since it connected. If a write to that register is the one that goes missing, the connector sends it again on the next cycle, so a command is never quietly lost.
  • The JasperNode documentation has moved to jasperx.com.au/docs. Update any bookmarks you have — the pages themselves are the same.
  • The S7 mapping checkbox called “ignore” is now called “Disabled”, and it finally behaves the way you would expect: a disabled mapping is treated as though you had deleted it from the list, so you can drive its tag from a script while the PLC point is parked. The tag itself, with its value and any script on it, is kept. If you have a saved S7 connector that used the old “ignore” setting, open its configuration and press Save once after updating — until you do, that connector will show a configuration error.
  • The Modbus register checkbox called “ignore” is now called “disabled”, and it finally behaves the way you would expect: a disabled register is treated as though you had deleted it from the list, so you can drive its tag from a script. The tag itself, with its value and any script on it, is kept. If you have a saved Modbus connector that used the old “ignore” setting, open its configuration and save it once after updating — until you do, that connector will show a configuration error.
  • Jasper’s two approval cards now look and behave the same: Reject on the left, Approve on the right, both with a tick and a cross, and Approve is always the same maroon button. Previously the buttons swapped sides between the two cards and one of them painted Approve red.
  • On a running Modbus connector, changing a device address or a register’s unit ID used to be accepted and then quietly ignored until you disabled and re-enabled the connector — and on an output register it could half-apply, writing to the new address while still reading the old one. The connector now restarts itself so the change takes effect properly.
  • If a connector shows a configuration error because it was saved by an older version, opening its form and pressing Save once now always repairs it. In some cases the form used to open as though nothing needed saving, leaving no way to fix the connector from the page.
  • Jasper can now find a device on an RS-485 serial line, not just over the network, and can try many combinations of speed, parity and address in one go instead of one guess per question — which is what identifying an unknown meter or drive usually takes. On a serial line the probe is refused while a Modbus RTU connector is using that port; disable it first. Update the Modbus connector to get this.
  • The IDE has a new look, matching the JasperX website and cloud app, and the code editor now follows it in both light and dark. It also no longer loads its fonts from the internet, so a node on a plant network with no outside access renders correctly instead of falling back to whatever fonts the browser happens to have.
  • Updating to this version downloads about half of what an update used to, and every update after it downloads about 43 MB instead of about 290 MB. The program on disk is half the size. Nothing changes in what the node does.
  • When you ask Jasper about a connector, it now sees the readings that connector publishes about itself, not just the four the node always knew about. An EtherCAT bus running in diagnostic mode is no longer reported as simply connected.
  • A bus scan now flags each device whose process data could not be read, so Jasper knows to give it a mapping instead of copying numbers that will not work.
  • When you scan an EtherCAT bus, a device whose process data the connector cannot read is flagged on the scan itself, so Jasper knows to give it a PDO assignment instead of copying numbers that will not work. When the bus refuses to start, the error now says what to change next. Start-up settings you put in initSdos are sent at their real width, and one the device rejects stops the start with the reason instead of being dropped quietly. If you already use initSdos, re-check each value’s length after updating: 2, 4 or 8 hex characters for an 8, 16 or 32-bit object — anything else shows as a config error until you fix it, and a value shorter than its object (say 4 characters on a 32-bit setting) is now sent at that shorter width, which the device may refuse — the start then fails with the reason in the connector’s last error. A connector held in a diagnostic state says so in its stats. Update your EtherCAT connector to get this.
  • When you approve a deploy on the red card, the Approved line in the chat now lists each script with whether it is enabled and what triggers it, so Jasper no longer spends turns re-reading what it just deployed.
  • In the EtherCAT scan view, a PDO the connector could not read is flagged “not sizeable”, with a tip on what to give the device instead.
  • The AI usage meter shows as soon as you open a chat again. On a node still running beta.16 or earlier it stays blank until your first reply once the cloud side updates — update the node to fix it.
  • When Jasper removes one entry from a connector’s configuration list, the list now closes up instead of leaving an empty slot that stops the connector from starting. An edit that would leave such a slot is refused and says which position to use. If a removal finds nothing at the path it was given, it now says so instead of reporting success.
  • Jasper can once again delete a whole section of a connector’s configuration that contains a password, when deleting it is what you asked for. It is still stopped from quietly wiping a password any other way.
  • Pressing Scan (EtherCAT), Probe (Modbus) or Discover (JasperMate) twice in quick succession now tells you the second press was too soon, instead of waiting out a timeout and blaming the device. Update those three connectors to get this.
  • If your MQTT broker URL carries a username and password, connection errors no longer show them — on the connector card, in the node log, or to Jasper. Update the MQTT connector to get this.
  • Saving a bad mapping on a Modbus TCP server that is already running no longer stops it serving its clients; it keeps the last good configuration and shows the error. Update the Modbus Server connector to get this.
  • If the IDE cannot reach the node when you flip a connector on or off, the switch goes back and a message says nothing was changed, instead of showing a state the node never took.
  • When Jasper tests a set of scripts, it now has to say in advance what each step should produce, and the node checks the run against that. A test with nothing to check no longer counts as passing. If a script is edited after its test, the old pass no longer applies.
  • When Jasper deploys scripts it is one approval for the whole set. New logic on a development node deploys as soon as its test passes. Anything that changes logic already running, or touches a tag wired to a device, asks you first: an amber Consent card in the chat on a development node, and the red Deploy Gate card on a commissioning or production node. You switch the node’s mode from the status bar.
  • When Jasper tests scripts against a copy of your live program, the test behaves much more like the real thing. A script can tell which tag triggered it, it remembers its own state between steps, and on-delay timers actually elapse instead of being stuck. Previous values and timestamps show what was really there when the copy was taken, rather than zeros.
  • An EtherCAT slave can now be told which PDOs to use when the connector starts. That is the missing piece for CiA402 servo drives such as the Leadshine LC10E: with its default PDOs written at start-up the drive comes up to Op alongside the I/O terminals. The bus scan also marks each slave as a drive or an I/O device.
  • After updating to this version, the Connector Manager will show an update available for every connector you have installed. That is expected — all of them were rebuilt so they carry the latest shared fixes. “Update all & restart” installs them together.
  • While a deploy card waits for your Approve or Reject, Jasper now stops instead of checking on scripts it cannot change. Chats with an approval in them are shorter and cheaper.
  • When Jasper tests scripts on a commissioning or production node, the result now names any downstream script the deploy will also require. It gets tested in one go instead of being refused and retested.
  • Jasper pulls in less reference material it is not going to use, so answering a question about existing scripts costs less.
  • Jasper is now only shown the tools your node can use. On a node with no InfluxDB or JasperMate, those tools are simply not offered — which makes every message in a chat cheaper and keeps Jasper’s attention on what is actually there.
  • Checking whether a script is running cleanly and reading its code are now the same tool, so Jasper asks once instead of twice. It reports the tag’s value too, so after a deploy Jasper can see the value moved without a second look, and it tells Jasper when the Logic Cycle is stopped so a healthy script is not mistaken for a broken one.
  • Checking a connector and scanning an EtherCAT bus give Jasper short answers now instead of pages of configuration, and Jasper stops re-enabling a connector that keeps failing for the same reason — it asks you to check the device instead.
  • A boolean tag that receives something it cannot read now reads as off, not on. Before, a bad reading could switch a flag on and every piece of logic downstream would act as if the condition were true. If you have logic that behaved as though a signal was on when its source was faulty, that is why.
  • A script asking for a tag’s previous value now gets it. It used to come back empty on most tags.
  • A node connected to the cloud no longer creeps up in memory the longer it stays connected. On a long-running node this amounted to tens of megabytes a day.
  • Writing to a built-in connector’s enabled tag can no longer stop it. Previously that was possible, and there was no way to turn it back on from the interface.
  • When you Accept one of Jasper’s proposed actions, Jasper now knows you approved it, rather than assuming it ran on its own.
  • Jasper’s tool cards now open showing a plain-language summary of what happened, instead of raw data. The full detail is still one click away.
  • Testing scripts that read binary tags no longer moves far more data than the tag holds. On a small node this was the difference between a test running smoothly and the interface stuttering.
  • When an EtherCAT bus refuses to start, the connector’s error now names the slave that refused and the reason the slave gave, instead of a bare “rc=-3”. If no slave refused, it says the master gave up and why.
  • The EtherCAT connector’s “start state” setting now does what it says: choosing PreOp or SafeOp holds the bus at that state for diagnosis without exchanging process data, instead of being ignored.
  • When Jasper changes a script it now writes a draft rather than editing the running code. It can test a whole set of drafts together against a copy of your live program — real values, no effect on the machine — and then deploy them in a single step where either every script lands or none does. Nothing runs on the node until you approve that deploy.
  • Updating a node is now something you can walk away from. The download continues in the background, and reopening the update window — or reloading the IDE entirely — shows the real progress instead of starting over or hanging. When several connectors have updates, “Update all & restart” installs them together with one restart, and you get one notification for the batch instead of one per connector.
  • Jasper can no longer quietly write a connector’s trigger tag to make something happen on the bus. Anything a connector declares as reaching the physical equipment is refused, and Jasper is pointed at the proper tool for it, which asks for your approval and tells you what will physically happen first. Update your EtherCAT, Modbus and JasperMate connectors to get this.
  • Jasper can no longer start a network test by writing to a settings tag behind your back. It has to use the network diagnostics tool, which asks for approval and says what it will run.
  • The IDE now works on a phone screen. Chat opens full-screen from the side rail, and tapping a tag opens its properties over the full width. It is a basic pass — enough to look at a node and talk to Jasper from your phone.
  • The node’s built-in services no longer appear in the Connector Manager as something you can install, delete or switch off. They are part of the node, and deleting one over the API used to take that service down — that now refuses with a clear message.
  • Jasper cannot overwrite a script it has not actually read. Seeing a tag in a list is no longer enough — it has to fetch the code first, so a replacement is always written against what is really on the node.
  • Linux nodes no longer get the permission file /etc/sudoers.d/jaspernode. Earlier installs created it to let the node’s service account start and stop its own service without a password. It never actually worked — the service is locked down in a way that blocks it — and nothing on the node ever used it, so installing or repairing now removes it. Updating over the air replaces the program but not system files like this one, so a node you updated that way still has it. It does nothing where it sits and is safe to leave. To clear it, re-run the installer on the node: curl -sL https://dl2.jasperx.io/jn/install.sh | sudo -E bash -s — —repair
  • A degrading EtherCAT bus no longer risks stalling its own real-time cycle through the node’s error logging. Error lines are still recorded in order and with the time they happened.
  • A node with plenty of normal logic no longer knocks out its own Logic Cycle at boot. Previously enough healthy scripts running back to back could freeze the cycle’s heartbeat long enough for the node to restart it, which left every OT connector stopped and needing a manual re-enable.
  • Disabling or removing a connector with a lot of tags no longer freezes the IDE and AI chat while it tears down.
  • A node could show as Online while Remote Access said it was not enabled, until someone restarted it. The node now notices the dead connection and reconnects on its own.
  • Updating a node is now verified against exactly the file that gets installed, not just the one that was downloaded, and the check no longer needs hundreds of megabytes of memory to run. If something is wrong with the staged file the update refuses rather than installing it, and tells you whether you need to download again or just retry.
  • Downloading an update on a small node no longer eats memory in proportion to the file size. On a JasperMate a 292 MB update used to push the node to within 362 MB of its memory limit.
  • Closing the tab while Jasper is waiting on a tool no longer breaks the conversation. The node reports the outcome itself, so the chat can always be continued.
  • In auto-run mode, Jasper waits for a full set of proposed actions before running any of them, so a batch that includes something needing your approval always stops and asks. Switching out of auto-run mid-reply now shows the Accept button instead of leaving the card stuck.
  • You can now test what a script does when an input goes missing by giving it no value, instead of the test refusing to run.
  • Asking the API for one folder of tags now returns that folder instead of every tag on the node.
  • A connector created outside the IDE — by Jasper, or over the API — can now be switched on instead of reporting that it does not exist.
  • You can now write your next message while Jasper is still replying, and switch between Ask, Agent (with approvals) and Agent (auto-run) at any time instead of waiting for the reply to finish. Your draft is kept until the reply ends, then Enter sends it. Switching to auto-run mid-reply will not silently run a tool that is already waiting for your approval — that one still needs your click. Leaving a chat while a tool is waiting for approval now asks first, so a conversation can’t be left in a state Jasper is unable to continue.
  • The Overview page now shows a card for each connector instead of just its name, so you can see what an instance is connected to and how it is doing at a glance. The HMI card links straight to its dashboard.
  • Jasper can now read or change many tags in a single step. Applying the same change to several tags — the same script across three chambers, say — takes one approval instead of one per tag, so a rollout is quicker to review and quicker to run.
  • Nothing user-facing on the node; this changes how JasperNode itself is released, so a version can no longer go out pointing at connector or AI-assistant updates that were never published.
  • When you deploy a script whose triggers would make it fire itself in a loop, the editor now warns you before it is armed. If scripts start triggering each other faster than the Logic Cycle can keep up, a warning appears rather than the node quietly falling behind.
  • The built-in MQTT broker now enforces the connection and message limits you set, and supports shared ($share) subscriptions so several clients can split a topic’s load.
  • A connector that keeps hitting the same fault no longer buries its error log in duplicates. Repeats are counted into one line with a “×N” marker and the time it last happened, so the log stays readable and asking Jasper about a connector costs a fraction of what it did.
  • When Jasper reports on a connector it now shows the most recent errors and says how many it left out, instead of pasting the entire error history into the reply.
  • If you use the built-in MQTT broker, open its configuration page and save it once after updating. A setting that never had any effect was removed and another was renamed, so the old configuration will be flagged until you re-save it.
  • A script tag can no longer be saved with no code in it. Previously an empty script could be created and armed, which looked like it was running when there was nothing to run.
  • The Stop button in AI chat is now a neutral circle instead of a red one. Stopping a reply is a normal action, not a fault, so the button no longer competes for attention while Jasper is working.
  • A faulty script can no longer take the whole node down. If the Logic Cycle stops, it restarts straight away, the script responsible is named, and outputs are held until the cycle is confirmed running again rather than being driven by a cycle that is not there.
  • Ask mode is now enforced when a tool actually runs, not only when Jasper is told which tools exist. Previously a change Jasper proposed while in Agent mode could still be carried out after you switched to Ask. Tool cards the current mode won’t allow no longer show an Accept button.
  • If a device sends the same message twice in a row — an identical serial frame, or the same MQTT payload republished — the second one now wakes your scripts. Previously it could be treated as “nothing changed” and silently dropped.
  • A connector fault that keeps happening now keeps showing in the log with an up-to-date count, instead of going silent after the first line. A fault that comes back later reports itself again rather than being swallowed.
  • A connector no longer shows as connected straight after a restart before it has actually started — that was a stale value restored from the database. Connector statistics are also no longer saved to disk, which removes a steady stream of writes to the node’s storage.
  • After a restart the node runs the scripts you deployed, not an unsaved draft left open in the editor.
  • Asking Jasper about a large program no longer produces an enormous answer or a stalled reply. It now reads up to a sensible limit and tells you plainly which parts it did not read.
  • On JasperMate hardware the node sometimes came up not knowing what it was running on. It now waits for the answer instead of guessing once at boot.
  • Nothing user-facing; an internal check that was passing without actually testing anything now works.
  • When the AI assistant mentions one of your tags or connectors in chat, the name is now a clickable chip — click a tag to jump to it in the tag tree, hover it to see its current value, or click a connector to open its page.
  • The tag tree now hides the __sys system folder by default — it is only needed for deep troubleshooting. Toggle it back on from the tree’s ⋮ menu; searching won’t surface system tags while hidden, but clicking a direct reference to one (a chat chip, a script trigger) still reveals it.
  • Rebooting a node no longer replays latched outputs: script-computed tags and OT outputs now start from a defined start value at boot (like a PLC warm start), so a motor that was commanded on before a power cycle stays off until your logic decides again. Plain tags still keep their values. A new per-tag retain option (IDE Advanced tab) lets a totalizer or setpoint deliberately survive reboots — set it on any computed tag whose value genuinely must carry across a power cycle.
  • The AI assistant can no longer see your credentials: passwords, tokens and secrets embedded in connector configs or URLs are structurally removed from everything shown to the model, and its write tools refuse to echo them back. Tool results are also restructured so the assistant reads exactly the data it needs, which makes it faster and more reliable on large projects.
  • The JasperX connector’s is_connected status now reflects the whole cloud link — previously a node could keep reporting connected for hours (even across restarts) after silently losing the cloud, sending every diagnosis down the wrong path. A stuck reconnect attempt now times out and retries instead of wedging.
  • Long AI replies no longer freeze the IDE while streaming — a big answer used to stall the browser for tens of seconds and could even drop the IDE’s live connection. Chat rendering is also hardened against a reply injecting HTML or unsafe links.
  • AI chat tool cards now show real values in their titles — “Reading 12 Tags” instead of the literal text “{tagIds.length}”.
  • A connector mapping whose tag name contains a forbidden character (like /) now fails with a message naming the rule and the offending name, instead of the cryptic “could not link mapping tag (rc=-2)”.
  • The AI assistant now handles tags that hold large JSON documents: it sees an outline of the structure and reads just the part it needs, instead of failing or flooding the chat with the whole document.
  • The Flow view can now be dragged around like a map and remembers your position and zoom, instead of snapping back or drifting when you switch tabs or reopen it.
  • A Modbus byte-order probe can no longer write its test value to a device an enabled Modbus connector is driving — the probe is refused and names the instance to disable first, while read-only probes keep working. When the AI assistant asks for a probe that writes, you now get an Approve/Reject card showing the device, the registers touched and the exact request before anything is sent. Note the protection matches the address as written in the connector config, so probe the device by that same name or IP.
  • Two Modbus instances addressing the same device — one writing the port as :502, the other leaving it blank — could silently drive the same output register. The second instance now stops with a conflict message naming the register instead of double-driving the point. If your node was running such a pair, keep one instance or split the registers between them, then re-enable.
  • The AI assistant’s InfluxDB query tool now asks for your confirmation before running — a query it passes can overwrite the instance’s saved query, and on InfluxDB v2 the query language itself can modify data, so it is no longer treated as read-only.
  • A latched LiDAR profile alarm can now be acknowledged with nobody watching the tag: each profile gets a new alarm_ack tag — write 1 to it from a script, an HMI button or the AI assistant and the alarm clears. Writing 0 to the old alarm tag no longer acknowledges, so anything that cleared alarms that way must point at alarm_ack instead.
  • An MQTT mapping pointed at an existing tag of the wrong type (a text tag where the mapping wants a number, say) is now refused with a message naming the tag, instead of attaching anyway and failing every read and write with misleading “tag was deleted” errors. An instance that has been running in that state now stops until the tag is renamed or removed — its other mappings were never moving data anyway.
  • The node now logs a warning when its own heartbeat runs more than two seconds late and an error past three seconds — the exact window in which a field connector drops to its safe state, which until now left no trace in the log at all. The worst gap seen since start-up is kept in the node’s system tags, under __sys/node/stats/liveness.
  • The first-time setup page now shows the JasperNode version, so you can tell which build a fresh node is running before you configure it.
  • Tag names and folder names now accept only letters, digits, underscore and hyphen — up to 64 characters per level and 255 for the whole path. Human-friendly text belongs in the description field. This is a breaking change for existing test projects: a tag whose name breaks the rule is skipped at start-up rather than deleted, and the start-up log names it with a ready-to-paste repair command — rename it and it comes back with its values and history. The IDE and the AI assistant now refuse a bad name up front and suggest a valid one.
  • MQTT tag names built from live data — Sparkplug group, node, device and metric names, and subscriber captures — are now converted into valid tag names automatically, with a short suffix when a name had to be changed so two different sources never merge into one tag. Names you type into the connector config are checked when you save, with a suggested valid name. The MQTT topics themselves are untouched.
  • The Modbus Server connector has been rebuilt in Rust. Your existing configuration carries over unchanged, and the server now answers the standard Modbus exceptions instead of the previous library’s improvisations: a write to a read-only mapping is refused (0x02) rather than silently accepted, a wrong unit id answers 0x0B rather than nothing, response delay works, and wide coil scans are served up to the Modbus limits. A running server with no clients connected now shows as connected once its listener is up.
  • The MQTT connector has been rebuilt in Rust, and its Sparkplug B support is now complete — births and deaths, commands, sequence numbering, Host Application state, and buffering of values recorded while the broker was unreachable. Your existing configuration carries over unchanged.
  • The HMI connector has been rebuilt in Rust and the operator interface now ships inside the connector package itself, so the screens always match the connector serving them. Your existing configuration and pages carry over unchanged. Several faults are fixed along the way: a panel whose page tag was broken no longer breaks a freshly opened tab, layout edits now reach panels that are already open, a signed-out tab lands on the sign-in screen instead of spinning forever, and two panels can no longer fight over the same momentary button.
  • The InfluxDB connector has been rebuilt in Rust. Your existing configuration carries over unchanged, and a historian can now watch any part of your tag tree without altering the tags it records. An InfluxDB server that stops answering entirely now fails quickly instead of hanging.
  • When a connector drops to its safe state because the runtime looked dead, the message now says which heartbeat went stale — the engine host or the Logic Cycle — and how old it was, instead of only reporting a lost supervisor. A connector that drives field equipment stays in its safe state until you re-enable it; connectors that only serve data resume on their own.
  • The IDE’s code editor has been rebuilt. Opening a code editor for the first time now downloads about 0.5MB instead of about 10.8MB, so it appears almost immediately — the difference is largest over remote access and other slow connections. The Compare-to-live diff no longer opens blank now and then, and diff views now have a side-by-side / unified toggle.
  • The IDE now serves its files compressed, so pages load faster — most noticeably over remote access and other slow connections.
  • Remote access now compresses traffic between the node and the relay — a 1MB file that previously crossed the link larger than its original size now crosses at under a fifth of it. The node also reports how much data remote access has sent and received, and the Remote Access status is correct straight after a reboot instead of reading as disabled until the first connection.
  • Opening a large tag tree and starting a connector that owns hundreds of tags are now near-instant instead of costing hundreds of milliseconds of engine time each.
  • Working in the IDE on a node with a large tag list no longer starves the runtime. Switching between the tags and connectors views used to block the node for seconds at a time, long enough that EtherCAT and JasperMate concluded the runtime had died and dropped their outputs to the safe state — from browsing alone. The tag list now subscribes in batches, the node serves those subscriptions without stalling, and the Logic Cycle produces its own heartbeat, so a busy screen can never look like a stopped runtime.
  • At start-up, connectors now wait until the Logic Cycle is listening before they publish their first values. A value that arrived in that gap used to be lost, leaving any script that depended on it running on the value stored before the restart until that input happened to change again.
  • Remote access now recovers on its own when the node’s internet connection switches over — for example WiFi to mobile. The old session used to stay half-open: the node reported the tunnel as connected and every open-tunnel command reported success while nothing came through, and only a restart cleared it. The node now checks the link every 10 seconds, drops a session silent for 35 seconds, and a fresh Remote Access click replaces a stale one.
  • Web apps reached through remote access — for example the Cockpit system page on a Linux node — no longer come up as a white screen after login. Compressed files were forwarded with the wrong headers, so the browser rejected them.
  • Remote access no longer loses data on a slow connection. Once the link filled up the node used to throw frames away, which left the IDE showing stale values and could wedge a transfer; it now slows the source instead of dropping anything.
  • Downloading a large file through remote access no longer freezes live tag values until the transfer finishes. Bulk transfers and live data now share the link instead of the download starving the display.
  • When a connector fails to apply part of its configuration, the tags it had already claimed are released again. They used to keep showing a link to a connector that was no longer there, and on JasperMate the undo could delete a tag that existed before the connector ever touched it.
  • The Modbus connector’s raw-offset help text now says what the connector actually does — the offset is added to the raw value, not subtracted.
  • A connector configuration that fails validation no longer takes the running connector down. It keeps running on the configuration it last accepted and reports the problem on its status, instead of stopping and staying stopped until you re-enabled it — which for an HMI panel or a fieldbus master meant one typo took it offline.
  • When a connector fails to apply a configuration, the message in the log now names what failed and what to do about it, instead of a raw internal error code — and it no longer repeats a message the connector had already reported in plainer words.
  • A connector’s Connected, Status and Errors tags now carry their descriptions again. They had been showing blank in the IDE on every connector.
  • Tags belonging to a network connector such as MQTT or the Modbus Server are no longer described as wired sensors and actuators in the Connections and Flow Exploration views.
  • A node that is connected to the cloud no longer reports the connection as down. On a busy node the status could latch to disconnected at start-up and stay there while the connection was in fact live.
  • Saving in the IDE no longer ignores a click when the button had not yet noticed your edit. Saving a connector configuration now says it has been saved and is being applied, and points you at the connector’s status — it used to claim the change was already applied, which could appear next to an error saying it had failed.
  • When the AI assistant gets a tool argument wrong, the error now says in plain language which field was wrong, what it sent, and what is accepted — so it corrects itself instead of repeating the mistake.
  • Pulling the JasperNode container image always gets the newest release — re-publishing an older build can no longer make latest serve it.
  • A node installed from a local file now records the version it is actually running, so an automatic rollback after a failed update returns to a build the node can name.
  • The AI assistant now tells you when a connector update is available, and applying an update to a connector that drives field equipment always waits for your Approve in the chat.
  • You now see a badge and a notice when a JasperNode update is available, and System Updates walks you through downloading and installing it safely.
  • The Connectors page is easier to scan — active connectors first, tidier cards, clearer states.
  • Leaving the IDE open across a node restart can no longer cause actions to land on the wrong tags.
  • When a connector change needs a restart, the message now tells you exactly where to restart: the System Config menu.
  • Running JasperNode in Docker or Podman no longer shows permission errors at startup, and update guidance now matches how containers actually update.
  • Setting a tag’s type via the API now accepts the same codes reads return, and errors list exactly what is accepted.
  • Small gauges on HMI screens keep their value text readable, and trend charts no longer clip their axis labels.
  • Connectors are now installed on demand instead of shipping inside JasperNode. Open Connectors to see what is installed and what you can add — installing one takes about a second and usually needs no restart. New connectors appear without updating JasperNode itself.
  • You can now name the connectors you want when installing JasperNode — for example CNTR=modbus,s7 — and the node installs them for you on first start. Everything else is added later from the Connectors page.
  • Restoring a program onto a new node now brings its connectors with it — they are downloaded, installed and configured for you, and left switched off so nothing moves until you turn it on.
  • If a connector keeps crashing and there is no older version to fall back on, JasperNode now switches it off and explains why, instead of restarting it forever.
  • Upgrading from an earlier beta: your program and connector settings are kept, but the connectors themselves now live in the catalogue. Open Connectors after the upgrade and click Recover on each — it downloads, installs and reconnects in seconds.
  • If a project restore fails part-way, the Logic Cycle now always starts again. Previously it could stay stopped — even after a reboot — with nothing saying why.
  • A bad entry in a connector’s version box can no longer break your backups.
  • Packet capture with a filter like “tcp port 502” now shows both the requests and the replies.
  • Installing JasperNode with a chosen connector set (CNTR=) no longer logs errors saying those connectors do not exist moments before installing them.
  • Diagnostics, Connector Manager and EtherCAT pages no longer show blank fields or ghost entries until you refresh the browser.
  • The Linux installer now sets up real-time scheduling for fieldbus connectors automatically.
  • Reinstalling JasperNode no longer silently discards a node’s saved settings.
  • A node installed from the Beta channel now shows and follows Beta, so it actually receives beta releases.
  • If a tag behind a Modbus Server mapping is deleted, the server now returns an error instead of reporting 0 as a real value, and says so.
  • Deleting a tag fed by MQTT no longer stops that topic being received until a restart.
  • If an HMI button’s interlock tag is missing or unreadable, the button is now blocked instead of allowed through.
  • A packet capture with an unsupported filter now tells you, instead of quietly returning all traffic as though it were filtered.
  • ARP scan, ping, traceroute and discovery now work on hosts that do not have libpcap installed.
  • Deleting a tag that InfluxDB was writing no longer leaves NaN values arriving in the historian forever.
  • If the connection that keeps a node visible in JasperX dies, the node now notices within about two and a half minutes and reconnects on its own, and tells you it lost the cloud. Previously it could stay invisible in JasperX until someone restarted it.
  • On older Linux systems the network tools (ARP scan, ping, traceroute, discovery, interface list) now start instead of failing with a GLIBC version error.
  • JasperNode has a new logo.
  • The user docs now include a “What’s new” page describing each release in plain language.
  • The user documentation site has a refreshed look and updated content.
  • In Docker, the network tools (ARP scan, ping, traceroute, discovery, interface list) now start instead of failing to load.
  • When the network tools can’t get raw network access, the node now reports it — with the cause, the affected tools, and how to fix it — instead of silently returning nothing.
  • A network tool that fails (unreachable target, bad interface, blocked socket) is now reported as failed, instead of looking like it ran and found nothing.
  • Choose your update channel (Stable or Beta) right in System Config.
  • macOS and Windows are now supported by running JasperNode in Docker.
  • Fixed the Linux install command that failed to download.