Our Blog,   Our Claris FileMaker Blog,   Our Xojo Blog,   Archive (older)     Follow us on Twitter, Xing, LinkedIn or Facebook.

MBS Xojo Plugins, version 22.5pr1

New in this prerelease of the 22.5 plugins: Download: monkeybreadsoftware.com/xojo/download/plugin/Prerelease/ or from DropBox.
Or ask us to be added to our shared DropBox folder.

BluetoothLE Watcher on Windows

For next version 22.5 of MBS Xojo WinFrameworks Plugin, we upgrade our WindowsBluetoothLEAdvertisementWatcherMBS class and improve the example:

With our new BluetoothLE Device example file, we use the watcher to look for a heart rate device, query the services and when we find the heart rate service try to read the values.

News from the MBS Xojo Plugins Version 22.4

In this article I want to introduce you the new functionalities from the MBS Xojo Plugins in version 22.4.


In our new release we have an innovation for the users of XML. You get with the new release the possibility not only to use the on-board functionalities to XML of XOJO, but can use from now on also the functionalities from the new MBS Xojo XML Plugin. We provide you for the moment 30 different classes to help you work with XML. For example, you can validate XML texts. You will be able to compare XML texts and even single nodes. With a good performance you can write, read and change data. Of course, this plugin offers a lot more than that, so feel free to try it out.


In the last release we introduced you to the new functionalities of MongoDB. In this release we have expanded them a bit more. The Rename method from the class MongoCollectionMBS is one that some of you may have been waiting for, because you can rename an existing collection and database. With the InsertMany methods from the MongoCollectionMBS class we can add multiple documents to a collection at the same time. To do this, we specify a JSON array or an Array with JSON objects, with the information, in the parameters. Result sets in a search over a MongoDB database can be stepped through with a cursor. We also have some new methods for the cursor. The methode ErrorDocument from the MongoCursorMBS class checks if an error occurred while integrating the cursor. If an error occurred server-side, the ReplyJSON is set to the server’s reply document with information about the error. The FindIndexes methode from the MongoCollectionMBS class fetches a cursor containing documents, each corresponding to an index on this collection. Some MongoDB commands return a cursor document. With the method NewCursorFromCommandReply from the MongoClientMBS class you create a cursor object from the response of such a command.


Omegabundle for Xojo 2022 Developer Tools Bundle about to end

Get the top developer tools and third party components for the Xojo cross-platform development platform at a huge savings. About to end 26th September 2022

Omegabundle for Xojo 2022 is a collection of the most useful tool sets, add-ons, digital books and components for use with Xojo Inc's Xojo development environment. If purchased separately and not including any additional offers, the total cost would be over $4120. Omegabundle for Xojo 2022 costs $399.99.

Xojo is an award-winning, cross-platform development tool for the Desktop (macOS, Windows, Linux), Web, iOS (iPad/iPhone) and Raspberry Pi. With Xojo, you can create native applications by using drag-and-drop to build your user interface and then one straight-forward programming language to enable the functionality. Xojo is powerful and modern, yet easy to use and learn.

Included Products

  • AprendeXojo GuancheMOS (UPDATED). The toolkit you need for application serialization and validation. Now supports Intel and ARM processors on macOS!
  • Ohanaware App Wrapper (UPDATED). Prepare your application for the Mac App Store or Web Distribution (macOS only app)
  • DMG Canvas (Updated). Drag, drop and design your disk image's appearance and to easily and quickly create a fully assembled disk image ready to ship. (macOS only app)
  • GrafittiSuite Desktop Edition (UPDATED). 61 (up from 55 from 2021!) incredible user interface controls for Xojo that add value and improve the professional appeal of your Xojo applications.
  • XDL Library (NEW) Two new books: Xojo Algorithms Collection and Xojo OOP Collection + 22 new digital articles
  • MBS Complete Plugins for Xojo. 47 plugins that extend Xojo with capabilities you want and need to build professional, native OS applications
  • MBS SQL Plugin for Xojo. The alternative database interface to Xojo. Connect to 14 different database systems, use more without relaying on ODBC.
  • MBS SQLite Extension for Xojo. Adds significant additional functions and support of Regular Expressions in working with SQLite databases.
  • Paradigma Software Valentina Studio Pro (UPDATED). Ultimate reports designer, database administration and forms creation tool that runs on all three operating systems - Windows, macOS, Linux. Select one OS version.
  • Paradigma Software ValentinaDB ADK for Xojo (UPDATED). Embed the ultra-fast, object-relational Valentina database into your applications and deploy royalty free - Windows, macOS, Linux, including Raspberry PI! Also works with local SQLite files and as a client to Valentina Server.
  • Paradigma Software Valentina Reports ADK for Xojo (UPDATED). Generate visually rich reports as graphics, web pages or PDF from your Xojo applications on Windows, macOS, Linux including Raspberry PI! Also works with local SQLite files and as a client to Valentina Server.
  • Paradigma Software Valentina Server Unlimited (UPDATED). 4-in-1 Reports Server, Forms Server along with two database servers: one built on object-relational Valentina Database and the other on SQLite. Report and forms serving works with MySQL, PostgreSQL, MS SQL Server and the included Valentina and SQLite servers
  • xDev Magazine (UPDATED). Get back issues and a year’s subscription to xDev Magazine,  the professional's magazine for developing with Xojo.

Android progress @ Xojo

At the Xojo developer retreat, Travis presented about Android. After years of working, they are now feature complete for version 1. That means they draw a line between things to be included in a v1.0 and things to move to a later version. And those items to go into first version are now implemented. That includes a lot of framework classes, a lot of controls, a debugger and the window editors in the IDE. 50 examples are ready and that may include even one to show how to do in-app purchase using some declares.

Currently they are fixing bugs to polish for a release, but that won't be for the upcoming version 2022r3. Even as it is in pre-release testing, some people already built applications and put them into the Play Store. If you like to try the version, please join tester group for Android and try it.

The initial release doesn't include plugin support. That also means internal plugins from Xojo will be missing on Android: XML, SSL Sockets, Shell, XojoScript, RegE and Crypto. While Xojo Inc. could reimplement those classes in Kotlin, I would enjoy if they build the code to bridge plugin code. That is a big project as they would need a framework library in C to provide the SDK functions. And then generate the wrapper code for plugin classes to call from Kotlin code to the C function and convert parameters and return values.

If such a bridge is no feasible, there may be the opportunity for someone else to start an Android code collection, like a declare library. I can't rewrite our plugins in Kotlin or pure Xojo code.

Distinct in MongoDB to find all tags from documents

Let's say you added some records into a collection for MongoDB. For example animals and they got tagged with various tags. Now you need the list of all tags to fill a popup menu. You like to avoid looping over all records to collect it yourself. The database server should do that without transferring the whole table to the client!

First let us create a few test records with our MongoCollectionMBS class:

Sub InsertDog() Dim NewRecord As New JSONItem Dim Tag As New JSONItem tag.Value("Name") = "Pet" Dim Tags As New JSONItem tags.Append tag NewRecord.Value("name") = "Dog" NewRecord.Value("tags") = tags Dim Result As String = Collection.InsertOne(NewRecord.toString) details.Text = result End Sub

MBS Xojo Plugins in version 22.4

Nickenich, Germany - (September 6th, 2022) -- MonkeyBread Software today is pleased to announce MBS Xojo Plugins 22.4 for macOS, Linux and Windows, the latest update to their product that is easily the most powerful plugin collection currently available for Xojo. MBS Xojo Plugins have been updated and now includes over 3000 classes and 80,000 documented features, and the versatile plugins have gained more new functions:

We started a new MBS Xojo XML Plugin to provide you an alternative to the built-in XML classes in Xojo. The plugin is based on the xerces-c library and over time we will add more features. For now we have already 30 classes to cover the basic XML handling. The plugin supports unicode, handles memory management for you and uses exceptions to report errors. Performance is quite good and we have some special functions like ElementsByTagName() to speed up common operations.

The XMLParserMBS class can customize the parsing process with configuration options. You can filter the nodes while you parse and configure which nodes to ignore. When serializing the XML, you can apply filter and various options to generate the XML as you need.

With XMLTreeWalkerMBS and XMLNodeIteratorMBS we have two powerful classes to walk over a XML tree and visit nodes. We support for-each loops in Xojo with our various iterate classes. You can loop over the child elements in an element and over the attributes and child nodes in a node.

For our MongoDB plugin we got a few new features: We can now run InsertMany method to insert an array of documents or a JSON Array with documents and be quicker than running InsertOne for ewach of them. We added some new methods for cursor to query the error document and to build a cursor from a reply. We added Rename function for MongoCollectionMBS and provide a FindIndexes function to lookup what indexes exist.

We support iOS better with implementing DirectorySizeMBS and DNSServiceMetaQueryMBS classes and CopyPicture method in NSImageMBS for iOS.

Our ScintillaControlMBS got a border for Windows and a new Prepare event to set a few properties before the control is created.

For Windows we improved our ARM support. In SerialPortMBS class the WinRTSControl property allows you to control RTS line state directly.

The CURLSMBS class got new properties to control mime option flags, a new setting for the maximum life time connection and a property for the SHA256 hash of a SSH Host public key. We enabled zstd support for CURL in case a server uses that for compression.

For MacOS we added new events to NSPopoverMBS class to handle detached popovers better. In NSFontMBS class we added monospace system font query functions.

Finally we updated our Chromium based classes to a newer Chromium version, CURL to version 7.85.0, DynaPDF to and SQLite to version 3.39.2.

See release notes for a complete list of changes.

MBS Xojo Plugins, version 22.4pr5

New in this prerelease of the 22.4 plugins:
  • Added monospacedDigitSystemFontOfSize and monospacedSystemFontOfSize functions to NSFontMBS class.
  • Added withOverlays parameter to ShowAllAnnotations method in MKMapViewMBS class.
  • Updated CURL to version 7.85.0.
  • Removed kError_CONV_FAILED constant in CURLSMBS class.
  • Renamed OptionFTPResponseTimeout property to OptionServerResponseTimeout in CURLSMBS class. (old mame stays valid, but deprecated)
  • Added zstd support for CURLSMBS class.
  • Updated DynaPDF to version
  • Changed WindowsPreviewHandlerMBS to automatically call unload for you in destructor in case you forgot.
  • Added kgfDoNotComprMetadata constant for DynaPDFMBS class.
  • Added SetRenderingIntent method for DynaPDFMBS class.
Download: monkeybreadsoftware.com/xojo/download/plugin/Prerelease/ or from DropBox.
Or ask us to be added to our shared DropBox folder.

xDev Magazine 20.5

The September/October (20.5) issue of xDev Magazine is now available. Here's a quick preview of what's inside:

Exploring Steganography, Part 2 by Eugene Dakin
Steganography -- the processing of hiding data inside a picture -- is a fun science with practical applications. In this new series, Eugene explores doing this with Xojo.

Evaluating Equations with XojoScript by Harris Ulery
Harris shows how to pass an equation to a XojoScript which processes the result and passes it back to the main app for displaying.

What's Your Workflow? by Marc Zeedar
Our survey of Xojo developers reveals tips and suggestions for your Xojo workflow.

Calling XojoScript by Marc Zeedar
Marc has always had a love/hate with AppleScript. The concept is great, but the language syntax is maddening. What would be really cool is being able to embed XojoScripts into an AppleScript... and now he's figured out how to do it!

Plus: Topics such as Xojo 2022R2, encrypted PDFs, LibXL, ODBC, and more!

PS: Included in OmegaBundle 2022.

15 years of MBS Xojo DynaPDF Plugin

About 15 years ago we started the development of our DynaPDF Plugin.

After a year of development, the plugin was released to the public on 1st Sep 2007 with MBS Plugin 7.6pr1.

This plugin has been a big success for us and provides the PDF engine to thousands of Xojo applications around the world. Based on user feedback we got a lot of functions over the years like the raster engine, PDF/A conversion and ZUGFeRD support.

Please make sure you try the plugin, make it part of your toolbox and start to enjoy all the PDF features you can add to your application.

MBS Xojo Plugins, version 22.4pr4

New in this prerelease of the 22.4 plugins: Download: monkeybreadsoftware.com/xojo/download/plugin/Prerelease/ or from DropBox.
Or ask us to be added to our shared DropBox folder.

Iterate over XML nodes

We add more iteration methods for our XML classes in the new MBS Xojo XML Plugin for our 22.4 release. You can not just loop over normal nodes, but also over attributes and elements.

In this example we do a for each loop over attributes:

Sub IterateAttributeNodes() Dim doc As New XMLDocumentMBS("<doc id=""123"" value=""test""></doc>") Dim root As XMLElementMBS = doc.DocumentElement For Each e As XMLAttributeMBS In root.IterateAttributeNodes MessageBox e.Name+": "+e.Value Next End Sub

MBS Xojo Plugins, version 22.4pr3

New in this prerelease of the 22.4 plugins:
  • Update Chromium plugin classes to newer Chromium version.
  • Added OptionMimeOptions, OptionMaxLifeTimeConnection and OptionSSHHostPublicKeySHA256 properties to CURLSMBS class.
  • Fixed LocalName property in XMLNodeMBS class.
  • Fixed crash in XMLNodeMBS destructor.
  • Optimized string handling for XML plugin.
  • Added ReferenceCount property for XMLNodeMBS class.
Download: monkeybreadsoftware.com/xojo/download/plugin/Prerelease/ or from DropBox.
Or ask us to be added to our shared DropBox folder.

XDC Developer Retreat 2022

Just one month till the XDC Developer Retreat 2022 starts in Nashville:

Xojo Developer Retreat 2022, 19th and 20th September 2022.

Please reserve the days from 18th to 21st September in your calendar. You may want to use the weekend to come to Nashville earlier to enjoy the city and then join the get-together on Sunday evening. Two days of conference follows with a special developer adventure on the second day. Yes, instead of lots of sessions in a ballroom, Dana organized something different this time. I bet you'll enjoy it! Be sure sure to stay the night on Tuesday, so you can enjoy the dinner and travel home a day later.

You can either stay in the conference hotel ($269 USD/night) or maybe better get a cheaper hotel outside and drive daily to downtown for the conference. Or maybe you like to share a room when traveling with your colleague?
Since the conference hotel allows you to cancel, it may be good to reserve a room and later rebook it or cancel, when you find a lower rate. See you there!

Pragmas in Xojo

The Xojo compiler knows a few pragmas, so let's today dive into them:


This flag is valid only within a method and defines whether the Xojo compiler will insert RuntimeBackgroundTask() calls at loop boundaries. This call checks if some time passed, about 60 yields per second at maximum. Then it does a thread switch and passes CPU time to the next waiting thread.

Older name was DisableBackgroundTasks, but that has the meaning of the parameter reversed.


This pragma seems to have no effect currently. The array function always raise exceptions.
I think in older compilers before LLVM, the array access was inlined and thus the compiler could leave away the check.
See Issue 39349.

Older name was DisableBoundsChecking, but that has the meaning of the parameter reversed. (more)

MBS Xojo Plugins, version 22.4pr2

New in this prerelease of the 22.4 plugins: Download: monkeybreadsoftware.com/xojo/download/plugin/Prerelease/ or from DropBox.
Or ask us to be added to our shared DropBox folder.

Quick encrypt or decrypt with DynaPDF

DynaPDF has a feature to quickly encrypt or decrypt a PDF with the simplified EncryptPDF and DecryptPDF functions. You need an instance of DynaPDFMBS class and then you can call those methods with the right file reference. Pass in the parameters needed like the user password (for viewing) and the owner password (to remove restriction and encryption). We provide several encryption variants, so you can pick the oldest acceptable one. In our example we use 256 bit AES. Here is an example snippet with two example methods:

Sub DecryptPDF(file as Folderitem) Dim pdf As New DynapdfMBS pdf.SetLicenseKey "Lite" // For this example you can use a Lite, Pro or Enterprise License Call pdf.DecryptPDF(File, pdf.kptOwner, "ownerpass") MsgBox "Decrypted." Catch d As DynaPDFErrorExceptionMBS MsgBox "Failed to decrypt PDF: "+d.message End Sub
Sub EncryptPDF(file as Folderitem) Dim pdf As New DynapdfMBS pdf.SetLicenseKey "Lite" // For this example you can use a Lite, Pro or Enterprise License Dim flags As Integer = pdf.krsPrint // forbit printing flags = flags Or pdf.krsCopyObj // deny copying content // userpass to just open and read // ownerpass to decrypt and remove restrictions Call pdf.EncryptPDF(File, "userpass", "ownerpass", pdf.kklAES256, flags) MsgBox "Encrypted." Catch d As DynaPDFErrorExceptionMBS MsgBox "Failed to encrypt PDF: "+d.message End Sub

Please try it, play with the various options on the restrictions. If you make a new PDF with DynaPDF, you can of course also apply the same encryption options for saving the new file. Let us know if you have questions.

Xojo August Sale

Xojo Inc. announced a sale for the next few days:

If you waited to get a Xojo license or to renew your license or to upgrade to Xojo Pro, this is your chance.

As usual, if your Xojo license is up for renewal in August or September, you can update now and enjoy a discount. If your Xojo license expired already, just get a new one. With discount this is cheaper than a regular update.

Conference tickets and add-ons are on sale, too. If you like to get one of the MBS articles there, you can use the sale price at Xojo Store or we match the price if you buy directly from us. Please contact us if you need a MBS Plugin license.

New XML Plugin for Xojo

For 20 years we used the built-in XML classes in Xojo. While they do the job basically, we had a desire for years to get something better. We now started to make an alternative implementation of XML classes based on the xerces-c project.


By implementing our own classes, we are very flexible on what we support. A lot of utility code we had in various projects to work on xml trees, can now be built-in to the plugin classes and run much faster. Be can also offer more customization on various options.

Unicode support

The new plugin should handle all the unicode details and work well with various text encodings. Usually we use UTF-8 or UTF-16, but we want it to work well with other encodings.


We use exceptions for reporting errors. The exceptions should include all details needed in the message text. As usual our plugin includes for example the index value and the ubound/count value in an OutOfBoundsException.
We like to avoid a couple of common pitfalls, so you can for example freely move nodes between documents. But please avoid recursion in your xml trees. (more)

MBS Xojo Plugins, version 22.4pr1

New in this prerelease of the 22.4 plugins: Download: monkeybreadsoftware.com/xojo/download/plugin/Prerelease/ or from DropBox.
Or ask us to be added to our shared DropBox folder.

Older blog entries:

2022-08-01 Insert record to MongoDB in Xojo
2022-07-25 Windows for ARM support
2022-07-21 August is Bug Bash Month at Xojo
2022-07-20 Combine PDFs 5.6
2022-07-20 News from the MBS Xojo Plugins Version 22.3
2022-07-19 XDC Developer Retreat 2022
2022-07-13 First OmegaBundle orders delivered
2022-07-12 MBS Xojo Plugins in version 22.3
2022-07-07 MBS Xojo Plugins, version 22.3pr7
2022-07-05 MBS Xojo Plugins, version 22.3pr6
2022-07-02 Omegabundle for Xojo 2022 Developer Tools Bundle Now Available
2022-07-01 xDev Magazine 20.4
2022-06-27 MBS Xojo Plugins, version 22.3pr5
2022-06-26 Four month Russian war in Ukraine
2022-06-22 Sending email via gmail
2022-06-18 Merge PDFs with page numbers in Xojo
2022-06-17 MBS Xojo Plugins, version 22.3pr4
2022-06-13 MBS Xojo Plugins, version 22.3pr3
2022-06-09 News from the MBS Xojo Plugins Version 22.2
2022-06-08 Multi Year Updates


Sep 2022
Aug 2022
Jul 2022
Jun 2022
May 2022
Apr 2022
Mar 2022
Feb 2022
Jan 2022
Dec 2021
Nov 2021
Oct 2021
Sep 2021
Aug 2021
Jul 2021
Jun 2021
May 2021
Apr 2021
Mar 2021
Feb 2021
Jan 2021
Dec 2020
Nov 2020
Oct 2020
Sep 2020
Aug 2020
Jul 2020
Jun 2020
May 2020
Apr 2020
Mar 2020
Feb 2020
Jan 2020
Dec 2019
Nov 2019
Oct 2019
Sep 2019
Aug 2019
Jul 2019
Jun 2019
May 2019
Apr 2019
Mar 2019
Feb 2019
Jan 2019
Dec 2018
Nov 2018
Oct 2018
Sep 2018
Aug 2018
Jul 2018
Jun 2018
May 2018
Apr 2018
Mar 2018
Feb 2018
Jan 2018
Dec 2017
Nov 2017
Oct 2017
Sep 2017
Aug 2017
Jul 2017
Jun 2017
May 2017
Apr 2017
Mar 2017
Feb 2017
Jan 2017
Dec 2016
Nov 2016
Oct 2016
Sep 2016
Aug 2016
Jul 2016
Jun 2016
May 2016
Apr 2016
Mar 2016
Feb 2016
Jan 2016
Dec 2015
Nov 2015
Oct 2015
Sep 2015
Aug 2015
Jul 2015
Jun 2015
May 2015
Apr 2015
Mar 2015
Feb 2015
Jan 2015
Dec 2014
Nov 2014
Oct 2014
Sep 2014
Aug 2014
Jul 2014
Jun 2014
May 2014
Apr 2014
Mar 2014
Feb 2014
Jan 2014
Dec 2013
Nov 2013
Oct 2013
Sep 2013
Aug 2013
Jul 2013
Jun 2013
May 2013
Apr 2013
Mar 2013
Feb 2013
Jan 2013
Dec 2012
Nov 2012
Oct 2012
Sep 2012
Aug 2012
Jul 2012
Jun 2012
May 2012
Apr 2012
Mar 2012
Feb 2012
Jan 2012
Dec 2011
Nov 2011
Oct 2011
Sep 2011
Aug 2011
Jul 2011
Jun 2011
May 2011
Apr 2011
Mar 2011
Feb 2011
Jan 2011
Dec 2010
Nov 2010
Oct 2010
Sep 2010
Aug 2010
Jul 2010
Jun 2010
May 2010
Apr 2010
Mar 2010
Feb 2010
Jan 2010
Dec 2009
Nov 2009
Oct 2009
Sep 2009
Aug 2009
Jul 2009
Apr 2009
Mar 2009
Feb 2009
Dec 2008
Nov 2008
Oct 2008
Aug 2008
May 2008
Apr 2008
Mar 2008
Feb 2008
XML: RSS Feed XML: Atom Feed