Release Notes

Platform updates for the EdXR apps and the Caffeine editor package.

EdXR 1.5.0 Release Notes

Apps: EdXR Viewer 1.5.0 (Windows, macOS, iOS, Android, Meta Quest, Pico, Vive, SteamVR) Editor: Caffeine package 1.1.22 Previous app release: 1.4.1 (December 2025)


Overview

1.5.0 covers seven months of work and is the largest release we have shipped.

The app interface has been reworked from the ground up. The course library, navigation, search, the multiplayer lobby, and the toolbars were rebuilt rather than adjusted, and the result runs on every platform we ship. That includes VR, which has carried a separate, older interface for years and no longer does.

Two other areas account for most of the remaining work: a rebuilt transfer system for moving courses between the editor, the server, and the apps, and landscape support on phones and tablets, which customers have been asking for.


Highlights

  • A completely reworked app interface, rebuilt across desktop, mobile, and VR rather than carried forward from 1.4.1.
  • Faster course browsing as part of that rework, with favorites, breadcrumbs, and a search that resolves a course from two partial words.
  • A new multiplayer lobby that shows participants and session state before you join a room.
  • Transfers are significantly faster and hold up through weak signal, dropped connections, and app switching mid-download.
  • Landscape courses on mobile. Authors can build wide layouts, with optional on-screen sticks and buttons that course logic reads directly from Flow graphs.
  • VR runs the full desktop interface. One app, every headset, every screen size.
  • The AI assistant is live, answering learner questions from the course's own material.
  • AI Bot Conversation nodes in Flow. Paired with the voice nodes, an NPC can hold a spoken conversation with a learner.
  • Sub-graphs in Flow. Collapse any part of a graph into a single tile with named pins, and step inside when you need the detail. Large graphs stop looking large and being hard to navigate.

Everywhere: desktop, mobile, and VR

Downloads and uploads

We rebuilt the transfer engine around a single principle: measure what the connection can actually sustain, then use all of it. On a fast link, a 1 GB course uploads in about 20 seconds and a 4 GB course in roughly a minute. The engine also remembers the networks you have used before, so a repeat transfer on a known connection skips the ramp-up.

Reliability mattered more to us than raw throughput, since that is where the previous system fell short. Losing signal mid-download now pauses the transfer, reports the state clearly, and resumes from the exact point it stopped. The same applies to weak cellular, app switching, and congested hotel or conference Wi-Fi. Every transfer is verified on arrival, and progress reflects bytes actually moved rather than stalling at 99%. When a transfer does struggle, we keep a privacy-scrubbed log that support can review.

Getting around your course library

  • Favorites. Star a course or folder and reach it in one tap from the nav bar.
  • Breadcrumbs across the top, with a history dropdown and a pinned Home, so deep folder trees stay navigable.
  • Improved search. Multiple words, quoted phrases, folder paths, and typos are all handled. Typing cardio anat returns Cardiac Anatomy wherever it sits in the tree, with the matching portion of the path highlighted. Performance holds as libraries grow.
  • Thumbnails load ahead of you. Your organization's course images download in the background, so grids fill immediately and scroll smoothly, including on standalone headsets.
  • Scroll position is preserved. Refreshing the library no longer returns you to the top, and neither does a course finishing its install.
  • Grid density is adjustable by slider, or by pinch-to-zoom on touch devices.
  • More per-course actions. Long-press or right-click for Favorite, Copy Link, Copy Path, and Uninstall. Courses that cannot run on the current device are dimmed rather than hidden, so learners can still see they exist.

Multiplayer and Group Study

The lobby now shows the state of a room before you enter it: participant names, a live timer for how long the session has been open, and the full roster.

Session handling underneath is more resilient. Rejoining after a drop works. A room that closes while you are viewing it reports that it has closed. A lost connection is shown as a disconnect rather than an empty room list that implies everyone left. Switching organizations or signing in from a second device no longer disrupts a running session.

Live Analytics

Custom analytics now stream to the server while a session is still running, so reports update as learners work instead of waiting for someone to finish and sign back in. Results are tied to the session, which means a reconnect or a crash cannot leave duplicate or orphaned records. In the admin dashboard, the analytics, publishing, and asset tables refresh on their own and show a "Live" indicator.

Across the app

Startup is faster and goes straight to the sign-in screen. Navigating between courses stays responsive over a long session. Japanese is now supported in courses. The interface is sharper at every screen size and handles iOS notches correctly. Pressing ? anywhere brings up a full control reference for the device you are on.


VR: Meta Quest, Pico, Vive

The full desktop interface, in VR. VR has run a separate, older interface for years. As of 1.5.0 it does not: search, favorites, breadcrumbs, the new lobby, and the controls reference are the same as on desktop and mobile. It is one app now, so future improvements land on headsets at the same time as everywhere else.

  • Passthrough in group sessions. Learners can switch to passthrough mid-session without the host enabling it.
  • Improved frame rates and battery life, tuned per headset, with no visible quality tradeoff.
  • Sharper text and panels at distance. The shimmer on world-space panels a few meters out is resolved.
  • Thumbstick scrolling works throughout the interface.
  • Keyboard behavior is fixed. Closing the keyboard no longer dismisses the search panel behind it, and search fields open with existing text ready to edit.
  • Course lasers respond to course logic, so authors can enable or disable pointing for specific steps.

Pico and Vive builds now ship with the correct rendering settings, and long VR sessions moving between courses are stable.


Phones, tablets, and desktop

Landscape courses, new in 1.5.0. Before this release, every course ran portrait on phones and tablets. Authors can now enable Landscape on a course, and it presents wide as soon as the learner enters the experience.

Landscape is a per-course setting rather than something the app detects from device orientation. A course built for landscape should arrive wide for every learner, every time, instead of reorienting because someone shifted position.

On-screen joysticks and buttons. A landscape course can carry virtual controls: one stick or two, buttons alongside, and haptics on use. Course logic reads those controls directly, so authors can drive movement, trigger actions, or change what a button does from one step to the next. Because joysticks and on-screen buttons are exposed as input in Flow, first-person controller experiences are now possible on mobile, or in any other mode an author wants to support.

Alongside that:

  • A collapsible side rail keeps app controls within thumb reach in landscape and collapses when a step does not need it.
  • AR improvements. Virtual objects can be occluded by real ones at the author's discretion, the AR toggle is reliable, and AR behavior can be set per step.
  • A better course overview on large screens, with a full-bleed hero image and text that stays readable rather than stretching across a 32-inch monitor.
  • One purchase, two platforms. macOS and iOS now share a single app identity, so universal purchase works.
  • The Android back button behaves as expected.
  • A faster in-app browser with fewer compatibility issues. macOS moved to WebKit for Apple silicon.
  • A consolidated desktop toolbar combining search, refresh, density, and the overflow menu into one strip, hiding controls that do not apply to the current page.
  • Smoother playback when a large number of objects are highlighted at once.

The course library also opens in landscape again on tablets and desktop-class devices, which is the browsing layout iPad users asked us to restore. This is the app's own interface and is separate from a course's Landscape setting. Portrait mode, the footer menu, and the course grid received a range of smaller layout fixes.


Caffeine editor package: 1.1.22

For authors working in the Unity editor. This release focuses on working at scale — sub-graphs and search for Flow — a prefab workflow that no longer puts work at risk, new node families, and conversational AI in Flow.

New

  • Sub-graphs in Flow. Fold any part of a graph into a single tile and give it a name. Covered in its own section below.
  • Flow Search. A window that finds where anything is used across every scene Flow graph in a course: objects, components on objects, and graph variables. Clicking a result jumps straight to it. If you have ever searched forty graphs for the one place a variable gets set, this is for you.
  • Group with one keystroke. Ctrl+G wraps the selected nodes in a group; Ctrl+Shift+G wraps them in a sub-graph.
  • Cut and paste nodes. Ctrl+X now works in graphs, and it is careful: the originals stay in place until the paste lands, so an abandoned cut never loses anything.
  • Go To Step node. Navigate course steps from a graph, with camera handling included.
  • Caffeine+ custom scripting. Build your own node templates and reference custom assembly definitions that survive package updates. Full node documentation now ships with the package.
  • New node families. A complete set of component nodes with typed extraction, plus Get Collider Property, Set Collider Property, and Is Collider Type for physics-driven logic. Seventeen new nodes ship in this package; the full list is in the appendix.
  • AR authoring. Per-step occlusion, AR mode state management with dedicated Flow nodes, and in-editor preview with a performance overlay.
  • Material optimizer upgrades. Channel packer coverage for every supported shader, glTF/GLB support, and a texture extractor.
  • Baked lighting toggle for legacy or modern lightmap handling, set per course.
  • Pause and Unpause experience events.
  • AI Bot Conversation nodes. Covered in its own section below.

Sub-graphs in Flow

A graph that has grown to hundreds of nodes stops being readable as a picture. Sub-graphs give it back its shape: select the nodes that belong together, press Ctrl+Shift+G, and they become one compact tile. Double-click the tile to step inside, the contents get their own canvas, with a breadcrumb trail across the top showing where you are. Sub-graphs nest as deep as you need, so the top level of a large course can read as a handful of named tiles rather than a wall of wires.

Pins you choose, with names you choose. Wherever a wire crosses into or out of a sub-graph, the tile shows a pin for it. Right-click any port to show it on the tile or rename it, or open Manage Pins... on the tile to work through every pin in one window. A well-named tile reads as a node in its own right: Door logic with Open and Locked pins, instead of the forty nodes behind them.

Membership is always deliberate. Moving nodes around the canvas never silently changes what belongs to a sub-graph. You add nodes by dropping them onto the tile, send them up a level with Ctrl+Shift+X, or carry them anywhere — including across levels — with cut and paste. Your existing groups keep working exactly as they always have; convert one with Convert To Sub-Graph when you are ready, and if you change your mind, Dissolve Sub-Graph unwraps the tile and lands its contents intact beside it. Deleting a tile removes it and its contents together, and a single undo brings everything back.

Nothing changes about the published course. Sub-graphs are how a graph is presented in the editor, not how it runs — courses publish exactly as before and play on the apps learners already have. Flow Search sees through them too: clicking a result that lives inside a sub-graph steps in and lands on it.

Getting around a big graph got easier alongside, sub-graphs or not:

  • Go To Connection. Right-click a port and jump straight to the other end of any wire.
  • Hold For Distant Connect. Wiring two ports on opposite sides of a course no longer means dragging a noodle across it. Hold a port, navigate anywhere — any zoom level, even inside a sub-graph — and complete the connection from the destination port's menu.
  • Long-wire portals. A wire spanning half the canvas says nothing along the way, so wires beyond a configurable length now draw as a small labeled portal at each end instead. Point at either end and the full wire returns. Well-laid-out graphs are untouched.

AI Bot Conversation nodes

Two nodes under Flow → AI. AI Bot Conversation runs a single conversation turn: text goes in, the completion service answers, and the reply returns into the graph. AI Bot Conversation Reset clears the conversation memory of the bot.

Each node carries its own persona, so a scenario can hold three characters across three nodes. Grounding to course content is optional. Leave it on for an assistant that should only answer from the material, and turn it off when a character needs to be someone rather than know something.

Chained with the voice nodes, the result is a character that talks back: the learner speaks, Voice Dictation converts it to text, the bot answers, and TTS reads the reply aloud. The setup is self-contained, with no AudioSource wiring or microphone permissions to configure.

A longer write-up with worked examples is coming separately.

Improved

  • Large courses are much faster to work in. Moving between steps on a course with thousands of GameObjects is immediate again.
  • Publishing and importing received the same transfer overhaul as the apps, and are now faster and reliable on slow or cellular connections.
  • The Flow window stays docked through play-mode and prefab operations.
  • Better build feedback. Failures report what actually broke, and transient failures retry automatically.
  • Render pipeline switching is correct and complete, including quality-level cleanup.

Fixed

  • Prefab safety. All reported prefab issues affecting Flow graphs are resolved. For projects already affected by a corrupted graph, the supervised Fix Polluted Prefab References tool repairs it, and the Course Validator flags any prefab still carrying bad references.
  • Physics Raycast nodes report the collider actually hit rather than the rigidbody root. This previously caused false negatives, for example when checking tags.
  • Course logic runs correctly on runtime-spawned objects.
  • The Asset Transformer plugin no longer corrupts Flow graph prefabs on import.
  • Published bundles can no longer bake an AI bot with an already-initialized state.

Validator additions

The Course Validator now flags text components with missing font or material references, empty materials, and prefab assets with polluted graph references. The last of these includes a one-click fix.


Appendix: New Flow nodes

Everything added since December, 31 nodes in total. Paths appear exactly as they do in the node-creation menu.

New in 1.1.22

AI — run a conversation turn from inside a graph.

NodeMenu path
AI Bot ConversationFlow → AI → AI Bot Conversation
AI Bot Conversation ResetFlow → AI → AI Bot Conversation Reset

Components — build and work with sets of components on an object.

NodeMenu path
Get ComponentsFlow → Actions → Component → Get Components
Get Component ItemFlow → Actions → Component → Get Component Item
Add Component ItemFlow → Actions → Component → Add Component Item
Count Component ItemsFlow → Actions → Component → Count Component Items
Remove Component ItemFlow → Actions → Component → Remove Component Item
Remove Component Item (Index)Flow → Actions → Component → Remove Component Item (Index)
For Each ComponentFlow → Logic → For Each Component
Component ListFlow → Variables → Component List

Colliders — read and drive collider state for physics-driven logic.

NodeMenu path
Get Collider PropertyFlow → Actions → Collider → Get Collider Property
Set Collider PropertyFlow → Actions → Collider → Set Collider Property
Is Collider TypeFlow → Actions → Collider → Is Collider Type

Augmented reality — turn AR on and off from inside a course.

NodeMenu path
Enable ARFlow → Actions → AR → Enable AR
Disable ARFlow → Actions → AR → Disable AR
Is AR OnFlow → Actions → AR → Is AR On

Course navigation

NodeMenu path
Go To StepFlow → Actions → Go To Step

Added earlier in this cycle

Already shipped in the 1.1.12 through 1.1.21 packages. Listed here because they are new to anyone coming straight from December.

NodeMenu pathAdded
String LengthFlow → Actions → String LengthJanuary 2026
Current Time (Clock)Flow → System → Time → Current Time (Clock)January 2026
Mobile JoystickFlow → Input → Mobile JoystickMarch 2026
Mobile Joystick ButtonFlow → Input → Mobile Joystick ButtonMarch 2026
Mobile Joystick ActiveFlow → Input → Mobile Joystick ActiveMarch 2026
Start InteractionFlow → Actions → Interactables → Start InteractionMarch 2026
End InteractionFlow → Actions → Interactables → End InteractionMarch 2026
Is InteractableFlow → Actions → Interactables → Is InteractableMarch 2026
Set Laser ActiveFlow → Actions → XR → Set Laser ActiveApril 2026
Pause ExperienceFlow → Actions → System → Pause ExperienceMay 2026
Unpause ExperienceFlow → Actions → System → Unpause ExperienceMay 2026
Is Experience PausedFlow → Conditions → Is Experience PausedMay 2026
OnApplicationFocusFlow → Events → OnApplicationFocusMay 2026
OnApplicationLostFocusFlow → Events → OnApplicationLostFocusMay 2026

Appendix: Caffeine releases since December

If you update the package regularly, you already have these. Coming from 1.1.11 or earlier, you get all of them at once.

VersionDateTheme
1.1.22July 2026Flow sub-graphs, AI Bot Conversation nodes, Flow Search, prefab safety, new node families
1.1.21May 2026Flow Editor refresh: group colors, one-click hide/rename, LOD rendering for large graphs
1.1.20April 2026Reliable publishing on slow and cellular connections
1.1.19April 2026Course Validator, faster uploads, improved create-from-template
1.1.18April 2026Import progress window, network auto-pause/resume, download integrity checks
1.1.17March 2026Rebuilt transfer system, glTFast support
1.1.16March 2026Cloud backup export improvements
1.1.15March 2026Publish metadata: "Uploaded By" and "Updated On"
1.1.14March 2026Asset cache, editor migrations, publish notes
1.1.12–13January 2026Update banner, graph variable reordering fixes

Notes

  • Upgrading. App data and installed courses carry over from 1.4.1, with nothing to re-download. The first launch refreshes thumbnails in the background.
  • Multiplayer still runs on the existing networking backend in 1.5.0. The next-generation stack is in testing and ships in a later release.