I’m very happy to announce the immediate availability of Objo Studio 26.10.1.
There are more than 70 completed items in the release tracker this time, spanning new features, improvements and fixes across the IDE, compiler, desktop runtime and Web. But the headline is easy to pick: the Plugin SDK is here.
The Plugin SDK is here
Plugins have been the number one requested feature since Objo Studio launched, and 26.10.1 delivers them.
The Plugin SDK gives developers a supported way to bring C#, .NET and native libraries into Objo applications. An author writes a C# wrapper - it might contain the implementation itself, wrap an existing .NET library, or sit in front of a native one - and the SDK packages it, its API description and its runtime dependencies into a single .objopackage file.
The plugin’s API appears in Objo as namespaced classes, methods, properties, enumerations and events, with compile-time checking, autocomplete and signature help. Using a finished plugin requires no C# knowledge: install it into Studio’s new Plugin Library, select it for your project and write ordinary Objo code. Built applications carry their plugins with them, so the people using them never have to install anything.
I’ve dedicated a separate article to the SDK authoring, packaging, version management and the worked examples that ship with it: The Objo Plugin SDK is here.
A more capable Web designer
The Web page designer catches up with its desktop counterpart.
Layout controls now live in a centred toolbar beneath the Designer, Code and Hierarchy selector, offering Light and Dark previews, Compact, Medium and Wide viewports, live grid measurements and layout actions. New layout tools let you fill a control’s width, lock controls against accidental edits and arrange keyboard order visually.
Dragging or resizing a control now shows a live readout in grid terms while the gesture is still in progress, so you can position things precisely instead of dropping first and checking the Inspector afterwards.
Controls can also be copied and pasted between pages, projects and Studio sessions, and duplicating a control now brings its event handlers along.
Sound arrives on the Web
Web projects gain an AudioPlayer component for sound effects, narration, alarms and background tracks. Each visitor’s session owns its players and the browser does the playing: Play(), Pause(), seeking, Volume and Loop are all there, along with a PlaybackError event if the browser refuses. It plays bundled project resources (MP3, WAV, OGG and M4A) served from your application’s own origin.
Studio can now preview media, too. Select a sound resource and the Inspector offers play/pause, stop, seeking and a volume control. Image assets gain a larger viewer with zoom, actual-size and fit-to-view modes, a transparency checkerboard, and a choice of scale variants.
In the language and standard library
The standard library gains a built-in Compression module for in-memory compression and decompression of MemoryBlock data in three interoperable stream formats: zlib, raw DEFLATE and gzip.
A tidier Inspector
Sections in the Desktop and Web inspectors can now be collapsed, so the properties you actually use take precedence. Colour selection is smarter as well: picking a colour for a control without one set starts from transparent rather than a guess, and default colours can be restored directly from the Inspector.
And there’s more
Window.FocusedControlreturns the control that currently has focus.- The Calendar control’s Week and Day views now show more than two all-day events per day.
- Web application sessions can read the query parameters from the URL a visitor first arrived on.
- The AI Assistant keeps its code-editing tools available on follow-up prompts.
Fixes worth mentioning
Printing and PDFs received particular attention: printouts are no longer fuzzy, PrintJob PDFs and printouts no longer swap red and blue on macOS, and SVG pictures no longer enlarge and displace subsequent text in PDFs and printouts.
Elsewhere in the graphics layer, DrawPicture now scales the complete image on HiDPI displays instead of cropping it, and temporary Pictures no longer leak memory during repeated drawing.
In the compiler, Task(Of T).Result is now typed as T rather than Object, and extension method overloads dispatch to the correct signature. On the desktop, Window.SetBounds no longer causes jitter while moving and resizing, and Canvas Paint no longer fires after its window has closed. On the Web, a ListBox now shows the first row added after opening, and Chart legends no longer stay hidden when a chart has a single series.
The editor and visual designers picked up a long list of smaller fixes, including autocomplete for comma-separated variable declarations, Edit > Duplicate for selected source files in the Solution Navigator, Edit > Select All in the Windows desktop designer, deleted menu items no longer leaving their event handlers behind, the macOS menu bar staying available in settings windows and dialogs, and choosing a Window background in the Inspector actually applying it. An application’s TCPServer also no longer keeps its port bound after you stop a run from Studio.
As always, the complete list is available in the changelog.
Download Objo Studio 26.10.1, try the Plugin SDK samples, and let me know what you’re building on the forums.
Thank you to everyone who has kept asking for plugins and describing what they’d let you build - this release is for you :).