Create native cross-platform desktop, web, mobile & Raspberry Pi apps


Join our mailing list

Stay up to date with latest software releases, news, software discounts, deals and more.

Download Xojo 2023 Release 4


  -  1.1 GB  -  Demo
  • Latest Version

    Xojo 2023 Release 4 LATEST

  • Review by

    Daniel Leblanc

  • Operating System

    Windows 8 (64-bit) / Windows 10 (64-bit) / Windows 11

  • User Rating

    Click to vote
  • Author / Product

    Xojo, Inc. / External Link

  • Filename


Xojo for Windows is an application development environment that provides developers a marked increase in productivity over other multi-platform development tools. Xojo includes the drag-and-drop capability to enable you to quickly create a user interface design, then incorporate the code behind it to add power and functionality. The program is highly compatible with Visual Basic, so Visual Basic developers are productive very quickly with the tool.

Xojo Desktop version also comes with a utility to help convert Visual Basic projects to the app where they can be compiled for macOS, Windows, Linux, the web, and iOS -- with the click of a checkbox. It runs on and creates software for macOS, Windows, Linux, iOS, and the web all from a single set of source code. The program incorporates platform-specific intelligence, like user interface widgets, so applications created with the tool look and feel native, regardless of the development platform you created it on. Build powerful database apps with The app's built-in database, based on the SQLite public domain database engine. It supports standard image formats for vector graphics.

Features and Highlights

Create Anything
With built-in support for graphics, database servers, internet protocols, and more, you can build just about anything you can imagine with the software. Using It, you can make commercial software products, utilities to help make your life easier, or even learn to program. In fact, the tool itself is the app!

Build Apps 10x Faster
You can use one set of source code to support multiple platforms and there are over 40 user interface controls built-in, allowing your app to look and behave how you'd want it to on any platform. On the web you can use one powerful language to create your web app instead of HTML, CSS, PHP, JavaScript, or AJAX, saving you tons of development time!

Modern Development
The software is a modern, object-oriented language. It supports inheritance, interfaces, polymorphism, and is strongly-typed as well. There are thousands of differences in OS API calls and the program abstracts you from these details, dramatically reducing development time and allowing you to focus on what makes your application unique.

Native, Cross-Platform
The apps don't have an interpreter or virtual machine - they're compiled to machine code for fast execution and the protection of your intellectual property. The tool uses native controls so your app looks and feels right on each platform. Development is cross-platform as well. Create your project on your favorite OS and then build it for any platform the app supports.

Note: Limited functionality in the demo version.

Also Available: Download Xojo for Mac

  • Xojo 2023 Release 4 Screenshots

    The images below have been resized. Click on them to view the screenshots in full size.

What's new in this version:

Xojo 2023 Release 4
- A more responsive IDE
- Reduced build times
- Debug and built apps run faster
- Xojo web framework optimized for speed
- Plugins load more quickly
- Android Barcode Scanner Class
- Example projects now feature descriptions and new search functionality

New Features:
- Added 'Path' entry to the information displayed when an Example Project is selected in the 'Choose a Project' panel
- Increased the Debugger by default font size to 11 points
- Now the IDE's Messages panel only displays the items matching the text typed in the Search control for better clarity
- Changes to the IDE's Debugger panel so it uses the same font size set for the Code Editor; and accesing the String debugger panel double clicking on the value row. Also other have been made to the String Debugger panel, removing the Edit Tab because now it is possible to set a new value for the string directly in the Text Tab, plus reorganizing the controls under the Text tab for a better use of the available space
- Added AllowPopover property to the Inspector Panel on DesktopChart to unify with WebChart
- Web: Layout editor preview won't render dark mode anymore in Web Projects, if the Supports Dark Mode option is turned off
- Web: Reduced the compile time when building Web projects
- Windows: Windows/Linux IDE: the default shortcut key for the Edit->Delete menu is now Del instead of Ctrl+Bksp on Windows and Bksp on Linux

- Plugin declared Delegates now have their compatibility flags setup properly
- For consistency, we no longer dim the layout editor when bringing up the XAML Chooser window since we're not editing the XAML content in place, only bringing up a dialog
- Changes to Plugins are now more accurately tracked so that our Plugin caches are cleared when they need to be. We also do a bit less caching when Plugins are loaded, with the side benefit being slightly faster Plugin loading times
- Fixed alignment of the Clear button in the Messages panel on macOS
- Code Editor Context Menu Go To scrolls the code editor to the matching line
- The Pragma reminder to implement interface methods no longer has an extra space and the #Pragma Error part honors the coding preference for Applies Standard Case
- Running a project remotely, by using the menu shortcut, no longer adds extraneous characters to the code editor
- Restored the ability to filter Window controls by name in the debugger
- We no longer include extraneous HTMLViewer resources when a Window, that contains an HTMLViewer, is not being used/referenced (i.e. when the linker has dead stripped the Window) for Windows/Linux builds
- The deprecated MSSQLServerDatabase plugin is no longer packaged in the Plugins folder. If your project still depends on this class, the plugin still exists in the Database Plugin Resources folder, found in the Extras folder
- Fixed an OutOfBoundException when adding an image to the IDE Navigator via drag & drop
- Debugger now displays generic Object variables again
- Selecting a recent search item in the IDE's Search Panel Recent Searchs menu offers the expected behavior, even if the user's preferences is set to Find/Filter Results appear After Pressing Enter or Return
- Avoid an OutOfBoundsException that can occur when pasting into the code editor when the paste buffer contains an empty string
- Fixed creating a new iOS project being marked as dirty
- Fixed: Minimum width set for the Tab Order Editor Window in the IDE
- Fixed loading user defined defaults for controls added to the IDE (74348)
- Fixed Listbox Inspector Properties bleeding through Under Inspector Header in the IDE on macOS when DarkMode is enabled
- Fix so the Enumeration editor does numbering elements correctly
- Android: Fixed an Android app crash that would occur when viewing the App object in the debugger
- Android: On macOS when debugging with an Android emulator, bring the emulator to the front when resuming
- Android: Android apps no longer show DebugLog messages from prior app runs
- Android: Fixed an internal exception that could occur when calling Timer.CancelCallLater
- Android: If an app icon cannot be converted to PNG during the Run/Build process, an error message is now displayed
- Android: NewAndroidProject is now used with IDE Scripting to create an Android project
- Every OS: Removed duplicate database plugins found in the Database Plugin Resources folder
- macOS: Fixed an intermittent code-signing issue with macOS Sonoma and when iCloud Document+Desktop sync is turned on
- Web: Fixed some IDE issues causing web project controls to not be displayed properly in the layout editor
- Web: WebChart.HasLegend will be True by default now, like in Desktop projects
- Web: Removed WebHTMLViewer URL and HTML properties from the IDE inspector, as they no longer exists
- Windows: Copying from the Documentation window, using the short-cut key combination, no longer throws a ThreadAccessingUIException
- Windows: Forcibly ending a debug session for a Desktop app, that contains DesktopHTMLViewers, no longer leaves cefsubproc.exe background processes around
- Windows: Having a Separator control, along with a TabPanel, no longer causes the TabPanel to misdraw in the layout editor
- Windows: Unselected items in the Tray area are now more distinguishable in dark mode
- Windows: Windows dark mode menubar is no longer white if Windows 8.1 support is turned off

New Features:
- String.IndexOf returns -1 instead of raising an OutOfBoundsException when the starting position is greater or equal than the string length
- The Variant.TypeDelegate constant is now documented
- CLong and String.ToInt64 no longer performs an additional string conversion to ASCII if the string is already in UTF-8
- Added new LinearGradientBrush and RadialGradientBrush constructors for convenience/simplify code. Note: these constructors will make a copy of the Point/Pair.- LinearGradientBrush.Constructor(startPoint As Point, endPoint As Point, stops() As Pair)- LinearGradientBrush.Constructor(startPoint As Point, endPoint As Point, ParamArray stops As Pair)- RadialGradientBrush.Constructor(startPoint As Point, endPoint As Point, startRadius As Double, endRadius As Double, stops() As Pair)- RadialGradientBrush.Constructor(startPoint As Point, endPoint As Point, startRadius As Double, endRadius As Double, ParamArray stops As Pair) (74521)
- Added new PictureBrush constructor that accepts a Picture and optional PictureBrush.Modes as parameters: Constructor(image As Picture, mode As PictureBrush.Modes = PictureBrush.Modes.Default) (74510)
- Android: Added System.DismissKeyboard() method
- Android: Can now use Ptr type to pass handles to Declares for Kotlin Library projects
- Android: Added an addition constructor to Font to allow it to load a font from a FolderItem
- Android: Added Barcode class (for Android) with StartScan() method and ScanCompleted, ScanCancelled and ScanFailed events
- Android: Added MobileHTMLViewer.Cancel() method
- Every OS: String.IsEmpty now checks the string byte count instead of calculating the actual String.Length before it returns
- Every OS: Improved stack overflow checking to minimize the amount of time it takes to check for a StackOverflowException every time a function is called
- iOS: Added the Pressed event handler to MobileMapViewer on iOS, so the user can add new LocationMap pins to it using a long press gesture. Also adding DistanceTo, LookupAddress, MoveTo and PointsOfInterest to MapLocation
- iOS: Implemented global functions Asc(), Bin(), CDbl(), Encoding(), Hex(), IsNumeric(), IsNull and Oct() so they are available also on iOS
- iOS: Added global Chr() method to iOS for consistency with other platforms
- iOS: Removed throwing an unnecessary exception from iOS Graphics when using DrawRoundRectangle / FillRoundRectangle and the CornerSize is equal or greater than the width / height of the rectangle
- macOS: Calling System.Ticks is now 20% faster on macOS/iOS. This also affects background tasks that are running
- macOS: Removed throwing an unnecessary exception from GraphicsPath on macOS when using AddRoundRectangle and the CornerSize is equal or greater than the width / height of the rectangle
- Web: Added an experimental opt-in feature for WebSession, Send Events In Batches, aiming to improve performance
- Web: Improved the web framework static asset cache control, to take advantage of browser's cache
- Web: Updated Bootstrap icon set to v1.11.1 for Web Projects
- Web: Improved WebListBox rendering performance
- Web: Added StackOverflowChecking Pragma to several framework methods to improve its performance
- Web: Added WebSegmentedButton.LastSegmentIndex as a ready-only property
- Web: Improved the way some controls are sending their events to the server, to avoid under-firing or over-firing them
- Windows: DesktopXAMLContainer: PointerEntered, PointerExited, PointerMoved, PointerPressed, and PointerReleased events can now be handled in the EventTriggered event
- Windows: DesktopHTMLViewer: updated to CEF build 118.0.5993.96. Note: this build no longer supports non-HiDPI aware apps. Enable the Supports Hi-DPI build option for best results. This build also removes the swiftshader folder

- DatabaseRow: repeatedly assigning a value to the same Column name no longer leaks memory
- Restored some of the lost behavior of JSONItem (since 2021r1). DecimalFormat now works like it used to (instead of being ignored), and doubles are no longer formatted in the user's locale
- PictureBrush offers now the same behavior in PDFDocument than on Desktop when its mode is set to Default
- String.IndexOf will raise an OutOfBoundsException if the received startPosition parameter is equal or greater than the text lenght
- Getting the Line/Node from an XmlException no longer crashes
- The number ToString functions, that pass in Locale.Raw, now matches the same behavior as calling ToString without specifying a Locale
- Android: Added Variant.TypeWindowPtr for platform compatibility. It will never match anything on Android, of course
- Android: Fixed a crash that would occur when viewing TypeInfo properties in the debugger
- Android: Fixed an internal exception that could occur when changing a container's Visible property during its Opening event
- Android: Improved URLConnection error handling
- Android: AndroidMobileTable.SelectedRowText now returns if there are no rows or no selected row instead of raising an OutOfBoundsException
- Android: Accessing HTTPStatusCode before URLConnection has initialized no longer causes the app to crash with an internal exception
- Android: MobileApplication.UnhandledException event now better captures the user runtime call stack for Stack() and StackFrame()
- Android: Controls are resized if necessary when a bottom toolbar is added at runtime
- Android: To match behavior on other platforms, EncodeBase64 now sets the resulting string encoding to US-ASCII
- Android: Integer.ToBinary() now works with large integer values
- Android: MobilePopupMenu.SelectedRowText should return when there are no rows, not raise an OutOfBoundsException. MobileSegmentedButton.SelectedSegment should return null when there are no segments instead of raising an OutOfBoundsException
- Android: Fixed some internal exceptions that could occur when accessing some screen properties from the App.Opening event
- Android: Controls that are locked to top/bottom or left/right now report more accurate height and width
- Android: Hex strings (via Hex or Integer.ToHex) are returned with uppercase letters to better match behavior on other platforms
- Android: To better match other platforms, EncodeBase64 result no longer has a trailing LF
- Android: Nil + String when assigned to a Variant no longer has null prefixed to the beginning of the string
- Android: String + Nil when assigned to a Variant no longer has null appended to the end of the string
- Android: IsNumeric() returns True for enums to match behavior of other platforms
- Android: Locale.Identifier now uses ISO-2 IDS, matching behavior on other platforms
- Android: Fixed a compile error when subclassing TypeInfo
- Android: URLConnection binary request content data is now sent correctly
- Android: Fixed a drawing oddity with MobileOval, MobileRectangle and MobileSeparator if they had focus
- Android: MobileSeparator thickness is now 1pt and gray to match other platforms
- Android: Returning False from MobileTextField.ReturnPressed event now dismisses the keyboard
- Android: To match behavior on other platforms, VarType() and Variant.Type now return TypeInt64 (3) for an enum
- Android: Fixed some compiler error when using Crypto enumerations
- Android: Fixed an exception that occurred when using MobileSharingPanel.SharePicture()
- Android: HTMLViewer.NewWindow() event now contains correct url in the url parameter
- Android: To match behavior on other platforms, Bin() function should use 4 minimum digits, not 8
- Android: To match behavior on other platforms, JSONItem.LastRowIndex now returns a value based on the key count
- Android: It is not possible for introspection to know an array's type and size just from its declaration, but we can at least prevent an exception when requesting that information
- Android: On Android 14, avoid a situation where containers could sometimes be added to the screen more than once
- Android: Str() method now works with Boolean, Color and DateTime
- Android: Fixed an internal exception that would occur when there was only 1 tab on a MobileTabPanel
- Android: Fixed an internal exception that could occur with a MobileContainer on a screen after the app is re-opened
- Android: Invalid objects added to JSONItem now raise an InvalidArgumentException (like other platforms) instead of adding silently as a string
- Android: Fixed compile errors when overriding members of Graphics in a subclass
- Android: An empty array is added to the JSON when converted from a dictionary
- Android: MemoryBlock.StringValue() now returns a string using the specified encoding
- Android: MobileScreen Activated/Deactivated event behavior better matches iOS behavior
- Android: The behavior of CDbl now better matches other platforms
- Android: Fixed a problem with some equality checks to Currency values
- Android: URLConnection Request Content is now sent using the specified character set
- Android: Improved DateTime math results for a variety of edge cases
- Android: A Dictionary is now first converted to a JSONItem before adding it to a JSONItem
- Android: Added IsNull(value As Variant) As Boolean global function to match other platforms
- Android: For MobileTextField, only enable the keyboard done button change if the ReturnPressed event is implemented
- Android: MobilePopupMenu.RowTagAt() can now be assigned a value
- Android: Removed JSONItem.EscapeSlashes and DecimalFormat from Android as those have been deprecated in the main framework
- Android: Sign() now returns Integer instead of Double to match other platforms
- Desktop: Fixed memory leak in DesktopSearchField for Windows
- Desktop: DesktopMenuItem: enabling/disabling the menu item, outside of the MenuBarSelected event, now works
- Every OS: For consistency and to match naming standards, Semaphore.Constructor parameter name standardized to resourceCount
- Every OS: Deprecated HSV, use Color.HSV as replacement
- Every OS: A value that is represented as a Single type, that is stored in a Variant, no longer emits an extraneous e+ at the end when retrieving the StringValue
- Every OS: JSONItem.ToString no longer uses the decimal character based on locale to format doubles
- iOS: Added default event handler to MobileApplication on iOS
- iOS: Thread.DebugIdentifier is now supported for iOS
- iOS: Fixed Graphics.DrawText drawing multi-line strings on iOS
- Linux: ListBox: checkboxes are no longer drawn outside the bounds of the ListBox
- Linux: A clipped graphics from a Picture, whose scale factor is greater than 1, no longer incorrectly offsets the clipping. This fixes an issue with the Linux IDE, for Web Projects, that did not draw any controls on the layout editor when the display scale was greater than 100%
- macOS: DateTime.ToString/SQLDateTime no longer waits for the OS to garbage collect these string instances before freeing up memory
- macOS: GraphicsPath.Bounds no longer returns a Nil Rect if the width or height is 0. This fixes the behavior on macOS, iOS, and Linux to match the behavior on Windows
- macOS: Fixed setting the text on DesktopCombobox (macOS) when SelectedRowIndex <> -1 and the control still has the focus
- macOS: Fixed DateTimePicker receiving key events on macOS when the control is disabled
- Web: WebListBox won't reload its data unnecessary anymore when the browser has been resized, unless its height has changed
- Web: Fixed an issue causing large file downloads to be closed too early sometimes, before the browser finished the download
- Web: WebTabPanel.PanelCount will report the correct amount of panels now, it was always returning 2
- Web: Fixed an issue when doing a WebMapLocation.LookupAddress with the default provider
- Web: Fixed a WebUIControl issue causing the Tooltip placement to be always set to auto
- Web: Fixed a ColorGroup issue causing a NilObjectException to be raised in some situations. It was affecting Web projects
- Web: Fixed the issue causing hovering over a WebMapLocation marker in WebMapViewer to throw console errors, when Title wasn't filled
- Web: Fixed a WebMapViewer issue causing the LocationSelected event wasn't being fired, unless Pressed event handler was present
- Web: Fixed a WebChart issue causing the Pressed event to raise an internal exception
- Web: Fixed Web Framework methods and events to match Xojo coding guidelines
- Web: Fixed an issue causing connections being closed too early under some circumstances
- Web: Fixed an issue causing tooltips to not be shown on disabled web controls
- Web: Fixed an issue in WebTextField and WebTextArea causing loss of data when typing while changing its settings
- Windows: Projects using DesktopHTMLViewer no longer leave cefsubproc.exe processes laying around when the app unexpectedly crashes
- Windows: DesktopDateTimePicker no longer leaks GDI objects
- Windows: Closing a ContainerControl that has a TabPanel on another ContainerControl/Canvas, no longer crashes
- Windows: TCPSocket: sending data is now much faster on Windows/Linux
- Windows: DesktopDateTimePicker control gets the focus on Windows when the Mode is set to TimeOnly
- Windows: DesktopHTMLViewer: ZoomTextIn and ZoomTextOut now zooms in/out to more than one level
- Windows: Fixed an issue due to a bad format string when the DesktopChart is set to Scatter/Bubble and the app is ran on Windows / Linux
- Windows: Fixed DrawInto for ListBox, GroupBox, BevelButton, DisclosureTriangle, PopupArrow, and Separator controls that did not draw correctly when drawing into a Graphics whose scale factor differed from the OS scale factor
- Windows: DesktopWindow/DesktopContainer DrawInto now correctly draws all the controls on the Window/Container
- Windows: Assigned menu icons, with Picture sets, now re-calculates the best representation when the scale factor changes
- Windows: Switching between high contrast themes now triggers the App's AppearanceChanged event
- Windows: Controls, that do not have the Top locked, are now refreshed properly when the window is restored from its maximized state
- Windows: DesktopTextArea: getting the StyledText.Paragraph no longer scrolls the TextArea contents, which caused the text to appear to jump up and down
- Windows: Canvas.DrawInto no longer offsets the Backdrop image incorrectly when drawing into a Picture Graphics
- Windows: Fixed mouse cursor flickering when moving over SearchField control on Windows

New Features:
- Android: Updated to newer Android/Kotlin toolchain
- Android: Added Dependencies property to the Android advanced build settings. This can be used with Declares and Libraries to load any external dependencies they need. Put one dependency per line, an example would be: io.github.bitstorm:tinyzip-core:1.0.0 (74658)
- Android: Added support for Ptr type, allowing declares to custom libraries to pass along Android/Kotlin types that do not have an equivalent Xojo type

- Fixed an occasional issue when compiling on very high core count Windows machines
- Android: Fixed an issue where accessing certain controls by name in events of certain mobilescreen subclasses could fail
- Android: Fixed an unexpected exception when comparing a WeakRef.Value to Nil
- Android: Fixed an issue when referencing certain controls via the screen name in certain events from that same screen
- Android: Fixed an issue with Objects and IsA
- Android: Fixed an issue with certain JSONItem casts that could result in an unexpected exception
- Android: Fixed an issue when using a constant as the lib name in a declare
- Android: Fixed an issue when setting a constant to the value of another constant in certain circumstances
- Android: Fixed an issue when declaring a constant with a nil value
- Android: Fixed a compilation issue with certain events on mobilescreens that use paramarray
- Android: Fixed an issue with using CurrentMethodName inside certain computed properties
- Android: Fixed an issue with AddressOf and methods from Class properties on App
- Android: Fixed an issue when using CType to convert an Enum to an Integer
- Android: Fixed an issue when using CType to convert an Integer to a Boolean
- Android: Fixed an issue with declares that have certain parameters and expect a cstring return value
- Android: Fixed an issue when initializing certain variables of different types following a New and method call on the same line
- Android: Fixed an issue when initializing a Pair variable on the same line that initializes another variable of another type using a method
- Android: Fixed an incompatibility with using modal screens on Android 8 (APK 26)
- Android: Fixed an issue when using the Array function to initialize a variable on the same line as other types
- Android: Fixed an issue with conditional compilation that could cause odd issues between certain runs/builds
- Android: Fixed an issue when referencing certain controls on a screen during variable initialization
- Android: Fixed an issue when initializing certain variables with a dotted module/class reference
- Android: Fixed an issue when using multiple IsA in a single Case
- Android: Fixed an issue with certain class enumeration references
- Android: Fixed an issue with calling a conversion on certain framework properties like System.Version.BuildVersion
- Android: Fixed an issue with certain combinations of #ElseIf and #Else
- Android: Fixed an issue that sometimes occurred when returning an object with a nil value from a method
- Android: Fixed an issue with nested/multiple #Ifs in certain circumstances
- Android: Fixed an issue with #ElseIf and nested #Ifs
- Android: Fixed an issue with Not in combination with IsA in parenthesis
- Android: Fixed an issue when accessing a shared property on a MobileScreen via Self
- Android: Fixed an issue when accessing a computed shared property on a MobileScreen
- Android: Fixed an issue when using certain multi-parameter methods with Case
- Android: Fixed an issue with certain methods that have a multi-dimension array parameter
- Android: Fixed an issue where an error state between run/build with conditional compilation in the same session could persist
- Android: Fixed an issue with conditional compilation and TargetMobileSimulator
- Android: Fixed an issue when calling a method with an optional parameter before a required parameter could fail when passing only a required type
- Android: Fixed an issue when calling a method with an optional parameter before a required parameter could fail when passing nil
- Android: Don't allow non-default screens to be opened directly from outside the app
- Android: Fixed an issue with certain whitespace at the end of a line, and fixed an issue with evaluating a pair value as a boolean
- Android: Fixed an issue when using the inspector to set the value of an enumeration on a class
- Android: Fixed an issue when using Timer.CallLater with a method on a container
- Android: Fixed an issue when calling MemoryBlock.StringValue in certain circumstances
- Android: Fixed an issue when accessing an element of a protected shared array property
- Android: Fixed an issue when comparing an object to nil when that object is a variant
- Android: Fixed an issue with conditional compilation and constants
- Android: Fixed an issue when calling certain overloaded methods with different parameter sets
- Android: Fixed an issue with some uses of Try that use End (rather than End Try)
- Android: Fixed an issue with accessing/comparing certain MobileScreen inherited properties, and an issue with properties that have underscores in the name
- Android: Location app permission is now only added if MobileLocation is used on a layout. Camera app permission is now only added if MobileImagePicker is used on a layout. If those permissions is needed for other reasons they can be manually added using the Permissions field on the Android Build Settings advanced tab
- Android: When the bundle ID is changed, the app gets fully rebuilt on the next run
- Android: Fixed an issue when using two - in a row
- Android: Fixed an issue where certain classes within modules weren't being checked for invalid names
- Android: Fixed the error message when there are too many modules within other modules for the Android platform
- Android: Fixed an issue when using Optional in a Delegate
- Android: Fixed an issue when using Optional in an event definition
- Android: Fixed an issue when comparing certain types against an element of a variant array
- Android: MobileApplication version properties are now shown with introspection
- Android: Fixed an issue with testing a condition inside of parenthesis made up of certain framework shared methods
- Android: Fixed a compilation error with certain methods that have a multi-dimensional array as the return type
- Android: Fixed an issue when initializing a MobileScreen with a Constructor that has parameters
- Android: Fixed an issue that could cause Android compilation to fail on some Windows installations
- Android: Building an Android app now always clears any prior builds to ensure that a proper rebuild is done
- Android: Fixed an issue with AddHandler and certain controls on a container
- Android: Improved Android temporary build folder creation process
- Android: Fixed an issue where MobileScreen constructors weren't always called

- WebPicture.Height and Width are now correctly documented as methods rather than properties
- DesktopPopMenu now has a note to explain that when using the & character in a row, you must double it for it to appear
- WebPicture.Height and Width are both now correctly documented as methods rather than properties
- WebFile.Data is now correctly documented as a method rather than as a property
- WebApplication.SessionCount is now correctly documented as a method rather than as a property
- Webpagination.Style is now correctly documented as a method rather than as a property
- Fixed several places in example code on various pages where Object2D subclasses were using Fill rather than FillOpacity
- Fixed bugs in various code samples on the Group2D page
- Improved the description of DesktopWindow.DrawInto
- WebSession LanguageCode, ConfirmDisconnectMessage, DisconnectMessage, InterruptionMessage and UserPrefersDarkMode are now all better documented
- Android: System.GotoMap is now documented
- Android: Added information about the UnhandledException event on Android to the Getting Started > Debugging page

- The CombitListAndLabel example project now opens correctly

Xojo 2023 Release 3.1
- Zip/Unzip methods for FolderItem - You can now compress and decompress with built-in Zip support
- Additional WebMapViewer Map Providers - You can use use map providers other than Google to render your maps
- Set class - Compare and test case-sensitive data
- MobilePopupMenu control for Android
- Android OS Permissions support - Ask Android for permission to access OS services for use with declares
- Improved MobileHTMLViewer for Android
- XAML improvements for Windows
- MobileLocation now supports GeoFencing and Visits for iOS

- Web: Fixed an issue causing loading web projects from earlier versions to convert ColorGroups to the default control color

- Fixed a regression where drawing a picture in PDFDocument resulted in a blurry image
- macOS: Typing a new text value in a DesktopComboBox on macOS updates the SelectedRowIndex property accordingly

Xojo 2023 Release 3
- Zip/Unzip methods for FolderItem - You can now compress and decompress with built-in Zip support
- Additional WebMapViewer Map Providers - You can use use map providers other than Google to render your maps
- Set class - Compare and test case-sensitive data
- MobilePopupMenu control for Androi
- Android OS Permissions support - Ask Android for permission to access OS services for use with declares
- Improved MobileHTMLViewer for Android
- XAML improvements for Windows
- MobileLocation now supports GeoFencing and Visits for iOS

Xojo 2023 Release 2
- Android (Beta) - You can now build apps for Android
- DesktopXAMLContainer - Add any Windows control with the modern Windows 10/11 look and feel to your desktop app
- Web Dark Mode Support - Your web apps can now look great in dark mode
- PDFViewer control for iOS - View PDF documents directly in your iOS apps
- Stack chart type for desktop and mobile - Present stack charts in your desktop and mobile apps

Xojo 2023 Release 1.1
- Chart Control for Desktop and iOS
- Debugger Variable Filter
- Code Editor Duplicate Line and Swap Line
- iOS target updated to iOS 16.2 SDK for Apple Store requirements

Xojo 2023 Release 1
- Fixed regression on Debugger Filter showing duplicates first time a break point is hit when the project is run on Windows
- Controls are now refreshed properly when the App is being run inside a remote desktop session with different screen sizes
- PrinterSetup.OpenPrinter (or OpenPrinter) no longer raises a failed assertion if the user cancels the open printer dialog
- Windows IDE: code editor no longer flickers in certain edge cases when moving the text cursor or moving the mouse over particular source code items
- You can now choose an ActiveX Control to embed on the DesktopOLEContainer by contextual clicking on the control in the Windows IDE and selecting Choose ActiveX Control
- Locked controls now properly re-adjust when the monitor scale factor changes, including when the monitor wakes up from slumber on a multi-monitor setup
- DesktopTabPanel: no longer raises a failed assertion when returning True from MouseDown event
- TabPanel no longer overdraws its empty tab region area past the TabPanel bounds
- When a new project is created, center the Workspace window and size things to fit the display better

Xojo 2022 Release 4.1
- Fixed regression geting the TextHeight when using a wrapping value and the text to wrap is just raw data (that is, without spaces on it or such)

Xojo 2022 Release 4
- Change log not available for this version

Xojo 2022 Release 3.2
- Fixed an issue causing nested controls to be drawn in the IDE layout editor mixing old properties, until they were moved around
- Better handling of drawing DesktopTabPanel in LayoutEditor (macOS) while not impacting CPU usage
- Crash reports are no longer prompted to be sent at IDE startup
- Fixed a regression that prevented the Add Method code editor contextual menu from appearing
- Fixed a regression with debugging on macOS where it was possible to run out of file descriptors since they were not properly closed while we collected stack info
- Currency to string conversion no longer potentially adds an additional negative character in the string
- MySQLCommunityServer: iterating through the TableColumns no longer iterates infinitely

Xojo 2022 Release 3.1
- Change log not available for this version

Xojo 2022 Release 3
- Converting controls that have an unknown baseclass (typically when that baseclass doesn't exist in the project, for example when an external item isn't located), no longer throws an exception
- A DesktopCanvas, that’s embedded on a Container, now fires the DoublePressed event correctly
- DesktopListBox now fires CellFocusReceived and CellFocusLost events
- 6Built apps with Workers no longer raise an IllegalCastException on Windows/Linux when running projects that use DesktopApplication
- The last parameter for DesktopUIControl.Refresh with x,y,width,height,immediately is now optional as documented
- Weblistbox sorts properly again
- Web applications should no longer disconnect after 140 seconds
- Fix an issue with our EventSource implementation which WebImageViewer pressed event fires again when placed on a TabPanel or PagePanel
- Fixed a bug in the retrieval of data from a Weblistbox datasource
- WebImageViewer again fires its Pressed event on touch enabled devices that also accept mouse input
- HTMLViewer.ExecuteJavaScriptSync can now return booleans, integers and doubles correctly, instead of returning back Nil
- DesktopPopupMenu.SelectionChanged event no longer fires needlessly when the SelectedRowIndex doesn't change
- Locked position badge no longer bleeds through TabPanels/PagePanels
- Assigning a ColorGroup to plugin controls (DesktopBevelButton for example) now reflects the change in the layout editor
- IDE now picks up initial ColorGroup property values that are defined for plugin controls
- Removing all items from a menubar and then adding a new item now chooses the right super based on the super of the App class
- Fixed Desktop control conversion of Color properties (most likely seen when loading up XML projects)
- Running iOS projects on M1 Macs with Extensions Visible now works

Xojo 2022 Release 2
- 136 bugs were fixed, 72 doc items were addressed, and 42 features were added

Xojo 2022 Release 1.1
- Change log not available for this version

Xojo 2022 Release 1
- All-new documentation window that includes all documentation
- iOS on-device debugging
- The report editor now supports HiDPI
- Code Assistants allow you to add your own code parsing features to the Code Editor
- Lots of other improvements and bug fixes

Xojo 2021 Release 3
- Desktop API 2.0
- Dark mode support on Windows
- Building Mac apps from Windows and Linux
- New encryption features: SHA3, BlowFish, TwoFish and CRC32
- iOS now uses iOS 15 SD
- SQLite 3.36.0 with support for RETURNING on DELETE, INSERT, UPDATE statements
- Desktop project icon resources are saved as compressed PNGs, helping to significantly reduce project file sizes
- Lots of improvements and bug fixes

Xojo 2021 Release 2
- iOS PDFDocument support
- Xojo Cloud Remote Notification server for iOS notifications
- Binary Enumeration Edito
- ColorGroups in desktop and web projects
- Faster text project saving with fewer files marked as having changes
- PDFDocument additions: Rotate, Translate, Scale
- Code Editor improvements, including IDE line number settings, better row highlighting and improved drawing and performance
- Linux IDE layout improvements
- Lots of bug fixes

Xojo 2021 Release 1.1
- iOS apps now run natively as ARM builds in the Simulator on ARM Macs
- Linker is now Universal and runs natively on ARM Macs
- JSONItem fixes
- Fixed memory leak in web apps on Linux
- Added DesktopColorPicker control

Xojo 2021 Release 1
- Xojo IDE is now native on Apple Silicon Macs
- XojoScript now supported on Apple Silicon Macs
- macOS 11 SDK now used for both Intel and Apple Silicon builds
- iOS apps now use iOS SDK 14
- SF Symbol toolbar icons on Big Sur
- Graphics.Translate, Rotate, SaveState and RestoreState available in Desktop projects
- New WebLocation class
- New iOS UserAuthentication class
- Much faster JSON processing
- Many IDE improvements
- Worker improvements, including native Apple Silicon helper apps
- WebFileUploader optimized to improve speed, memory and CPU usage
- PDFGraphics improvements
- Numerous Code Editor and Autocomplete improvements
- SQLite updated to 3.34.1
- 172 bug fixes

Xojo 2020 Release 2.1
Bug Fixes:
- Build: if main app tries to start a worker without the required Helpers folder (that contains the workers) then it sends a message to the Error event instead of causing a NilObjectException: At end of build process, the entire build folder is removed if any worker had a build error; when Show Build Folder is enabled, only the primary build folder is shown.
- Build: Universal builds that include separate x86_64 and arm64 plugins parts are now correctly merged/structured to be able to work on older macOS versions.
- Build: Building a Universal app without Builds Folder enabled now correctly replaces the old App. Building a Universal console app now correctly merges the plugin parts (if the plugin included a separate x86-64 and arm64 part).
- Build: Removed the macOS photos entitlement from iOS projects.
- Compiler: Resizing an Array of Structures no longer crashes for macOS ARM builds
- Crashes & Assertions » Failed Assertion: Linux - Color.SelectedFromDialog no longer raises a failed assertion on if the prompt supplied is an empty string
- Crashes & Assertions » IDE Unhandled Exception: Fixed a NilObjectException that could occur when attempting to identify build errors in the Worker Console project
- Crashes & Assertions » IDE Unhandled Exception: Display a rendering error if the MobileApplication.DefaultiPhoneLayout or DefaultiPadLayout is blank (instead of causing an IDE NilObjectException).
- Crashes & Assertions » IDE Unhandled Exception: Changing the super of a control to a control type that is not compatible with the current project type no longer crashes the IDE
- Database Plugins » ODBC: ODBCDatabase no longer fails to connect (with Actual Technologies ODBC drivers for example)
- Framework » All: Ptr method offsets are now capable of addressing values larger than Int32 for 64-bit builds, instead of crashing
- Framework » All: Fixed an iOS Introspection issue to allow changing a property value, invoking a Constructor with parameters and invoking a method with parameters
- Framework » All: ParseJSON no longer raises a Failed Assertion when passed an empty string
- Framework » All: Fixed TextHeight / TextAscent returning wrong values in PDFGraphics when a new Font is set
- Framework » All: ReplaceB/String.ReplaceBytes no longer raises failed assertion when the replacement string is an empty string
- Framework » Console: Now the DateTimePicker control uses the standard border width under Windows
- Framework » Desktop: DateTimePicker control Height changed to 22 points on Windows
- Framework » Desktop: Now it is possible to set a new DateTime object to the SelectedDate property on macOS; no matter the Regional settings the user may be using
- Framework » Desktop: Now the DateTimePicker control honors the Top value when displayed in Text mode on macO
- Framework » Desktop: Now the DateSelected property returns a valid/updated DateTime object on Windows
- Framework » Desktop: TabPanel.RemovePanelAt no longer throws an OutOfBoundsException if the Tab to be removed actually exists
- Framework » Desktop: Do not call Worker Error event when Worker Helper quits normally
- Framework » Desktop: Fixed a bug in PDF where Rectangles/Ovals wheren't drawn if origin at 0,0 and/or size equals the size of the page
- Framework » Linux: Listbox border is no longer cut-off on the right/bottom edges
- Framework » Linux: No longer leaks objects/memory when Gtk related objects (like Controls, Windows, MenuItems, etc.) are destructed with Normalized Control Sizes enabled
- Framework » Web: WebDatePicker week start day is now Sunday for the en-US locale
- Framework » Web: Fixed an issue which caused debugged web apps to stop in the debugger multiple times during startup
- Framework » Web: WebListbox.RemoveRowAt now throws an OutOfBoundsException if the row parameter is after the last row in the list
- Framework » iOS » Mobile: Adding non-UI controls to iOS project no longer crashes on run
- Framework » iOS » Mobile: Global.Speak is now System.Speak
- Framework » iOS » Mobile: UDPSocket usage no longer causes app to terminate after unlocking phone
- Framework » iOS » Mobile: Runtime module methods (like ObjectCount, MemoryUsed, etc.) are now accessible for iOS
- Framework » iOS » Mobile: Graphics.Font now returns a Font object instead of iOSFont
- Framework » iOS » Mobile: Graphics FontSize, Bold and Italic have been removed. Please use the equivalent functionality found in the Font class instead
- Framework » iOS » Mobile: Fixed an issue where MobileScreen.Closing was firing incorrectly for non-modal views
- Framework » macOS: Brush/gradient offsets are now control relative
- IDE » Auto Complete: Fix a regression which caused autocomplete to omit project items after IsA
- IDE » Auto Complete: Fixed an autocomplete regression which caused the code editor to only suggest event definition names on lines that began with RaiseEvent regardless of where you were on the line.
- IDE » Graphics: Enumeration and Attribute editor add/remove buttons now transition properly between OS light and dark modes.
- IDE » Library: WebSDK controls now use the correct icon in the library.
- IDE » Miscellaneous: macOS Universal builds no longer fails when the App name is a constant.
- RBScript: XojoScript no longer crashes due to incorrectly generating AVX instruction code for CPUs that don’t support it.

- Framework » Desktop: Fixed a bug were PDFDocument rendered lines with half the pen size in the x or y coordinates when those values were set to zero, this is because half of the line is drawn outside the page bounds.
- Framework » Windows: Fix: Now the SearchField control selects all the text when it gets the focus (on Windows). Fix: The control height is set to the by default 22 points.
- IDE » Debugger:  A link to view all Controls embedded on a MobileScreen is now available when debugging the MobileScreen object.
- IDE » Debugger:  Global variables list now supports viewing all MobileScreens when debugging iOS projects.

New Items:
-IDE » Build Automation: CopyFilesSteps can now be specified by architecture.
-IDE » Build Automation: Build steps now have an Architecture option which allows you to specify if they should run for Intel or ARM builds. - Make it possible to intercept the build process with an IDE script with the name "XojoBuildPressed.xojo_script".
-IDE » Miscellaneous: Windows IDE: error messages for plugins that fail to load now contain the actual DLL file that failed. This can be seen in the debug log or in the Loaded Plugins section in the About Box.

Xojo 2020 Release 2
Major changes:
iOS API 2.0:
- The new iOS API 2.0 framework uses String and Variant and greatly improves code compatibility with Desktop and Web
- There are many updated Mobile controls, including all-new MobileMoviePlayer and MobileMapViewer
- New iOS features such as Notifications, URL schemes, app shortcuts, modal screens, badges and more
- Many common framework features are now available including URLConnection, XMLDocument, RegEx, UDPSocket and more
- Plugin support

Apple Silicon (M1) Native Compilation:
- You can now build both Universal Binary and Native Apple Silicon apps for Mac to support the latest M1 Macs that were recently released

- Take advantage of your multiple CPU cores with the Worker class
- SearchField control
- DateTimePicker control
- ColorGroups

Graphics enhancements:
- LineCap, LineJoin properties
- Brush property with support for LinearGradientBrush, RadialGradientBrush, ShadowBrush and PictureBrush
- ShadowBrush property and ShadowBrush class for applying shadow effects

Xojo 2020 Release 1.2
Bug Fixes:
- The web framework now runs correctly on systems where the primary language uses double-byte characters

Xojo 2020 Release 1.1
- Change log not available for this version

Xojo 2020 Release 1
Web 2.0:
- All-new web framework with new controls and improved performance
- PDF generation

XojoScript improvements:
- API 2.0 methods
- Save/Load compiled scripts

- Draw custom ListBox headers with ListBox.HeaderBackgroundPaint and ListBox.HeaderContentPaint
- Large text projects now open more quickly

Xojo 2019 Release 3.2
- Change log not available for this version

Xojo 2019 Release 3
- iOS 13 Dark Mode support
- Color Groups for easy Dark/Light Mode drawing
- iOSRectangle now supports Blur effects
- Access to the over 1,500 button icons included in iOS 13
- iOS Text Area border settings
- Updated SQLite to 3.29.0
- ListBox iterators
- String improvements
- DateTime improvements
- System.VersionData class for getting OS version information

Xojo 2019 Release 2
IDE Improvements:
- Debugger can now ignore All Breakpoints when running
- Text file projects save quicker
- Navigator speed improvements
- Preview layout in light or dark mode on supported macOS versions

Code Editor improvements:
- Auto-complete improved
- Shift-Return on comments to continue to next line

- SQLite updated to 3.28.0
- Database.BeginTransaction method
- Simplified prepared statements with Database.ExecuteSQL and Database.SelectSQL methods

- Support for Xcode 11 and iOS 13 Simulator
- iOSSQLLiteDatabase.SQLExecute and SQLSelect now accept an array for binding values

Xojo 2019 Release 1.1
- Build: Added default plist entries for iOS location services which can be overridden by user plist files.

Xojo 2019 Release 1
- Xcode 10.2 compatibility
- Significant improvements to performance of Layout Editor, especially with web projects
- Improvements to URLConnection: SendSync now works with threads, added a new HTTPStatus property, URLConnection also now appears in Library for desktop projects
- Free Pi license now builds for Console or Desktop
- Spell checking now also supported in TextArea on Linux
- Dynamic Constants are now referred to as Localized Strings
- General AutoComplete improvements
- SQLite updated to 3.26.0

Xojo 2018 Release 4
- Change log not available for this version

Join our mailing list

Stay up to date with latest software releases, news, software discounts, deals and more.