Xojo 2026r3 Release Notes
Release Date: 2026-10-20
Highlights
AI Support - New Agentic Mode allows an AI agent to modify and run the project then get compilation errors if any
Better version control support - Reload the entire project, individual project items, or items that have changed on disk
Improved IDE copy and paste to and from text; Jade now better handles special characters on Windows and longer-running requests
New DesktopTable control - API-compatible with DesktopListBox with support for lazy loading and much more
DesktopMenuItem now supports symbols, Picture.SystemImage on all targets
WebListBox.AddRow performance improvements, WebCanvas.DrawControlInLayoutEditor, WebRectangle.Pressed
iOS now supports PopupMenu separators, symbols in several places, dynamic type
New iOS controls: MobileSearchField, MobilePrinterPicker, MobileDocumentPicker, MobileDocumentViewer
Android now supports ToolbarButton badges, PopupMenu separators, Picture.Mask support, dynamic type
New Android control: MobileDocumentPicker
DBKit v2: Adds support for DatabaseConnection, displaying related tables, lazy loading, and much more.
Statistics
Bugs fixed: 136
Features added: 48
Documentation changes: 12
Examples changed: 1
IDE
New Features
Added Agentic Mode to allow Xojo to work better with coding agents. (81930)
We now also look for an Overrides folder next to the Xojo app, or directly inside the Contents folder of the Xojo app bundle on macOS, as an additional location for overriding default values for classes and controls. Also fixed a bug that prevented the correct default value from being picked up on Windows and Linux. (82004)
Added support for assigning symbols to menu items directly in the IDE's menu editor. Symbols are also rendered in the editor, making it easier to preview and configure menus without manually setting DesktopMenuItem.Symbol in code. (81937)
Added an option to disable auto-scrolling of debug messages in the Messages Pane. (81050)
Revert to Saved is now Reload Project and does not require the project to have been modified. Also added Reload Project Item Name that reloads just the selected project item. Added IDE Scripting commands for these two features: ReloadProject() and ReloadProjectItem(itemPath As String) As Boolean. (81260)
Dragging a project item into the Code Editor inserts its name at the text cursor location. (64541)
Web: WebCheckBox and WebSwitch have a default Height value of 38px now, they can still be resized to 34px if needed. WebSlider and WebProgressBar are resizable now, making easier to align controls vertically. (81960)
Web: Tab Index will be editable now on Web controls, directly from the Inspector Panel. (81859)
Web: Added support for the WebCanvas.DrawControlInLayoutEditor event. (81739)
Resolved Issues
Fixed an issue where Navigator and Library icons were not displayed correctly for custom control subclasses added to a module. (80856)
Fixed macOS Console Universal Build process overwritting the executable with the file of a CopyFile build step. (81927)
Dictionary contents are now lazy-loaded in batches of 50 when viewed in the debugger. (8517)
Connecting to a Database Connection item with an invalid path no longer crashes the IDE with an exception. Also, the selected Database Connection item is now correctly saved when selected in the inspector for custom Database properties. (81872)
IDE no longer throws an error when adding events for multiple selected controls. (81868)
Jade now has a longer timeout to allow long-running prompts to return results. (81589)
Improved Jade error message output and fixed an exception that could occur with an improperly specified Local Base URL when using a local LLM. (81805)
Contextual clicks on the empty area of a debugger's Content entry no longer crashes with a NilObjectException. (81814)
Fixed an IDE crash on macOS that happens when the Settings window is closed once the ColorPicker has been opened after selecting any of the Coding > Syntax Color color swatches. (81602)
Fixed the casing for #EndIf in the refactoring Wrap In menu. (80444)
Fixed a bug in CopyFiles build step when Resources is the choosed option as Destination for macOS Console apps. (81526)
Android: ColorGroups can now be dragged and reorder in the Navigator for Android projects as well. (79934)
Desktop: The AI button on the Windows/Linux settings window now better matches the style of other icons and looks better in dark mode. (82069)
iOS: Fixed adding the Edit option to the contextual menu on AutoLayout inspector panel for those controls that are locked. (81558)
Linux: Removed libsoup 2.4-1 requirement for the x86_64 .deb package since we dynamically use whichever libsoup version (v2 or v3) is available. (81834)
Linux: When a new version of Xojo is available, the IDE now directs you to the download page, where you can choose the appropriate installer for your Linux distribution. (81608)
Linux: Opening projects containing unresolved external items saved with the macOS IDE no longer causes the Linux IDE to potentially crash while loading the project. (81567)
macOS: Fixed the IDE freezing when items are dragged from the Library or Navigator and the IDE is running under macOS 27.2; or there is some kind of drag & drop operation from macOS apps running under macOS 27.2. (82078)
macOS: Fixed setting (and displaying) the current AccentControlColor under macOS when a new ColorGroup project item is created in the IDE using the Named option. Also, now the color group do refresh the right color if it is changed under System > Settings > Appearance, both in the IDE and also at runtime. (81971)
macOS: IDE Script Editor recording toolbar icons on Mac now always use SF Symbols. Recorded statements now include parentheses for method calls. (81841)
macOS: Fixed the IDE getting stuck after displaying a signing error on Run Debug for macOS apps. (81806)
macOS: Fixed the IDE getting stuck when the opened project, in text format, has a Build Step with DoCommand(SaveFile), but the user license doesn't supports it (or just not signed-in). (81664)
macOS: Fixed drawing the text overlay in low resolution over the Library panel. (81573)
Mobile: Fixed the ScrollableArea icon not being drawn correctly in the Layout Editor for iOS and Android projects. (81889)
Web: Fixed an IDE issue causing the Super class browser to not automatically select its current value on some classes, like a WebPage. (81934)
Web: WebProgressBar.Caption can be previewed now on the IDE, and the control supports now styling the BackgroundColor and ForegroundColor through its WebStyle. (76515)
Web: Fixed a WebSDKUIControl and WebCanvas IDE preview issue when being drawn inside a WebContainer, the IDE wasn't calculating the control size properly. (78967)
Web: Moved WebComboBox from Pickers to Inputs, in the Library, for consistency with Desktop. (68931)
Web: Organizers library group will be shown after Decorations now in Web projects, like in Desktop projects. (81876)
Web: Fixed a WebTabPanel / WebPagePanel issue causing copying a control from one tab into another to result in the control being pasted into the original tab, instead of the selected one. (81836)
Web: Fixed an issue with Database Connections causing some property values to not be saved correctly on first time. (81773)
Web: Fixed an IDE preview issue with multi-line WebLabel that could be using a wrong font family and line height. (81698)
Windows: Windows IDE: no longer causes a Unknown Hard Error crash on quit. This also affected any projects that included the DesktopXAMLContainer or when Use WinUI is enabled. (80944)
Windows: Jade properly displays special characters more reliably on Windows. (81756)
Framework
New Features
Updated DesktopHTMLViewer.PrintToPDF to accept an optional DesktopHTMLViewerPrintSettings parameter for customizing the printable area and page orientation. (79237)
Android: Updated Android compiler toolchain to support Android 17. Android 10 is now the minimum supported version. (81501)
Android: Added MobileDocumentPicker class to the Android Framework to match iOS. (81896)
Android: Containers in MobileTabPanel can now be scrolled if they do not fit on the screen. (67251)
Android: Added dynamic type support. (81826)
Android: MobileSeparator now uses modern Material Divider. (77469)
Android: Added Icon support to MobileMenuItem entries added to a MobilePopupMenu control. (81703)
Android: Added MobilePopupMenu.AddSeparator method. (81839)
Android: Added BadgeColor, BadgeText and BadgeTextColor to MobileToolbarButton. (81313)
Android: Added Symbol property to MobileButton, MobileDateTimePicker, MobileMenuItem, MobileToolbarButton and MobileSegment. (81788)
Android: Added Picture.ApplyMask and Picture.CopyMask. (77503)
Desktop: Added new DesktopTable control. Refer to documentation for usage. (81464)
Desktop: DesktopMenuItem: Added a new Symbol As String property that accepts a semicolon-separated list of symbols. The list is searched in order, and the first available symbol is used. This is supported for macOS, Linux and WinUI targets. (81597)
Desktop: Added Cursors.SplitterEast and Cursors.SplitterWest (81489)
Desktop: DesktopPopupMenu: Added support for displaying DesktopMenuItem icons and symbols on macOS, Linux, and WinUI targets. (68926)
Every OS: Added Math module with constants for E, PI and Tau to match Visual Basic. (51023)
iOS: Added MobileDocumentViewer for iOS. (81923)
iOS: Now it is possible to close via code MobileContainer and MobileScreen instances displayed as Popover on iOS. (81911)
iOS: Added MobilePrinterPicker control to iOS. (81910)
iOS: Added MobileDocumentPicker class to iOS Framework. (81892)
iOS: Overloaded iOSMobileTable.CreateCell to support assigning a Symbol (instead of image) during the Cell instatation. (81878)
iOS: Added separators to MobileMenuItem and MobilePopupMenu on iOS. Also added the IntegratedPalette option to MobileMenuItem.DisplayModes enum. (81816)
iOS: Added Symbol As String and AllowMultiColorSymbol As Boolean properties to iOSMobileTableRowAction and MobileSegment. (81784)
iOS: Added Symbol As String and AllowMulticolorSymbol As Boolean properties to MobileButton on iOS. (81783)
iOS: Added more options to MobileScreen.ShowModal. Now it is possible to present resizable, medium or large Modal screens plus, optionally, add a grabber to the top of the displayed modal window. (81776)
iOS: Added AllowDoneButton property to MobileTextField and MobileTextArea on iOS (81669)
iOS: Added MobileSearchField control to iOS. (73529)
iOS: Added support for Symbol and AllowMulticolorSymbol properties for MobileToolbarButton and MobileMenuItem on iOS. (81715)
iOS: Added Icon support to MobileMenuItem entries added to a MobilePopupMenu control. (81702)
iOS: Added support for Dynamic Type on iOS projects for MobileLabel, MobileTextField, MobileTextArea and MobileButton controls. (81598)
iOS: Added MobileScreen.Show(makeCurrent As Boolean) method to iOS. (77595)
macOS: Picture.SystemImage is now supported on all Desktop targets. You can provide a symbol string containing multiple symbol names separated by semicolons, allowing each platform to use the first supported symbol. Refer to the platform-specific OS documentation for a complete list of supported symbol names. (60751)
Web: Added FileNameAt, RemoveFileAt, FileCount and LastFileIndex to WebFileUploader control. (77009)
Web: Large WebPopupMenu menu will now take as much space as possible, and it will be recalculated on scroll. (70442)
Web: Added support for the Caption property on WebDatePicker control, for consistency with other entry fields. (81860)
Web: Added support for the WebRectangle.Pressed event. (61830)
Web: Added WebApplication.AddURLRoute method to allow developers define URL patterns and relate them with specific WebPages.Issue #81577 (81577)
Windows: Updated MenuBars and Contextual Menus for WinUI. (81733)
Resolved Issues
Resizing large arrays no longer crashes. (81949)
ODBCDatabase: Cleared any existing errors before executing the next Select or Execute statement to prevent an unexpected DatabaseException. (81907)
Fixed AppearanceChanged not firing on macOS apps unde macOS 26+ when the user changes the Accent/Theme color. (81900)
Fixed a potential crash on quit when closing complex window layouts containing Container controls. (81728)
For consistency, DatabaseColumn.Type now throws an InvalidArgumentException when the column does not exist instead of returning -1. (81725)
Fixed a crash that could occur in XojoScript when overriding Operator_Convert methods in classes. (77235)
Android: MobileTextField is now Dark Mode aware. (81888)
Android: Fixed a compile error when calling MobileSharingPanel.ShareFile with a FolderItem array. (82026)
Android: Fixed a bug that could cause an exception when using URLConnection from within a thread. (81942)
Android: Creating a semaphore without specifying a resource count now defaults to 1 to match docs. Switching a semaphore from cooperative to preemptive (or vice-versa) no longer incorrectly raises an IllegalLockingException. (80992)
Android: Controls created and added at runtime no longer ignore their LockRight/LockBottom values. (72829)
Android: Added support for MobileMoviePlayer.PositionChanged event. (80490)
Android: Fixed a Compiler Error when using EncodeBase64 with MemoryBlock. DecodeBase64 now also works with MemoryBlock. (81875)
Android: Fixed a bug where screen resolution was not correctly applied when using RGBSurface. (76968)
Android: A MobileContainer in a MobileScrollableArea is no longer cut off below its last control and now instead uses its full height. (81870)
Desktop: DesktopToolbar: Assigning an Icon to a ToolItem in code no longer overrides the Symbol. (82072)
Desktop: DesktopListBox: For consistency with WebListBox, ColumnSortTypeAt now exclusively determines whether a column is sortable. ColumnSortDirectionAt only controls the sort direction and no longer affects whether sorting is enabled. (79977)
Desktop: DesktopSegmentedButton: FocusReceived and FocusLost events now fire. On Linux and Windows, segments now display the focus ring and can be navigated with the Left/Right arrow keys. Use Enter/Space to select the focused segment. (82038)
Every OS: Fixed an issue where SQLiteDatabase.Backup could throw errors or crash when closing the database after the backup completed. (64216)
iOS: Fixed a NOE that happened under iOS when MobileChart.Mode was set to Donut and the user tapped on an empty area of the Chart. (81972)
iOS: Now MobileTableCellData.BackgroundColor works as expected when the app is run under iOS 26*. (81897)
iOS: Fixed App.HandleURL not being fired for custom URL Schemes on iOS. (81874)
iOS: Fixed enabling/disabling MobilePopupMenu on iOS. (81812)
iOS: Fixed MobilePopupMenu.AddRowAt behavior to be equivalent what is found on Desktop and Web. (81794)
iOS: Fixed on iOS the value returned by LastAddedRowIndex after adding a new row using AddRowAt. (81793)
iOS: Now MobilePopupMenu.SelectedRowText gets the updated/expected value also when accessed from the SelectionChanged event on iOS. (81787)
iOS: Fixed iOSMobileTable not showing the search field on iOS 26+ when the same screen is displaying also a toolbar with items set to it. (81753)
Linux: PostgreSQLDatabase now loads and works properly on newer versions of glibc, including Ubuntu 25 and Ubuntu 26 distros. (82054)
Linux: Fixed an issue preventing non-resizable windows from being programmatically resized to dimensions smaller than their original default size. (81825)
Linux: Xojo built apps are no longer flagged on SELinux with execstack violations. (81873)
Linux: Updating the window's size in quick succession no longer causes wildly inaccurate sizing to take place on Wayland. (81821)
Linux: Linux: You can now adjust the printer/page settings in the PrinterSetup.ShowPrinterDialog instead of only in the PrinterSetup.ShowPageSetupDialog. (81778)
Linux: DesktopListBox: Custom header painting now correctly clips to its bounds. (81768)
Linux: Linux: Toolbar symbols now display correctly when the button type is set to ToggleButton. (81759)
Linux: Graphics.DrawCautionIcon, DrawNoteIcon, and DrawStopIcon now render correctly when drawing into Pictures on Linux. These icons also display with improved quality on HiDPI displays. (81722)
Linux: DesktopHTMLViewer.Print no longer prints duplicate pages when a print dialog is displayed. (81719)
Linux: Setting DesktopPopupMenu.SelectedRowIndex before the window is fully presented no longer causes DesktopHTMLViewer to reset its bounds. (81717)
Linux: System.Version now returns more accurate/consistent results on Linux, instead of failing to gather useful version information on some distros like CachyOS. (81509)
macOS: Fixed an issue where windows displayed using DesktopWindow.Show were not always correctly parented to the specified parent window. (81998)
macOS: Fixed getting the expected slider value on macOS when clicking close to the nearest tick. (81867)
macOS: Fixed KeyChain.AddPassword throwing a KeyChain exception although the password was, in fact, added to the macOS Keychain. (81846)
macOS: BinaryStream: Fixed a regression that could cause slowdowns when writing many small items in a row to a file on macOS. (81760)
macOS: FolderItem.Unzip no longer fails on macOS when extracting ZIP archives that do not specify a filename encoding. In those cases, we fall back to legacy ZIP behavior and use the encoding most likely to succeed. (81547)
Web: Fixed an internal NilObjectException happening in a method called ThreadFinished. (82060)
Web: Fixed a WebListBox issue causing latest version of Microsoft Edge to throw an error just before firing CellAction event. (82049)
Web: Fixed a WebTextField issue causing the new value to not reach the server when it was filled automatically by the browser. (82013)
Web: Fixed a WebListBox issue causing calling RemoveRowAt to modify the current user selection, when not using a DataSource. (82035)
Web: Fixed several control positioning issues, and also issues causing controls to report their wrong dimensions at runtime. (81732)
Web: Fixed a WebApplication issue causing MinSockets command line parameter to be ignored. (82011)
Web: Fixed an IDE issue causing custom WebListBoxCellRenderer items inside a Library to not be shown at runtime. (82005)
Web: WebBarcode.ScanComplete event won't be fired anymore after calling StopScan. (82003)
Web: Fixed a WebListBox.ReloadFromDataSource issue that could lead to intermittent inconsistent data between server and browser. (82002)
Web: Fixed a few WebTextField / WebTextControl flickering issues and ignoring the Format property under certain circumstances. (81922)
Web: Fixed some issues when subclassing a WebView and trying to display it. (81919)
Web: Fixed an issue causing Web SDK controls to disappear when holding the CMD key on macOS, or Windows key on other Windows / Linux. (81899)
Web: WebDialog content will be clipped now, instead of allowing it to overflow. (81894)
Web: Fixed a WebContainer issue causing its contents to not be clipped, when the instance size was smaller. (81893)
Web: Calling WebPopupMenu.RemoveRowAt using the same selected row index will try to display the next available item now, for consistency with DesktopPopupMenu. (81792)
Web: When the end user clicks on a control using the secondary button, the Pressed event won't be fired anymore if a contextual menu will be shown. (81835)
Web: Optimized web controls to avoid sending unnecessary updates to the browser, when possible. (81791)
Web: Fixed a Web project type issue causing the browser to stop sending further events to the server on some situations, when using Send Events in Batches option. (81780)
Web: Fixed a WebMapViewer flickering issue when using a custom StyleURL. The control could display briefly the default raster tiles instead of using the custom style. (81748)
Web: For consistency with other project types, WebApplication will Quit now, unless returning True from the application UnhandledException event. (81642)
Web: Fixed a WebListBox issue causing editing cells to show the field ignoring its cell alignment. (81730)
Web: Fixed an issue causing WebUIControl.Shown event to not be fired sometimes. (81738)
Web: Fixed an issue causing WebMapViewer to maintain a map reference, not freeing its WebGL context, causing troubles when recreating it several times. (81736)
Web: Fixed a refresh issue causing controls inside a control set to sometimes disappear, when doing a refresh. (81625)
Web: Fixed a WebToolbar issue causing the menu to be displayed behind other controls on smaller devices. (81694)
Web: Fixed an issue causing some implemented events in the server to not be configured in the browser side of the framework. (81607)
Web: Ensure the WebContainer.Shown event is fired when being shown inside a Popover. (81622)
Web: Fixed a WebMapViewer issue causing DrawRoute method to don't do anything, unless called from the Opening event. (81563)
Web: Fixed a WebSearchField issue when setting a value programmatically using special characters. (81560)
Web: Improved WebListBox.AddRow performance when the WebListBox isn't sorted. (81320)
Web: Fixed an issue causing controls without some locks to be placed differently at runtime. (64423)
Web: Fixed an issue causing nested WebContainer controls to report wrong size at runtime. (73555)
Web: Fixed an issue placing or moving controls around when only using RightLock and/or BottomLock. (80557)
Web: Fixed an issue causing moving controls around, inside a WebView, to be placed in a wrong place. (80709)
Web: WebTimer.CallLater won't raise an internal uncatchable exception anymore when the callback is gone. (81779)
Windows: The new Windows time zone names introduced following the time zone changes in British Columbia, Alberta, and Manitoba now map to their corresponding ICU names and abbreviations instead of returning Etc/Unknown. (82092)
Windows: WinUI: Fixed an issue where setting the SelectedDate on the DateTimePicker could result in the wrong date in some timezones. (81982)
Windows: WinUI: Focus events now fire more reliably when moving from a WinUI control to a non-WinUI control, such as a Canvas, and vice versa. (81952)
Windows: WinUI: TextFields without a border no longer render text with incorrect padding around it. (81964)
Windows: The WebView2-based DesktopHTMLViewer no longer throws an uncatchable exception when the app terminates, which could cause the IDE's debugger to wait indefinitely while debugging the app. (81951)
Windows: Picture.Open/Save now correctly opens/saves files with Unicode paths in console and web applications on Windows. (60690)
Windows: Opening a folder using FolderItem.Open/Launch no longer launches a same-named executable located alongside the folder. (81869)
Windows: Focused controls can now handle the ESC key in their KeyDown events before the default button is triggered on Windows, aligning the behavior with macOS and Linux. (81795)
Windows: Windows/Linux: Double.ToString no longer automatically adds fractional digit placeholders when a currency symbol is present unless they are explicitly specified in the format string, matching the behavior on macOS. (68071)
Windows: Fixed the SearchField focus underline so that it no longer extends beyond the control's width. (67064)
Windows: Console: Improved Unicode support for the Print function, so that non-ASCII characters are displayed correctly and preserved when output is redirected. (49492)
Windows: Changing the font of a PopupMenu/ComboBox in dark mode now automatically updates the control's height, matching the behavior in light mode. (68441)
Windows: The dropdown list background for an empty ComboBox/PopupMenu now matches the control's background in dark mode, consistent with the appearance when the list contains items as well. (66632)
Windows: WinUI: Fixed an issue where the Toolbar overflow menu remained open after clicking outside of it. The menu now dismisses as expected when it loses focus. (81723)
Windows: UInt64.ToString now follows the format specification on Windows/Linux, matching macOS behavior. (81683)
Windows: WinUI: fixed a potential crash that could occur when setting the Focus to a TextField or TextArea too early during initialization, such as during Opening or immediately after control creation. (81548)
Compiler
New Features
Android: Significantly reduced size of built Android apps by enabling shrinking and obfuscation. Default optimization allows Xojo introspection to work. Moderate optimization disables introspection on the Xojo framework. Aggressive optimization disables introspection on the Xojo framework and the user project. This should allow Xojo apps to pass the Play Store DEX optimization requirements going into effect in Feb 2027. (82039)
Resolved Issues
Updated Delegate.Invoke to treat weak-referenced instance methods that have gone out of scope as no-ops rather than raising a NilObjectException. This avoids an unhelpful exception which gives the debugger no meaningful code location to display. (81785)
Android: Fixed an Android compile error that could occur when using the Array function with some expressions. (81950)
Android: Fixed a compile error that could occur when subclassing a MobileScreen layout. (81926)
Android: Fixed some compiler errors that could occur when using Global with framework classes and with arrays. (81855)
Android: Multidimensional array properties are now initialized to the specified size. (81849)
Android: Fixed a compile error that would occur when instantiating a control subclass from code. (81887)
Android: Fixed a compile error that could occur with Delegate calls when the last parameter is a nullable type. (81327)
Android: Fixed an Android compile error that could occur when using AddressOf/WeakAddressOf with a method on a separate class instance. (81781)
Documentation
Resolved Issues
Fixed bugs in various code samples on the Group2D page. (74590)
It's now clear that an array of no size is an empty array rather than a null array. (76268)
Clarified Barcode class documentation to explain that StartScan must be called to begin scanning, that scanning persists until StopScan is called or the user closes the dialog, and that the scanning UI does not block the main thread. (77388)
For...Each now makes it clear that you should not delete from the array during a For...Each loop. (77543)
It is now noted that the MaxUIps parameter of Double.Equals must be a literal. (77547)
DesktopListBox.ScrollPosition now has a code example. (77693)
Documented the previously-undocumented Start New Page At End Of Group report group property in the Report Layout Editor guide. (79073)
Updated JSONException documentation to reflect its two actual public constructors (with position and value parameters) instead of a single constructor with erroneous default values. (79499)
Documentation for the Double and Single data types (and the general Data Types overview) now notes that floating-point literals can be written in scientific notation (e.g., 1.5e10), which was previously undocumented as a literal syntax. (79851)
JSONItem.Compact is now documented as deprecated. (80670)
Fixed inaccurate wording in string.rst — required for non-Roman languages (a category error, since Roman-ness is a script property, not a language property) changed to required when the String contains non-Roman characters across 5 occurrences (IndexOf ×2, Lowercase, Titlecase, Uppercase). (81583)
Web: WebPage Left, Top, Width and Height properties cannot be set anymore, as they can't have any effect at runtime. (76509)
Examples
New Features
Web: Updated WebSDKIconConverter project to make it easier to work with. (81623)