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

20 Years Monkeybread Software Party postponed

As you may know we celebrated 20 years of Monkeybread Software in April 2020. Sadly the party had to be cancelled due to the Covid-19 pandemic.

We moved the date to 2021 and it's now six months till that date. But as the pandemic is getting even bigger over the winter, we don't expect anyone to want a party in April 2021. As airplane travel is limited and most clients invited live outside of Germany, travel may be impossible. We talked to the manager of the venue and decided to postpone the party date to somewhere in the future. We hope this will be before we celebrate 25 years! But for international travel, we may have to decide on a date at least six months in advance.

One thing you should know is that a business event would have to define a hygiene concept and make sure the planned measures would be enforced. But a party with 1.5 meter distance between guests, no hugs and touching, no buffet and wearing masks all day doesn't sound very pleasant. If anything would happen, we would face serious trouble including 4 to 5 digit penalties.

Let's wait until the situation improves, a hygiene concept is no longer needed, flights between Europe and America run normally and masks are no longer are mandatory.

Please stay safe and healthy!

MBS Xojo Plugins, version 20.5pr5

New in this prerelease of the 20.5 plugins:
  • Fixed a bug in ChartDirector with a failed assertion on quitting the app on Windows.
  • Fixed target flags for newer plugin SDK.
  • Fixed problem in DynaPDFMBS class where we set erroneously a default font for you (since v20.3).
Download: monkeybreadsoftware.com/xojo/download/plugin/Prerelease/.
Or ask us to be added to our shared Dropbox folder.

MBS FileMaker Plugin, version 10.5pr5

New in this prerelease of version 10.5 of the MBS FileMaker Plugin: Download at monkeybreadsoftware.com/filemaker/files/Prerelease/ or ask for being added to the dropbox shared folder.

MBS Xojo Plugins, version 20.5pr4

New in this prerelease of the 20.5 plugins:
  • Updated to newer plugin SDK.
  • Deprecated CFXMLParserMBS, CFXMLNodeMBS and related classes.
  • Updated LibXL to version 3.9.2.
  • Added SCPreferencesMBS.Available function.
  • Added AllFontsEx function for WindowsFontFamilyMBS class.
  • Changed SQL Plugin to better work together with Actual Tech SQL Server ODBC Drivers.
  • Updated DynaPDF to version
Download: monkeybreadsoftware.com/xojo/download/plugin/Prerelease/.
Or ask us to be added to our shared Dropbox folder.

MBS FileMaker Plugin, version 10.5pr4

New in this prerelease of version 10.5 of the MBS FileMaker Plugin:
  • Add a zoom button for inspector palette to scale content to 125%.
  • Updated LibXL to version 3.9.2.
  • Added Matrix.CSVSplit function.
  • Changed SQL functions to better work together with Actual Tech SQL Server ODBC Drivers.
  • Added SystemInfo.CPULoad function.
  • Updated DynaPDF to version
Download at monkeybreadsoftware.com/filemaker/files/Prerelease/ or ask for being added to the dropbox shared folder.

14 years of Xojo versions supported

Did you know you can still use latest MBS Plugins in the ancient REALbasic 2006r4, the version that introduced 64-bit integer data types?

Our plugins can be used with REALbasic, Real Studio and Xojo for over a decade of years.
See Xojo versions supported

Most customers are on the latest versions, but some have to stay on older versions, e.g. for Web 1 API or older GDI drawing on Windows.

So whatever Xojo version you use, you can always relay on recent plugins to get the latest new classes and bug fixes available for your development.

Please do not hesitate to contact us in case you have questions.

16 years of FileMaker versions supported

Did you know the MBS Plugin can run on all FileMaker versions from 7 to 19.1.2?

As of today the current 32-bit Windows version can load in ancient FileMaker Pro 7. We don't expect clients to use that, but we know that some still have 32-bit Windows and use FileMaker Pro 18 there to connect to FileMaker 18 and 19 servers.

For macOS we support currently macOS 10.9 and newer. If you need plugins folder older macOS versions or 32-bit FileMaker Pro, please let us know.

And of course we work hard to get our plugin ready for the future. MacOS Big Sur and Apple Silicon are coming sooner than later and we may need to adjust for those.

MBS Xojo Plugins, version 20.5pr3

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

MBS FileMaker Plugin, version 10.5pr3

New in this prerelease of version 10.5 of the MBS FileMaker Plugin:
  • Updated DynaPDF to version Includes web links for DynaPDF.WriteFText.
  • Fixed printer name matching for Printer.SetDefaultPrinter function.
  • Changed our Database Design Dialog enhancements to hide if the underlaying SQL queries fail.
  • Changed ScriptID display in Script Workspace to hide column if we fail to query script names list.
Download at monkeybreadsoftware.com/filemaker/files/Prerelease/ or ask for being added to the dropbox shared folder.

SSH Terminal example for Xojo

For next pre-release we upgrade our MBS Xojo Network Plugin with new DataAvailable event for SSH2ChannelMBS class. This allows to easier use the SSH connection and react event based on incoming data. And we used the chance to build a new example for a GUI based SSH Terminal application example:

Like the TCPSockets in Xojo, the trick is a timer running in the background to check regularly for new data. We start it when you call Execute method and then the timer checks for new data. If you don't use the DataAvailable event, we disable the timer of course, so you can just read yourself.

Originally we started the SSH classes to solve the problem, that normal SSH command line tool doesn't accept password as parameter or via pipe input. With our SSH2SessionMBS class you can provide password, use keyboard interactive password passing or private key file. The last one is the most secure of course.

Will come later this week with 20.5pr3. Please do not hesitate to contact us if you have questions.

DynaPDF WriteFText with links inside

For the next pre-release we include the new DynaPDF library in version The WriteFText function can now create links within the text:

  • to a web site
  • to a named destination within the same PDF.
  • to a named destination within another PDF document

You include \LK[] command in the text as command in your text and then specify the website. Within the brackets you specify 4 to 5 parameters:

  • IsNamedDest (false or 0, true or 1)
  • IsExternalLink (false or 0, true or 1)
  • OpenInNewWindow (false or 0, true or 1)
  • URL or name of a named destination (see DynaPDF.CreateNamedDest())
  • PDF file in which the named destination is located

As you see you can specify booleans either as true/false or 1/0. Whitespace before/after is ignored. To give a few examples:

  • \LK[false, TRUE, false, https://www.dynaforms.com]Test\EK#
  • \LK[0,1,0,https://www.dynaforms.com]Test\EK#
  • \LK[true, true, true, NameOfADestination, test.pdf]Test\EK#
  • \LK[true, true, true, DestName, file name with spaces.pdf ]Test\EK#

You may want to use DynaPDF.SetLinkHighlightMode function before calling DynaPDF.WriteFText to set the highlight mode for clicking the link. You can have a border around the link defined with DynaPDF.SetLineWidth or DynaPDF.SetStrokeColor functions.

It may be good to combine this link feature with underline \ul# and then switch color with \FC[] and the right color. For blue, we use 16711680, which is 255 * 256 * 256 as returned by DynaPDF.RGB funtion:

\FC[16711680]\ul#\LK[false, TRUE, false, https://www.dynaforms.com]Test\EK#\ul#\FC[0]

Looks like this: Test. As you see we pick blue color, underline and the text with link inside. But on the end we turn underline off and set text color to black (0).

In FileMaker use this with DynaPDF.WriteFText or DynaPDF.WriteFTextEx functions. For DynaPDF.WriteStyledText, this won't work as we escape the backslash. So use a placeholder like "$link$", call DynaPDF.ConvertStyledText to convert text and then replace the placeholder with the command above.

In Xojo use this with WriteFText and WriteFTextEx functions in DynaPDFMBS class. If you like to use styled text from TextArea control, please use ConvertStyledText function to get the text converted for WriteFText. Then you can add links after that and before you pass text to WriteFText funtions.

Toolbar Security in FileMaker

Everyone developing a FileMaker solution for macOS should get the MBS FileMaker Plugin and configure the toolbar contextual menu with our Window.ConfigureToolbarMenu function:

As you see, you can configure the toolbar menu to remove the whole menu (mode 1) or hide only the entries to show/hide/configure.
For mode 1 we skipped the screenshot as simply no menu shows up.

If the user is allowed to configure the menu bar, he can enable commands you may have disabled via custom menus and work around your security concept. Like if you disable delete, import, export or print buttons and the user configures the toolbar to restore it.

MBS Xojo Plugins, version 20.5pr2

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

MBS FileMaker Plugin, version 10.5pr2

New in this prerelease of version 10.5 of the MBS FileMaker Plugin: Download at monkeybreadsoftware.com/filemaker/files/Prerelease/ or ask for being added to the dropbox shared folder.

Variant Helper functions in MBS Xojo Plugins

Over time we collected a few functions in our plugins to help with variants. Beside the internal routines to convert from/to various classes like SAValue, NSObject, CFObject, PROPVARIANT and VARAINT and Xojo variants, we got a lot of useful helps for your daily coding.


We often encounter variants containing arrays and like to assign them to a local variable in Xojo. But you can't just assign an array inside a variant to an array of variant in Xojo. This raises a TypeMismatchException without explanation message. See Feedback case 24167.
Our GetVariantArrayMBS function checks whether the variant contains an array of type object. If so, we return it as an array of variant and you can use it.


When you have a variant of some type of array, you have no way in Xojo to know the upper bound easily (see Feedback case 31799). You would have to query the type of array, then assign to a matching local variable, handle over 20 types for that then know the upper bound. Our GetVariantArrayUboundMBS function makes this easier as it works for all array types.


The GetVariantArrayValueMBS function allows you to query an array values independent of the type of array as variant. No need to query type and assign to local variable, risking a TypeMismatchException. You simply pass index, we lookup type of array and carefully check which variant value to return. As our plugin knows the upper bound, we can do bounds checking and raise an OutOfBoundsException if needed and include a message text of course.

The functions GetVariantArrayValueMBS and GetVariantArrayUboundMBS allow us to look into all arrays in our Web Starter Kit, where we have a memory browser feature.


Need to set a value in an array? You can use SetVariantArrayValueMBS function to set a value in any type of array universally.


The GetVariantAsDictionaryArrayMBS function is relatively new in one of the last releases. Our code to convert JSON to Xojo objects uses dictionary arrays, but how to cast them correctly? Well, in Xojo you have no way to check whether an array is of type object/variant and then check whether all items inside are Dictionary (or nil). Our plugin function does exactly that and helps to process easily arrays of Dictionary stored in variant.
We put in some safe guards, so it will raise an exception if something isn't as expected. Feedback case 61541.


We just added this function to expose our way to know in the plugin, whether a variant contains an unsigned integer. The built-in VarType() function as well as variant.type property will return 2 for both Int32 and UInt32 and 3 for both Int64 and UInt64. Our GetVariantTypeMBS function returns 102 for UInt32 and 103 for UInt64. Adding 100 to the constant value seems to be the easiest for now. There is a feature request for Xojo (Feedback case 36888) to add their own constants and use them everywhere. In case that gets implemented, we could change our functions to return the new values. So be sure you define yourself a kVariantTypeUInt32 = 102 and kVariantTypeUInt64 = 103 constant, so you have one place in future to adjust those values if needed.

The new GetVariantTypeMBS function is coming for version 20.5pr2 of our plugins together with better UInt32/UInt64 variant handling in a dozen classes.

Please do not hesitate to contact us with questions or if you have ideas for new functionality!

MBS Xojo Plugins, version 20.5pr1

New in this prerelease of the 20.5 plugins:
  • Added CopyColumn method for XLSheetMBS class.
  • Added CubeSQLLastInsertID to SQLDatabaseMBS and SQLConnectionMBS classes.
  • Added imageWithSystemSymbolName method to NSImageMBS class to get SF Symbols.
  • Added phoneticOrganizationName property for CNContactMBS class and phoneticOrganizationName property for CNMutableContactMBS class.
  • Added predicateForContactsMatchingEmailAddress and predicateForContactsMatchingPhoneNumber methods for CNContactMBS class.
  • Added WindowsML classes to do machine learning on Windows 10: see WinLearningModelMBS class
  • Changed setappearance, appearance and effectiveAppearance methods in NSAppearanceMBS class to accept application or NSApplicationMBS objects.
  • Fixed an issue with plugin trying to show dialog in web app.
  • Fixed exception raised by AllFetchKeys function in CNContactStoreMBS class.
  • Fixed loading of UserNotifications framework.
  • Updated DynaPDF to version
  • Updated OpenSSL to version 1.1.1h.
  • Updated SQLAPI to 5.1.2.
  • Updated to Xcode 11.7.
Download: monkeybreadsoftware.com/xojo/download/plugin/Prerelease/.
Or ask us to be added to our shared Dropbox folder.

MBS FileMaker Plugin, version 10.5pr1

New in this prerelease of version 10.5 of the MBS FileMaker Plugin: Download at monkeybreadsoftware.com/filemaker/files/Prerelease/ or ask for being added to the dropbox shared folder.

Embrace JSON

With the next MBS FileMaker Plugin release, we will embrace JSON functions for our FileMaker plugin. As more developers now learn JSON, we can now return you more data as JSON. Instead of making dozens of calls to query all information about a field in a PDF document, you may just want to call DynaPDF.GetFieldsAsJSON and get details for all fields in one chunk and then pick what you need. On the way we made similar functions for annotations, bookmarks, color spaces, doc information, embedded files, fields, fonts and system font information:

As the new function barcode function for DynaPDF came along, we pass there all parameters via JSON. Check DynaPDF.InsertBarcode function to insert a barcode in the current open page. We provide the DynaPDF.GetDefaultBarcodeParameters function to get default parameters, where you can just take that JSON and then make changes, before inserting it.

For listing files, we add a Files.ListAsJSON function to return not just the file names, but more information as an array of JSON objects. You can have file name, size, directory and visible flags included. If requested, we also include in creation, modification and access time stamps. By using JSON, we can later add more entries as needed.

When you use LDAP functions, you can get result as JSON block with LDAP.JSON function. You can add or modify records with LDAP.AddJSON or LDAP.ModifyJSON functions.

Our Archive functions can return JSON for file listing with Archive.FileList and full details with Archive.Content function.

For SQL functions, you can also use JSON to query what's currently in the record, in parameters or all records. You can also set parameters via JSON, e.g. to batch create records with an INSERT statement.

Finally for CURL you can use CURL.GetHeaderAsJSON function to query the headers of a HTTP Request as JSON object. As always, this allows us to pass you multiple items in one plugin call and then allow you to process the entries.

Let us know if you have questions or additional function ideas.

Xojo 2020r1.1

Xojo Inc. dropped an update for Xojo 2020r1: Download and Release Notes. It improves the web target with 32 bug fixes, 5 changes and 6 new things. This fixes the most urgent things in the Web 2 framework and is certainly welcome to get quick fixes there. Most welcome are Pressed events for WebLabel, WebImageViewer and WebCanvas. We hope in future to have an universal Pressed event for all controls, which carries additional parameters like modifier keys.

For desktop projects, you find a bug fix for the HTMLViewer issue Bob talked about. A text conversion bug was fixed, so we may encounter failed assertion in REALstring.cpp less frequent. Still we prefer those being exceptions and not assertions as we want to get a stack trace and show our bug reporter dialog. The fixes for Double.IsInfinite and Double.IsNotANumber make you wonder whether this functions have been tested at all by anyone before releasing. United tests may be a good for such basic functions! HTMLViewer on macOS can now pass floating values and the Linux IDE should now show the help even if some webkit library is missing.

In general the update is very welcome. Kudos for Xojo Inc. to do a .1 release and pushing the fixes to us without letting us wait months for the next bigger release.

As of today we have no idea what may come in r2 this year as Xojo Inc. hasn't announced anything in this regard. We do hope for a more bug fix orientated release. Web 2.0 and API 2.0 may have enough issues to keep engineers busy. Add a dozen bug fixes for long standing issues and we would be happy. As Apple is launching Apple Silicon soon, support for that target should be prioritized, so Xojo is ready and developers like us have a chance to test Xojo projects and our plugin functionality before Apple ships the hardware to customers. We already compiled 20.4 release for macOS with ARM 64-bit to make sure things do compile.

Playing with Machine Learning on Windows

We have started to look on the Windows Learning APIs to implement some functions for our plugins. Since 2017 we have CoreML functions for macOS. FileMaker 19 now ships similar functions built-in, but we think the plugin can still do more. As we are now using newer Visual Studio 2019, we can finally also check the Windows Learning functions:

You can use ONNX Models with the classes, so check the Microsoft website on how to get models. This mainly points to the ONNX Model Zoo, which has some interesting models available.

We started by porting the desktop SqueezeNetObjectDetection example from the Windows-Machine-Learning repository. You may want to download the SqueezeNet.onnx file from models folder and the kitten_224.png file from the media folder.

In Xojo you can use WinLearningModelMBS class to load a model with the Load function. Then query details and the input/output features to learn what the model does. Once you want to use the model, create WinLearningModelSessionMBS and WinLearningModelBindingMBS objects. The last one is used to assign values to the input and output elements. Then you Evaluate the model and get a WinLearningModelEvaluationResultMBS object and there you query the result values.

For FileMaker we embrace JSON and use it to pass values for the new WindowsML functions. Use WindowsML.Open to load the model and query all information about it with WindowsML.Description function. Use bind functions like WindowsML.BindImageFile to assign input image, run the model with WindowsML.Evaluate function and then you get a result as JSON. You may use our JSON functions to work on the result and show it to the user.

A difference between the macOS/iOS implementation by Apple and the one by Microsoft is the missing of labels for the latter. For Windows you get a Labels.txt file with the list of what index in the result points to what label they mean. Our example code will show how to handle this.

Those functions and new classes are coming for next pre-release versions in October 2020. We may get a good start set and may add more as needed later. Especially as we learn what other models may need as input and output features.

Older blog entries:

2020-09-23 FileMaker iOS SDK in Version 19 and MBS Plugin
2020-09-22 What is new in the MBS FileMaker Plugin Version 10.4
2020-09-22 News from the MBS Xojo Plugins Version 20.4
2020-09-21 Connect to Claris FileMaker Server from Xojo via Data API
2020-09-21 Seven months till XDC 2021 in London
2020-09-16 Version Tracking in FileMaker with help of MBS Plugin
2020-09-15 MBS FileMaker Plugin 10.4 - More than 6300 Functions In One Plugin
2020-09-15 MonkeyBread Software Releases the MBS Xojo Plugins in version 20.4
2020-09-15 Neues MBS FileMaker Plugin 10.4
2020-09-15 Tip fo the day: Print to PDF for WebView
2020-09-14 Two weeks with Xojo 2020r1
2020-09-13 FileMaker Magazin - MBS Artikel
2020-09-11 MBS Xojo Examples Projects stay with Xojo 2019
2020-09-11 MBS Xojo Plugins, version 20.4pr9
2020-09-11 MBS FileMaker Plugin, version 10.4pr9
2020-09-09 14 years since MBS FileMaker Plugin version 1.0
2020-09-07 FileMaker Stammtisch in Wien am 10. September 2020
2020-09-04 MBS Xojo Plugins, version 20.4pr8
2020-09-04 MBS FileMaker Plugin, version 10.4pr8
2020-09-04 Webservice vs. Plugin


Oct 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