Xojo 2026r2 Release Notes

Release Date: 2026-07-07

Highlights

  • New DesktopScrollableArea control

  • DesktopToolbar now supports different toolbar styles and symbol-based button icons

  • Jade now works with OpenAI, OpenRouter, and local LLMs; when used with Anthropic Claude or OpenAI, it can request project context including source code and compile errors

  • New AI panel in Settings

  • Improved copy-and-paste support for code items (properties, methods, etc.) into and out of Xojo

  • Added WebGraphics.DrawPath and FillPath methods and WebTextField/Area.Format property

  • Web applications can now respond to SEO requests

  • DatabaseConnections in web projects can now be instantiated per session

  • Improved macOS console app code signing

  • Improved macOS app debugging, with support for Sandboxing, Hardened Runtime, Entitlements, and applied Provisioning Profiles

  • DesktopHTMLViewer now uses WebView2 when building for WinUI

  • iOS: New MobileMenuItem and MobilePopupMenu

  • Android: XMLDocument, MobileMenuItem support; MobilePopupMenu, MobileSwitch now use modern Material styling

  • New Code Editor page guide

Statistics

  • Bugs fixed: 76

  • Features added: 53

  • Documentation changes: 5

  • Examples changed: 1

IDE

New Features

  • Jade can now be used with local LLMs, OpenAI and OpenRouter. (81262)

  • Code Editor now has a Page Guide that you can specify in settings. (73066)

  • Improved copy/paste of project items as text. You can now paste in multiple code items (constants, methods, properties, etc.) into a single project item. You can now copy classes and modules as text to the clipboard. You can now paste classes and modules from text into the project. (79703)

  • Improved compiler error reporting for rendered layout issues. Errors now include a snippet of the generated layout content to help identify the source of the problem, even when the original lines are not directly accessible. (81353)

  • Added a new AI Settings panel, which contains AI-related settings including the ability to turn off AI features. (80218)

  • Jade can now request project item source and compile errors as needed. (80064)

  • Added preference to customize the debugger watch source line highlight color. (81222)

  • DesktopContainer properties are now available to be added to the Inspector via the inspector behaviors dialog. (80872)

  • iOS: Added Device Hub support so iOS apps can be debugged when Xcode 27+ is installed. (81480)

  • iOS: Added Quick Edit Button to MobilePopupMenu on iOS, so the Initial Value entries can be populated directly in the Layout Editor. (81443)

  • macOS: The Quit menu item displays the expected icon under macOS Tahoe. (81192)

  • macOS: Now it is possible both to debug and build macOS apps wit Hardening enabled even if they are Ad-Hoc signed. (81170)

  • macOS: Now the IDE creates a .pkg file when building for macOS and App Store is selected as the signing option, so it can be used with Transporter. (81028)

  • macOS: Added signing of macOS Console apps beyond Ad-Hoc, so Entitlements can be attached and these apps can be also Notarized and attached to Apple's Instruments app. Also, changed the compressed file sent to Notarization service from Zip to DMG image. (81072)

  • macOS: Added signing of macOS Console apps beyond Ad-Hoc, so Entitlements can be attached and these apps can be also Notarized and attached to Apple's Instruments app. Also, changed the compressed file sent to Notarization service from Zip to DMG image. (81073)

  • Web: Added a new DatabaseConnection property for Web projects, for having separate connections per WebSession. (81429)

Resolved Issues

  • Jade Copy/Insert buttons on code blocks now work on Windows. (81530)

  • Custom property values on DesktopWindow subclasses now load correctly in text-based projects. (81524)

  • Fixed an issue where modifying Extension method definitions to add ByRef or ByVal modifiers prevented the methods from appearing correctly in autocomplete. (67601)

  • Fixed an IDE crash when a DirtyAllProjectItems command (via script) was executed. (81470)

  • Fixed a System.DebugLog race condition when running multiple preemptive threads under the debugger. (81471)

  • Constant values containing invalid escape sequences no longer prevent a project or snippet from loading. When an invalid escape sequence is encountered, the IDE now displays the affected line and prompts you to either continue loading the project/snippet or cancel the operation. (81457)

  • Jade now better handles prompts that contain a backslash. (81059)

  • Subclassed WebPages and WebControls, that expose Database properties in the Inspector, no longer cause a compilation error. (81302)

  • Fixed an issue where the method parameter editor would incorrectly treat ByRef parameters as ByVal. (70008)

  • Jade code result syntax highlighting is working again. (81299)

  • Jade can now return much longer code blocks. (81194)

  • Jade does a better job of displaying tables in its replies. (81060)

  • Fixed several drawing issues in the Navigator and Libraries list when using the LibraryIcon and NavigatorIcon constants. (81092)

  • Autocompleting toolbar items now works correctly and no longer omits items. (81123)

  • Autocomplete now displays the correct signature and method icon for the Binary Enumerations Contains method. (70403)

  • Android: Layout Editor Navigation area and Switch control colors now better match runtime when a custom color is selected. (80885)

  • Android: Updated Layout Editor drawing of MobileSlider to better match its new Material styling. (81218)

  • Android: Hide IsEventImplemented from Android projects since it is not yet... implemented. (80874)

  • iOS: iOS and Android controls now work with the Navigator Filter. (81392)

  • Linux: Web project: A layout heavy with controls no longer causes a crash in the IDE when dragging controls around. (81224)

  • macOS: Selecting and dragging large amounts of text in the code editor no longer causes the IDE to become unresponsive. (81319)

  • macOS: Fixed adding empty entitlements on macOS builds. In addition, now the get-task-allow entitlement is also added for macOS apps running from the IDE when Notarization is enabled. (81089)

  • Web: DateFormat property won't be forced to appear under the Behavior group anymore, in web projects. (81515)

  • Web: Fixed an issue where the inspector may not show a property from a parent WebContainer class. (81490)

  • Web: Fixed a WebSegmentedButton issue that could crash the IDE when dropping some subclassed instances into the views. (81491)

  • Web: Graphics.DrawOval no longer draws an unintended line based on the previous path state. This fixes an issue in the Linux IDE for Web projects when rendering RadioGroups in the layout editor. (81078)

Framework

New Features

  • ShadowBrush is now available on PDFGraphics. (64490)

  • AffectedRowCount is now supported in the SQLiteDatabase, PostgreSQLDatabase, and ODBCDatabase classes. For ODBCDatabase, if the driver does not provide the affected row count, the method will return -1. (14298)

  • Android: Added TintColor As ColorGroup to MobilePopupMenu to match iOS. (81447)

  • Android: MobileSwitch now uses modern Material Switch. Added ThumbColor & TintColor to match iOS. (75465)

  • Android: Added MobilePopupMenu.AddRow/At() methods that take a MobileMenuItem to match iOS. SelectionChanged also now has a MobileMenuItem parameter. (81423)

  • Android: Added TextColor As ColorGroup and TextFont As Font to MobilePopupMenu to match iOS. (81422)

  • Android: Added MobileMenuItem class, along with these MobileButton changes: Menu As MobileMenuItem, DisplayMenuAsAction As Boolean properties and MenuItemSelected event handler. (81334)

  • Android: Updated to Kotlin 2.3.21 and updated various Android library dependencies. (81361)

  • Android: Updated to Material library 1.14.0. (81345)

  • Android: Added SQLiteDatabase.AffectedRowCount() As UInt64 to match other targets. (81112)

  • Android: Added MobileProgressBar.Indeterminate property. (81290)

  • Android: Updated MobileProgressBar to use Material theme and added TintColor property. (80790)

  • Android: Added TintColor to MobileTextArea/-Field to match iOS. (80941)

  • Android: MobilePopupMenu now uses modern Material style. (81033)

  • Android: Added AdjustTextSizeToFit property to MobileButton, MobileDateTimePicker & MobileLabel to match iOS. (81043)

  • Android: Added XMLDocument, XMLReader and related classes.Issue #79763 (79763)

  • Desktop: Added DesktopScrollableArea control. (81021)

  • Desktop: DesktopToolbar now supports different toolbar styles and symbol-based button icons, allowing you to specify a semicolon-separated list of symbol names. Also added a new AllowMulticolorSymbol option for macOS to enable color symbols. (81205)

  • iOS: Added SelectionLimit property to MobileImagePicker on iOS, so now it is possible to set the number of selected images when the source is set to Photos. (81467)

  • iOS: Added MobilePopupMenu control to iOS projects. (81363)

  • iOS: Added MobileMenuItem class to iOS, and the ability to add a MobileMenuItem instance to MobileButton and MobileToolbarButton instances on iOS. Such menus can be displayed on single tap or a long press over the MobileButton/MobileToolbarButton instances. (81332)

  • iOS: Now it is possible to add Badges to the buttons added to a NavigationToolBar on iOS projects, setting the text, text font, text color and background color. These Badges are only applied under iOS 26+. (81311)

  • iOS: Added MinimizeTabBar property to MobileScreen on iOS. This property only has effect when the app is ran on iOS 26+. (81301)

  • iOS: Implemented Scene based lifecycle for iOS apps. (79430)

  • Linux: PrinterSetup.Landscape is now supported on Linux. (81398)

  • macOS: Added Orientation option to the Printer Dialog shown by DesktopHTMLViewer.Print on macOS. (81425)

  • macOS: Added the ability to create, retrieve, modify and delete Keychain generic passwords synced with iCloud on macOS. (81024)

  • Web: Added a way to call WebPage.Show from the WebApplication.HandleURL event without automatically creating temporary sessions. This allows for improved SEO support and makes it possible to show a different page on different URL paths, like /foo, /bar and /baz. (81479)

  • Web: Added support for the Format property in WebTextField and WebTextArea, for consistency with the other targets. (81307)

  • Web: Added the missing WebToolbar.Count method for consistency with DesktopToolbar. (81309)

  • Web: Added WebListBox.ColumnAlignmentAt for consistency with DesktopListBox. (81308)

  • Web: Added support for WebGraphics.DrawPath and WebGraphics.FillPath. (81310)

  • Web: Added WebSeparator control, similar to DesktopSeparator. (61558)

  • Web: Changing the WebImageViewer.Image property will do a better job now replacing the image without flickering. (81295)

  • Web: Improved the Web framework performance to handle more requests per second. (81211)

  • Windows: WinUI: Added support for DesktopToolbar. (81178)

  • Windows: DesktopHTMLViewer now uses WebView2 when targeting WinUI. For non-WinUI Windows targets, WebView2 can be selected as the HTMLViewer backend through the Windows Advanced Build Settings. (59961)

Resolved Issues

  • MySQLCommunityServer.Connect is now safe to call from preemptive threads. (81514)

  • Fixed an issue where MemoryBlock compression level enumerations were incorrectly mapped, causing Normal compression to behave as uncompressed data while No compression produced results similar to Normal compression. (81449)

  • Fixed an issue where Thread.Sleep could sleep indefinitely due to time calculations crossing an artificially enforced 32-bit rollover boundary. (81417)

  • MySQLCommunityServer: running ExecuteSQL/SelectSQL concurrently on separate MySQL connections no longer introduces a race condition when running on preemptive threads. (81390)

  • The Dictionary.Iterator method is no longer hidden and is now accessible to plugins. (81333)

  • The DatabaseColumn.Type is now updated properly when the Value is set if there is no RowSet assigned. (81154)

  • Fixed setting Width and Height values at runtime in the DesktopGrid control. (81088)

  • Thread.SleepCurrent now throws an UnsupportedOperationException when called from within a preemptive thread. (80611)

  • Fixed a potential crash when closing windows containing Containers. Also resolved a memory leak that occurred when closing Containers on a window. (58514)

  • Android: Fixed a compile error that could occur when comparing a number to a variant. (79985)

  • Android: Fixed an issue with LittleEndian when used MemoryBlock.LeftB. (80859)

  • iOS: Fixed a bug on MobileImagePicker (iOS) that was crashing the app when the selected image has no Exif info on it. (81434)

  • iOS: Fixed a bug on MobileImagePicker so it doesn't crash when the Source is set to any of the available cameras after Photo being used as the source. (81433)

  • iOS: Now MobileSwitch for iOS renders its associated contraint properly under iOS 26+. (81360)

  • iOS: Now when the Pressed event isn't implemented in MobileImageViewer on iOS, the click is sent up through the hierarchy. (81279)

  • Linux: Fixed a clipping issue for certain controls when they are embedded within a DesktopContainer. (81267)

  • Linux: DrawInto on a non-transparent Canvas Graphics no longer draws with incorrect x/y offsets. (81177)

  • macOS: Fixed a NOE exception on macOS when a Container containing a Timer is closed. (81461)

  • macOS: Fixed displaying the ToolTip value set in the Inspector Panel or at runtime for DesktopSegmentedControl on macOS Tahoe+. (81466)

  • macOS: Fixed a bug crashing the macOS app when KeyChain.AddPassword was used. (81446)

  • macOS: Fixed an issue where the ComboBox height was too small when UI Compatibility mode was enabled. (81330)

  • macOS: Fixed the use of chained Child methods over a valid FolderItem on macOS; so its behavior adheres what is described in the documentation and also matches the current behavior of Windows and Linux. Now, if some of the intermediate Child calls for the path chain doesn't exist, it returns Nil. (81294)

  • macOS: Fixed incorrect position offset when writting to a BinaryStream after a Read operation. (81210)

  • macOS: Now FolderItem.Constructor(Path) throws UnsupportedFormatException on macOS if the provided path is not reachable (that is, part of the path components doesn't exist). (79365)

  • macOS: A subclassed SearchField control no longer fires the TextChanged event before the Opening event. (81200)

  • macOS: Selected rows in hierarchical listboxes now correctly render the disclosure widget in white in light mode on macOS Tahoe. (81175)

  • Web: Fixed a WebListBox issue causing SelectionChanged to not be fired after setting the SelectedRowIndex property, sometimes. (81484)

  • Web: Fixed a WebListBox issue when sorting a column with selected checkboxes. (81367)

  • Web: Fixed a WebPagePanel / WebTabPanel issue causing the control to overfire the PanelChanged event. (81394)

  • Web: Fixed a WebListBox issue causing the list to return a wrong order when sorting cells containing WebListBoxStyleRenderer. (81403)

  • Web: Fixed a WebListBox selection issue when using AllowRowReordering with RowSelectionType set to Multiple. (81391)

  • Web: WebDatePicker won't fire DateChanged event twice anymore when the previous and new value is Nil. (81358)

  • Web: Fixed a WebBreadcrumb rendering issue when setting the Enabled property to False. (81344)

  • Web: Fixed a WebMapLocation bug causing DistanceTo method to return invalid results, most of the time. (81326)

  • Windows: Dark mode controls with labels no longer leave visual artifacts, and depending on scale factor these artifacts were much more noticeable. (81477)

  • Windows: Updated various non-standard mouse cursors (such as HandOpen and HandClosed) for HiDPI. (81414)

  • Windows: WinUI: IsContextualClick now correctly returns True when a right mouse button click triggers a MouseDown event. (81329)

  • Windows: WinUI: DesktopTabPanel and DesktopGroupBox now correctly strip ampersands from captions and assigns the corresponding accelerator key. (81304)

  • Windows: Enabling the DesktopContainer.Composited property now works again, so composited drawing can be used to reduce flicker. Note that compositing is not compatible with all controls—most notably DesktopHTMLViewer, where it may prevent rendering altogether. (81296)

  • Windows: Maximizing a window no longer leaves stray layout artifacts. (81266)

  • Windows: WinUI: Controls now fire MouseWheel events. This is also supported for DesktopXAMLContainers via EventTriggered with the eventName set to PointerWheelChanged. (81250)

  • Windows: WinUI: Password TextFields now correctly apply custom background and text colors. Also now correctly applies custom text colors for TextArea controls. (81234)

  • Windows: Graphics.ShadowBrush combined with Graphics.Scale no longer results into blurry rendering. (81212)

  • Windows: A read-only TextField/TextArea no longer applies themed background colors that reduced text readability when using a high contrast theme. (81204)

  • Windows: WinUI: TextArea/TextField contextual menu now responds correctly to theme changes. (81102)

Compiler

Resolved Issues

  • Android: Fixed an Android compile error that could occur when there is a Library in the Plugins folder. (81556)

  • Android: Fixed a compile error that would occur when using object as a method parameter name. (81153)

  • Android: Fixed NilObjectExceptions that could occur when subclassing constructors in certain situations. (81151)

  • Android: A user-added, no-parameter constructor on a control subclass is now called when the control is initialized on the layout. (81152)

  • Android: Fixed a compiler error processing optional parameters to overridden methods that call the parent with Super. (81148)

Documentation

New Features

  • Updated the SSH tunnel Windows instructions to link directly to the Xojo Blog post Setting up puTTY to create a SSH tunnel from Windows to Xojo Cloud instead of suggesting a generic web search. (81496)

Resolved Issues

  • Added Notes subsection to String documenting Unicode homoglyphs — visually identical characters with different codepoints that do not compare as equal with the = operator — with a code example and a note about security implications. (76594)

  • The information on preemptive threads has been updated to explain that the type can be changed at any time as long as the thread isn't running. When it is, only from within the thread itself. (77558)

  • Added documentation for the drag-and-drop feature in the File Type Group editor, which automatically fills in file type properties when a file is dragged onto the editor from Finder or File Explorer. (77881)

  • Web: Added WebDatePicker.AllowKeyboardEntry as a Boolean property, which controls whether users can type dates directly into the field or must use the calendar picker. (76494)

Examples

New Features

  • Added DesktopScrollableArea example to project examples. (81554)