Xojo 2021 Release 1.1 Review

I've been using Xojo since 2004 (back when it was known as REALbasic) but I've never written a review or opinion about it. I've decided to try to spread the word about Xojo because I use it almost everyday for pleasure and I think it's a great tool. Sure, it has some shortcomings but overall I think it deserves more (positive) attention than it gets.

For those of you who don't know what Xojo is, it's essentially an application you use to build your own apps. Practically speaking, it's an IDE (integrated development environment) and a programming language. The IDE is the application you use to write your code and to design your app in. It abstracts away lots of the technical details that you're normally required to deal with when using other programming languages. Just because it abstracts away many technical aspects does not mean that Xojo is not a serious development tool - far from it. Many people ship apps built with Xojo and build their livelihoods upon it. I typically use it for side projects, games and other forms of amusement.

The Xojo IDE runs excellently on macOS (natively on Apple Silicon), acceptably on Windows and is claimed to run on Linux. Quite frankly, the Xojo IDE is unusable on Linux and I would not recommend Xojo as a development tool for Linux. That being said, apps built with Xojo run pretty well on Linux.

With Xojo you can build native desktop and console (a.k.a. terminal / command line/shell) apps that run on macOS, Windows, x86 Linux and 32-bit ARM Linux. It's also possible to create iOS apps using Xojo although until very recently that has been a poorly supported target. Finally, Xojo have an implementation that allows you to build "web apps" that run on a server and you interact with via a browser. I have very limited experience of targeting the web with Xojo and I've heard very mixed opinions about the implementation.

Strengths

Xojo has three main strengths in my opinion. Firstly it abstracts away lots of the complexities encountered when trying to develop an app using other programming languages. You don't have to concern yourself with managing a bunch of text files in a code editor and then pulling them into a build chain with a compiler. Apps built with Xojo are fully contained binaries and don't require you to bundle an interpreter along with them (like Python). Xojo-built apps are native executables, compiled with LLVM and run fast. You don't have to ensure that the end user has particular runtime libraries installed (.Net I'm looking at you). By and large, creating an app with Xojo is as simple as opening up the IDE and clicking the build button.

Another strength is its Xojo's editor:

Constructing your window's layout is as simple as dragging UI controls from the library on the right onto the window in the centre. You can then add code to events that the controls expose (mouse movement, keyboard clicks, refreshes, etc). It's  much easier than having to wire everything up manually in code like you have to do, for instance, in Xcode with Swift.

Xojo's final strength (and perhaps its greatest) is its welcoming community. They have an active forum where you can always find help. Their engineers even frequent the forum which is brilliant. I wish there was less censorship on the forum when it comes to talking about anything other than Xojo but, hey, it's their playground I guess.

API 1 vs 2

Xojo as a tool has been around for a long time (25 years) and was previously known as REALbasic. Any development tool that's been around as long as this inevitably will pick up baggage in its framework and Xojo is no different. There were many inconsistencies within its framework (some classes were 0-based, others were 1-based for instance) and there were wide variations in the naming of lots of methods. Things like this increase the learning curve for beginners and so Xojo sought to address this.

Rather than break a lot of existing code, Xojo decided to add new methods and classes to their product to fix these inconsistencies. This movement is known as API 2. The old classes and methods are known as API 1. Xojo has stated publicly that they plan on supporting API 1 for years but they encourage new projects to use the newer classes and nomenclature provided by API 2.

This caused a lot of backlash from longtime users. Thankfully time heals many wounds and now that we're a couple of years into the transition I think the community has started to see the benefits of the transition. It has allowed Xojo Inc to unify their framework between all of their targets so it is finally possible to share large amounts of code between projects. For example, it's now really easy to share modules between desktop and iOS projects thanks to the addition of the String and Variant classes to iOS.

Let's talk about bugs 🐞

I'm not going to beat around the bush. Xojo has a reputation for being buggy and incomplete. A lot of its critics will claim that the company is constantly targeting new platforms in a bid to attract new users and, as a result, does not fix bugs in their existing suported targets. There is some truth to this but I think things have significantly improved over the last 12 months or so.

I've seen a real focus on improving the IDE over the last release cycle with big improvements to the layout engine, autocomplete accuracy and code editor performance. There has been an enormous improvement in the iOS framework adding many features that have been present in desktop targets for years (regular expressions and the String class come straight to mind).

I still think that Xojo Inc needs a better system than its ancient Feedback app for submitting bugs and Xojo Inc really needs to provide better, er, feedback to bug submitters to encourage greater participation. Apparently they are rewriting the Feedback app to use their web framework so hopefully they will make some UI changes to it at that time.

My Wish List

Xojo does a pretty decent job at catering to beginners and intermediate level developers but where I think it falls down is in helping advanced users write code. This is a little surprising since the Xojo IDE itself is written in Xojo by the Xojo Inc engineers so they need advanced features themselves. They really need to fix the broken namespacing in the IDE and improve the autocomplete's ability to see things in scope. I also wish they would show overridden methods in the autocomplete window for example.

I love using external modules and classes in my code. It allows me to share classes and modules between projects and any changes I make in one project are immediately reflected in all other projects. Unfortunately, it is impossible to make a module external if it includes classes. This might not seem to be a deal breaker but it means that I have dozens or hundreds of classes in the global namespace all prefixed or suffixed with weird letters to stop namespace clashes. If Xojo supported classes in external modules then I could name the classes whatever I wanted since they would be scoped to their containing module. Geoff, if you're reading this, please consider supporting this use case. I know I'm not the only person who hates this.

Summary

Overall, I think Xojo is in a good place at the moment. The transition to API 2 is pretty much complete and the IDE is getting some much needed attention. Their roadmap suggests they are adding some new controls to the desktop target which will hopefully reduce the need to purchase third party controls for many and is welcome.

Having used many languages and IDEs over the years (C# with Visual Studio, the Elements compiler and Xcode to name a few) I can still honestly say that Xojo is the tool I reach for when I want to get something done. I just hope that Xojo Inc continue to focus on improving the IDE experience and I'd really like to see them add more methods and classes to the framework . For example, I'd love to see more useful maths algorithms added so I don't have to keep writing them myself.