Objo Studio v26.9.2 Released

I’m very happy to announce the immediate availability of Objo Studio 26.9.2.

I feel like I always say this but this is a big release. There are 72 completed items in the release tracker, spanning new features, improvements and bug fixes. A huge amount of work has gone into Web applications, but there’s plenty here for Desktop developers too.

Download Objo Studio 26.9.2

Web applications improvements

The Web target has received a lot of attention in this release. The visual designer, browser runtime and control set have all been substantially improved, with work across controls including ListBox, Chart, ComboBox, GroupBox and many others.

Web Canvas has changed particularly significantly. Rather than trying to squeeze those changes into this release post, I’ve written a separate article about them as I think they deserve a proper explanation.

One new Web feature that is worth highlighting here are custom HTTP endpoints.

A Web project can now specify a WebRequestHandler class which receives HTTP requests that aren’t handled by the normal browser application routes. That makes it possible to implement things such as:

  • Webhooks
  • Health-check endpoints
  • OAuth callbacks
  • Lightweight JSON APIs
  • Custom HTTP responses and redirects

You can even create a service-only Web project with no default page at all. This opens up some interesting possibilities for using Objo for small web services as well as traditional browser applications.

Printing your source code

This one came directly from a request on the forum.

There’s now a new File > Print Source… command in Studio. You can print the current source item, selected items in the Navigator or an entire solution.

Studio generates a proper source listing with line numbers, syntax colouring, optional headers and footers and a contents page when appropriate. Long lines can either wrap or truncate.

You don’t have to send it to a printer either. Source listings can be exported directly to PDF. The PDF contains real vector text, so the resulting document remains selectable and searchable rather than simply being a collection of screenshots.

System Symbols come to buttons and menus

The built-in SystemSymbol library continues to spread through Studio and the Objo framework.

Desktop Button controls can now display either a Picture icon or a SystemSymbol, and the symbol can be positioned before, after, above or below the button text.

MenuItem also gains a Symbol property, with full support in the Menu Bar Designer and Studio’s generated code.

Web buttons support System Symbols too, giving Desktop and Web applications another easy way to use consistent, scalable iconography without having to create and manage image assets.

Simpler parameterised database queries

Database code has become considerably less verbose.

SelectSQL, ExecuteSQL, SelectSQLAsync and ExecuteSQLAsync can now take values directly after the SQL statement. These are safely bound in order to ? placeholders in the query.

For example:

db.ExecuteSQL("INSERT INTO people (name, age) VALUES (?, ?)", "Garry", 45)

Previously you would need to explicitly create and populate a prepared statement for cases like this.

Prepared statements are still available when you need them, but for the very common case of executing a parameterised query once, the new syntax is considerably nicer.

Better Git diffs for VCS-friendly solutions

One small thing that has irritated me for a while is how source files from VCS-friendly .objosln solutions look when viewed outside Studio.

Studio calculates indentation rather than storing it as whitespace in the editor’s source model. That’s useful internally, but it meant that the .objobasic files written to disk appeared completely left aligned when viewed in GitHub or a normal diff tool. 26.9.2 fixes that.

VCS-friendly solutions now write Studio’s calculated indentation into the .objobasic files on disk. Git diffs consequently look much more like the code you see inside Studio.

This is purely an on-disk representation. Studio removes the generated indentation when loading the source, so it doesn’t change compilation or the way the editor works. Existing solutions continue to load as before.

Applications can now initiate drag-and-drop operations

Desktop controls could already receive dragged data. They can now initiate a drag as well.

The new DragItem class lets an application start a native drag operation containing text or custom application data. DragData has also gained HasData and GetData methods for retrieving those custom values at the destination.

That means you can now build proper drag-and-drop workflows between controls rather than only accepting content dragged in from elsewhere.

Lots of smaller improvements

There are plenty of other awesome little changes in 26.9.2 too.

Integer.Zero, Double.Zero and String.Empty have been added for consistency with other value types. Window.Show() can now optionally take a display index to make opening a window on a particular monitor much easier. Array.Clear() has been added as the preferred way to empty an array, and Dictionary and HashSet can now optionally treat String keys as case-sensitive.

Studio also does a better job of showing the currently selected search scope, and there has been a large amount of polish and bug fixing throughout the Web designer and browser controls.

As always, the complete list is available in the changelog.

Download Objo Studio 26.9.2

Enjoy!

Thank you, Garry, for all your hard work on a tool that is helping us gain an advantage in the activity-book niche.

We have already taken Objo Studio much further than I originally expected. At first, the AI advised me not to use Objo because it was still young and did not yet have a large user base or ecosystem behind it.

However, I was stubborn and persistent. I believed it could be done in Objo—and, as you can see from MazeMaker, it certainly can be done.

MazeMaker started as a project created almost entirely by AI. The AI generated the complete Objo project; I only had to open it, run it and test it. I was genuinely surprised that AI was already capable of producing a working Objo project.

Nowadays, it is no longer an AI-only project. I am becoming increasingly involved in the design and development decisions. Nevertheless, when the AI makes changes, the existing code that already works is generally left untouched. This makes the combination of Objo Studio, AI and human judgement surprisingly effective.

Several additions in version 26.9.2 are particularly important for our future projects.

The simplified parameterised database queries are perhaps the most valuable improvement for us. Our planned bookkeeping application will rely heavily on a database, so being able to write shorter and cleaner SelectSQL and ExecuteSQL statements—while still binding values safely—is a genuine improvement. It reduces unnecessary code and makes database routines easier to read and maintain.

The improved VCS-friendly project format is also very useful for AI-assisted development. Clear indentation in the files stored on disk makes source-code comparisons much easier to understand. This will help us see precisely what has changed and make it safer to modify increasingly large projects.

Printing source code—or exporting it as a searchable PDF with line numbers, syntax colouring and a contents page—will be valuable for documentation, reviewing code and keeping proper project records.

System Symbols for buttons and menus will help us create cleaner and more consistent interfaces without having to produce and manage a separate image for every icon. The new drag-and-drop support also creates interesting possibilities for future activity-book tools, where users may eventually be able to rearrange pages, puzzles or design elements visually.

The continuing improvements to Web applications are important as well. Even though our current applications are mainly intended for the desktop, Objo now gives us the option to develop browser-based tools and lightweight web services later. That makes Objo far more than a solution for one project or one platform.

In a remarkably short time, Objo Studio has developed into a mature application-development tool. It is already becoming a serious competitor to Xojo, despite Xojo having been available for decades.

I am very happy that I chose Objo Studio. It makes application development clean, approachable and fast.

I can confidently recommend Objo as a reliable and rapidly growing application-development tool. Adopting a young tool early always carries some risk. However, when that tool succeeds, early adopters are already moving forward while others are still standing at the roadside, waiting to see what happens.

I liked what I saw when I first discovered Objo, I like what I see today, and I am convinced that you made the right decision when you created it.

By the way, our bookkeeping application—which was originally going to be written in PureBasic—is now planned for Objo Studio.

For anyone who still has doubts about Objo: you do not choose a development tool for a bookkeeping system unless you trust it. Such an application is a long-term project on which a company will rely heavily. I am convinced that we can build it successfully in Objo.

Kind regards,

Chris

It was same for me. I remember when I laid my hands on Inside Macintosh books almost 40 years ago: while reading it and working in Pascal to build something on a Mac, I often thought by reading explanation of one Procedure or Function how it would be nice to have some other, and then on next or few pages forward there was it. I did have same feeling that whoever built the tool I am about to use well thought about everything few times in last 40 years, I had it while researching Objo Studio too.

This weekend I will also start big project, kind of membership management software I wanted to build using 4D, but never got to do it, then 4D changed the licensing for standalone applications (they are actually asking for end users to pay 20 EUR/GBP/USD per month to them while they use software you built using 4D), so I was looking for another solution, and Objo is the one I will use. I think it is mature enough (one could argue it was mature enough from the beginning) and I have trust in how Garry is handling everything around it.

Thank you so much both for the lovely words of support. I really appreciate you taking a leap of faith with Objo. I am working as hard as I can to make it a great tool to build with. It’s not perfect but I hope people think I have good taste for a development tool and that I am striving to fix issues as quickly as I can.

Hello Madamov,

Very good decision and just go for it. Along the way when you experience a problem use the Help system.

When the help topic is long, or not clear to me; I copy and paste it in ChatGPT and ask it for a solution. Mostly, I receive what I am asking for.

You can also ask ChatGPT to convert your original application to Objo, but you have to check and report the bugs and errors you find.

You can also create a prompt (or prompts) in ChatGPT. Describe in fine detail what you want and then tell ChatGPT to create the Objo application project for you. You can download and open that file in Objo. Then you run it and see where it goes wrong. You correct the errors and things which go wrong.

Printing the full source code of your application will help you fixing errors. Print it to pdf and then import it into ChatGPT. Then ChatGPT will tell you where it goes wrong and how to fix.77.

Kind regards,

Chris

Just my two cents:

Objо appeared at just the right time for me.

I lost faith in Xojo for many reasons, even if I hadn’t read the threads in this forum.

Main reason:

I finally switched my workstations and notebooks fully from Windows to Linux this year.
My servers have been running Proxmox VE and Debian for years now.

I wonder if anyone has ever worked with Xojo on Linux, because I am experiencing spectacular crashes of the IDE, starting with Xojo just quitting silently [even gdb gets nothing], and it even managed to freeze the whole system while copying controls from one project to another. Editing old projects is not possible if controls need to be changed.

There are many other reasons, too. But they have already been mentioned here, so I won’t bore you with repeats.

So I tested Objo with new projects and I’m happy.

The timing was perfect for me as well: This month I would have had to renew Xojo and many plugins, and my finger hovered over the “buy” button more than once.

Then I decided not to. Why should I?
Conversion of essential classes and so on is progressing really fast, and this way I have to update some classes I haven’t touched for 10+ years, getting rid of a lot of overhead.

Kind regards,
Rolf