Objo Studio v26.6.5 Released

Objo Studio 26.6.5 is now available, and this really is a big one.

The full changelog includes 28 fixes and 18 new features / improvements, but I wanted to call out four changes in particular.

Avalonia 12

Objo Studio has moved to Avalonia 12.

This is mostly an under-the-hood change, but it matters a lot. Avalonia is the cross-platform UI framework that powers Studio itself, the visual designer, the desktop app host, and the Remote Debugger. Keeping Objo on the current Avalonia foundation gives us a stronger base for future controls, better platform behaviour, performance work, accessibility improvements, and long-term desktop support across macOS, Windows, and Linux.

That said, major framework migrations can bring bugs. This touched a lot of surface area: windowing, focus, keyboard input, menus, rendering, themes, layout, and native platform integration. I’ve tested it carefully, but if you notice any visual weirdness or behaviour that feels different in 26.6.5, please let me know in the forums.

Debugger watchpoints

Objo Studio already had conditional breakpoints, which let you pause on a specific line only when a condition is true.

26.6.5 adds watchpoints too. These let you tell the debugger to pause when an expression reaches an expected value.

That’s useful when you know something bad eventually happens, but you don’t yet know exactly where. Instead of scattering breakpoints through your code, you can watch a value and let Studio stop when it becomes interesting.

Multiline strings

ObjoBasic now supports triple-quoted multiline strings:

Var sql As String = """
  SELECT id, name
  FROM people
  WHERE active = TRUE
  """

This makes a lot of everyday code nicer to write: SQL queries, JSON, templates, help text, test data, and any other string where escaping line breaks used to get in the way.

Interpolated multiline strings are supported too:

Var message As String = $"""
  Hello {name}
  You have {count} messages.
  """

Mark your own APIs as deprecated

You can now mark your own types and members as deprecated in the IDE.

When deprecated APIs are used, Studio reports analyser warnings at the call site.

This is handy for larger projects, shared modules, and any codebase where you want to move an API forward without breaking everything immediately. You can keep the old member around, guide yourself or other developers toward the replacement, and clean things up over time.

You can download Objo Studio 26.6.5 from the usual download page. The full changelog is available too.

Also: first class support for Sql Server, which I’m eager to test on both native and Azure DB, on Windows Server.

How did I forget that? :laughing:

Yep, I’ve also added first-class support for Microsoft SQL Server and Azure SQL.

SQLServerDatabase docs.

I’ve add a SQLServerDatabase class alongside the existing SQLite, MySQL, and PostgreSQL database classes. It implements the shared Database interface, so the familiar connection, query, prepared statement, transaction, and table metadata APIs work the same way.

That means apps that live in the Microsoft database world can now talk directly to SQL Server or Azure SQL from ObjoBasic, without falling back to ODBC driver or DSN setup for the common SQL Server case.

We’ve talked about the watchpoints “on value” in another topic just recently and now you have it. awesome! Very good work!

Using the underlaying functionality of Dotnet makes everything possible- I am waiting how this will compete with XoJo. Looking on it it wins against it from scratch. Cause it is more professional in this early state than XoJo ever was in my opinion. Don’tstop this work and search Partners for the case that one day you can’t work on it anymore.

As mentioned here:

until Avalonia fixes their Metal implementation, is there a way in Objo to select OpenGL?

I’ve checked this properly now.

Objo Studio currently follows Avalonia’s normal macOS renderer selection. On my M4 Max MacBook Pro running macOS Tahoe 26.5.1, Studio is using Metal:

So Studio is not quietly running in OpenGL or software mode here. I’m also not seeing the resize jitter in normal Studio use on this machine, although I know the Avalonia issue exists and can be reproduced in some Avalonia 12 apps/content.

At the moment Objo does not expose a user-facing “use OpenGL” switch for Studio or for Objo-built desktop apps. I’m reluctant to force OpenGL globally because OpenGL is deprecated on macOS, and this appears to be a transient live-resize rendering artefact rather than a correctness issue.

That said, I’m watching the Avalonia issue. If Objo users start seeing this in real projects rather than only synthetic resize tests, I’ll add an opt-in macOS fallback, probably as a launch option or setting, rather than changing everyone to OpenGL by default.