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.
[2.0.0-beta.15] — 2026-09-01
Section titled “[2.0.0-beta.15] — 2026-09-01”- 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.
Improved
Section titled “Improved”- 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.
[2.0.0-beta.14] — 2026-08-28
Section titled “[2.0.0-beta.14] — 2026-08-28”- 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.
Improved
Section titled “Improved”- 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.
[2.0.0-beta.13] — 2026-08-24
Section titled “[2.0.0-beta.13] — 2026-08-24”- 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
__syssystem 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.
Improved
Section titled “Improved”- 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
retainoption (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_connectedstatus 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)”.
[2.0.0-beta.12] — 2026-08-16
Section titled “[2.0.0-beta.12] — 2026-08-16”- 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_acktag — write1to it from a script, an HMI button or the AI assistant and the alarm clears. Writing0to the oldalarmtag no longer acknowledges, so anything that cleared alarms that way must point atalarm_ackinstead. - 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.
[2.0.0-beta.11] — 2026-08-09
Section titled “[2.0.0-beta.11] — 2026-08-09”- 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.
Improved
Section titled “Improved”- 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.
[2.0.0-beta.10] — 2026-08-01
Section titled “[2.0.0-beta.10] — 2026-08-01”- 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
latestserve 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.
[2.0.0-beta.9] — 2026-08-01
Section titled “[2.0.0-beta.9] — 2026-08-01”- 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.
[2.0.0-beta.8] — 2026-07-29
Section titled “[2.0.0-beta.8] — 2026-07-29”- 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.
[2.0.0-beta.7] — 2026-07-29
Section titled “[2.0.0-beta.7] — 2026-07-29”Improved
Section titled “Improved”- 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.
[2.0.0-beta.6] — 2026-07-24
Section titled “[2.0.0-beta.6] — 2026-07-24”- JasperNode has a new logo.
- The user docs now include a “What’s new” page describing each release in plain language.
Improved
Section titled “Improved”- 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.
[2.0.0-beta.5] — 2026-07-23
Section titled “[2.0.0-beta.5] — 2026-07-23”- Choose your update channel (Stable or Beta) right in System Config.
Improved
Section titled “Improved”- macOS and Windows are now supported by running JasperNode in Docker.
- Fixed the Linux install command that failed to download.