Objo Studio v26.6.4 Released

Nothing makes me happier than pushing out a great new release to our users and 26.6.4 is a good one!

Firstly, we fixed all reported bugs (23 squashed).

Secondly, we added 15 new features, some small, some pretty profound. Lets take a look at some of the important ones.

Namespaces

ObjoBasic now supports explicit namespaces using Namespace ... End Namespace. Namespaces are compile-time labels, so they organise code without creating runtime objects. The main benefit is practical: two classes, interfaces, enums, or modules can now share the same short name as long as their fully qualified names differ.

Namespace Desktop
    Class Thing
    End Class
End Namespace

Namespace Web
    Class Thing
    End Class
End Namespace

Var a As Desktop.Thing = New Desktop.Thing()
Var b As Web.Thing = New Web.Thing()

To add a class or module to a namespace, enter the namespace in the inspector for that class or module. That’s it!

ZipWriter

The existing high-level Zip API remains, but 26.6.4 adds ZipWriter for cases where archive layout matters. You can add files, folders, text, and bytes in a precise order, choose compression per entry, and safely reject duplicate or unsafe archive paths.

This is especially useful for standards-based ZIP containers such as EPUB, where entries like mimetype must be written first and uncompressed.

ZipWriter docs.

Markdown Method Descriptions

Method descriptions in Studio now support Markdown, and hover tooltips render those descriptions directly in the editor. That means descriptions can include emphasis, lists, inline code, and code blocks while signatures remain clean and readable.

Class Indexers

User-defined classes can now take part in bracket indexing syntax by implementing Operator_Subscript(). Indexers can be readable, writable, overloaded by parameter type, and can accept multiple index arguments.

Class Row
    Function Operator_Subscript(name As String) As String
        Return "value"
    End Function

    Sub Operator_Subscript(name As String, Assigns value As String)
        # Store value.
    End Sub
End Class

row["Status"] = "Open"
Print(row["Status"])

Subscript operator overloading.

Ternary If

ObjoBasic now has an expression-level conditional:

Var status As String = If(age >= 18, "Adult", "Child")

Unlike a normal function call, this short-circuits: only the selected result expression is evaluated. It is ideal for compact value selection while keeping block If...Then...Else available for more complex control flow.

You can download the new release right now. You can read the full changelog for all changes.

you’re an animal :wink:
very nice, I love the iif and markdown descriptors…

well done!

Thank you so much Garry for adding ZipWriter to Objo Studio. This makes epub creation much easier than with many other zip software.

Great work! Very well done!

Kind regards,

Chris