Check out the FMTraining.tv website. Richard Carlton and his team do a daily free live stream about FileMaker to watch.
A few days ago Christian Schmitz from Monkeybread Software joined a live episode to talk a bit about the MBS FileMaker Plugin. Watch it on YouTube.
We talked about the 15.2 release: See announcement, the new functions and release notes.
(more)
Check out the FMTraining.tv website. Richard Carlton and his team do a daily free live stream about FileMaker to watch.
A few days ago Christian Schmitz from Monkeybread Software joined a live episode to talk a bit about the MBS FileMaker Plugin. Watch it on YouTube.
A question and answer round for the MBS FileMaker Plugin. We check Window.Activate, Process.SetFrontMost, Time.Format, AVRecorder, WebView, DynaPDF, JSON and more functions. We check out the script workspace enhancements with the various shortcuts and the snippet database.
(more)
We used to suggest scripts like the one below to install the
MBS FileMaker Plugin and check for the error status. But the following script has a big problem, a little oversight on how FileMaker works. Try to guess what is wrong here:
Install Plug-In File [ Install Plugin Update if needed::Plugin File Mac ]
Set Variable [ $LastError ; Value: Get(LastError) ]
Set Variable [ $LastErrorDetail ; Value: Get(LastErrorDetail) ]
The script installs the plugin and in case of an error, we like to query the error code and message. But this script never gets the last error detail! You may guess that we query the last error number and detail for the first line with the installation. But what we do is to query the detail for LastErrorDetail, we get the result from the Set Variable script line in the second line. Yes, the Set Variable will clear the error state and thus we never get the detail for the first line.
We have a fixed script:
Install Plug-In File [ Install Plugin Update if needed::Plugin File Mac ]
Set Variable [ $r ; Value: Let([
$lastError = Get(LastError);
$lastErrorMessage = Get(LastErrorDetail)
]; 1) ]
This time we use a
Let() statement to query both
LastError and
LastErrorDetail and assign it to variables. This way the Set Variable can overwrite the error state after we got the values.
If you have existing scripts using Get(LastErrorDetail), you may want to update them to use a Let statement.
Check out the FMTraining.tv website. Richard Carlton and his team do a daily free live stream about FileMaker to watch.
A few days ago Christian Schmitz from Monkeybread Software joined a live episode to talk a bit about the MBS FileMaker Plugin. Watch it on YouTube.
We talked about the 15.1 release: See announcement, the new functions and release notes.
(more)

In this article we want to introduce you the new functions from the MBS FileMaker Plugin in version 15.2.
LibXL
Let's start with what's new in the LibXL component. LibXL supports you since years in creating, reading and modifying Excel files. In this release you get the possibility to add and format tables. First, we can add a table with the XL.Sheet.AddTable function. You can give this table a name, a range and a style. You can change the name and style later using the other functions we have added. To change the name, we use the XL.Table.SetName function. To change the style, use the XL.Table.SetStyle function. You can find out which styles you can use here (https://www.libxl.com/table.html).
Now we can decide whether we want to apply the formatting to the colum and row stripes. With the functions XL.Table.SetShowLastColumn and XL.Table.SetShowFirstColumn you can decide whether the first and last row should have the style applied. If you want to know how many columns are in your table, use the XL.Table.ColumnSize function.
ListDialog
We also have some new functions for the ListDialog. You can now also assign a value to the various buttons, which can then be used in a script to differentiate between cases, for example. To set this value, use the functions ListDialog.SetCancelButtonValue, ListDialog.SetOtherButtonValue and ListDialog.SetSelectButtonValue. You then have the corresponding counter functions to query these values: ListDialog.GetCancelButtonValue, ListDialog.GetOtherButtonValue and ListDialog.GetSelectButtonValue. In the list dialog, you can also press the Cancel button if you have not made a selection. With the Select button, you always need a selection to be able to use it. With the OtherButton button, you can now use the ListDialog.SetOtherButtonNeedsSelection function to decide for yourself whether or not a selection must be made when using this button.
By default Mac shows Cancel left and OK right. On Windows it is reversed and OK is left and Cancel right.
So that you can standardize this, we now provide you with the ListDialog.SetSwapButtons function that can swap these buttons.
(more)
A client asked about using Gmail with oAuth 2 and our SendMail functions in MBS FileMaker Plugin. We have an existing example for Microsoft Office 365, which we can adapt for Google Mail. We change a couple of URLs, the scope and then it works fine. But let's go step by step.
As part of the oAuth, we later get a callback. Usually this is for contacting a web server, but we like to do it locally. We use our WebHook functions to do within the FileMaker Pro application and catch the answer from the JavaScript running in the browser.
Set Variable [ $$WebHooks ; Value: MBS("WebHook.Create") ]
Set Variable [ $r ; Value: MBS("WebHook.Listen"; $$WebHooks; 9999) ]
Set Variable [ $r ; Value: MBS("WebHook.SetScript"; $$WebHooks; Get(FileName); "WebHookReceived") ]
Set Variable [ $text ; Value: "<html><p>Request arrived.</p></html>" ]
Set Variable [ $text ; Value: "HTTP/1.1 200 OK¶Server: MyServer 1.0¶Connection: close¶Content-Type: text/html¶Content-Length: 36¶¶" & $text ]
Set Variable [ $text ; Value: MBS( "Text.ReplaceNewline"; $Text; 3 ) ]
Set Variable [ $r ; Value: MBS("WebHook.SetAutoAnswer"; $$Webhooks; $text; "UTF-8") ]
As you see we let the WebHook just answer any request with OK and a short html answer. That one is sent to the JavaScript in the WebViewer and it only cares for the 200 OK. The plugin triggers a script to report the incoming connection.
(more)
Nickenich, Germany - (May 6th, 2025) -- Monkeybread Software today is pleased to announce MBS FileMaker Plugin 15.2 for Claris FileMaker for macOS, iOS, Linux and Windows, the latest update to their product that is easily the most powerful plugin currently available for Claris FileMaker produce line. As the leading database management solution for Windows, macOS, iOS and the web, the Claris FileMaker Pro Integrated Development Environment supports a plugin architecture that can easily extend the feature set of the application. MBS FileMaker Plugin 15.2 has been updated and now includes over 7600 different functions, and the versatile plugin has gained more new functions:
Our Integration of the Saxon XML processing library into Xojo completed with the Saxon 12.6 release. You can use XSLT 3.0 for transformations, XQuery 3.1 for queries, XSD 1.1 for document validation and XPath 3.1 for navigation within documents.
We added new shortcuts for developers on macOS for calculation dialogs defining formulas: Press key combinations to define the return type just like field types, e.g. command-N for number.
For DynaPDF we have a new DynaPDF.RenderJob function to perform rendering pages in a background thread. This keeps the main thread free while you receive a script trigger when it finished. The DynaPDF library can now incrementally update PDF documents and better handle big TIFF images. We added functions to control bidi modes for right to left languages and ReadImageFormatFile and DynaPDF.ReadImageResolutionFile functions to query information for image files.
We improved our ListDialog functions. You can define the value returned for the buttons and define whether an extra button needs a selection. And you can control whether we swap OK and cancel button on Windows.
You can use auto complete on macOS for file path dialogs. The auto completion now handles XL function names better with two dots. The If/Loop highlighting can show the blocks defined by enter find mode and perform find.
Plugin defined variables can contains value lists. Use Variable.ValueCount to count values in the variable and use Variable.AppendValue and Variable.PopValue to add and remove values. Similarly you can store JSON in a plugin based variable and add JSON using Variable.AppendJSON and remove it later using Variable.PopJSON thread safely.
For auditing you can set the name of the table occurence for the AuditLog table. If you use UUIDs as primary key, you can use Audit.SetUUIDFields to define the exact names of the fields with the UUID.
We added the XL functions to define styled tables in an Excel files, a JSON.ToCSV function to turn JSON into CSV text and added ExtensionFilter parameter for Files.ListRecursive function.
Finally we updated the CURL library to version 8.13.0, DynaPDF to 4.0.100.285, expat to 2.7.1, libarchive to 3.7.9, LibXL to 4.6, SQLAPI to 5.3.6, Saxon to 12.6 and we updated the plugin SDK.
See release notes for a complete list of changes.
6. Mai 2025 - Monkeybread Software veröffentlicht heute das MBS FileMaker Plugin für Claris FileMaker in Version 15.2, mit inzwischen über 7600 Funktionen eines der größten FileMaker Plugins überhaupt. Hier einige der Neuerungen:
Unsere Integration der Saxon XML-Verarbeitungsbibliothek in FileMaker wurde mit der Saxon Version 12.6 abgeschlossen. Sie können XSLT 3.0 für Transformationen, XQuery 3.1 für Abfragen, XSD 1.1 für die Dokumentenvalidierung und XPath 3.1 für die Navigation in Dokumenten verwenden.
Wir haben Tastenkombinationen für Entwickler auf macOS für Berechnungsdialoge hinzugefügt, die Formeln definieren: Drücken Sie Tastenkombinationen wie Befehl-N für Zahlen, um den Rückgabetyp genau wie Feldtypen zu definieren.
Für DynaPDF gibt es eine neue DynaPDF.RenderJob Funktion, um das Rendern von Seiten in einem Hintergrund-Thread durchzuführen. Dies hält den Haupt-Thread frei, und Sie bekommen einen Skript-Trigger, wenn der Vorgang abgeschlossen ist. Die DynaPDF Bibliothek kann nun PDF Dokumente inkrementell aktualisieren und besser mit großen TIFF Bildern umgehen. Wir haben Funktionen hinzugefügt, um Bidi-Modi für Rechts-nach-Links-Sprachen zu steuern und ReadImageFormatFile und DynaPDF.ReadImageResolutionFile Funktionen, um Informationen für Bilddateien abzufragen.
Wir haben unsere ListDialog-Funktionen verbessert. Sie können den Wert definieren, der für die Buttons bei einem Klick zurückgegeben wird, und festlegen, ob zusätzliche Buttons eine Selektion in der Liste benötigt. Und Sie können festlegen, ob wir unter Windows die OK- und die Abbruch-Schaltfläche vertauschen.
Sie können die Autovervollständigung unter macOS für Dateipfaddialoge verwenden. Die Autovervollständigung kann jetzt XL-Funktionsnamen mit zwei Punkten besser verarbeiten. Die If/Loop-Hervorhebung kann die Blöcke anzeigen, die durch die Eingabe des Suchmodus und die Durchführung der Suche definiert sind.
Plugin definierte Variablen können Wertelisten enthalten. Verwenden Sie Variable.ValueCount, um die Werte in der Variable zu zählen und verwenden Sie Variable.AppendValue und Variable.PopValue, um Werte hinzuzufügen oder zu entfernen. In ähnlicher Weise können Sie JSON in einer Plugin-basierten Variable speichern und JSON mit Variable.AppendJSON hinzufügen und später mit Variable.PopJSON thread sicher entfernen.
Für das Auditing können Sie den Namen des Tabellenvorkommens für die Tabelle AuditLog festlegen. Wenn Sie UUIDs als Primärschlüssel verwenden, können Sie mit Audit.SetUUIDFields die genauen Namen der Felder mit der UUID festlegen.
Wir haben XL-Funktionen hinzugefügt, um formatierte Tabellen in einer Excel-Datei zu definieren, eine JSON.ToCSV-Funktion, um JSON in CSV-Text umzuwandeln, und einen ExtensionFilter-Parameter für die Files.ListRecursive-Funktion.
Schließlich haben wir die CURL-Bibliothek auf Version 8.13.0, DynaPDF auf 4.0.100.285, expat auf 2.7.1, libarchive auf 3.7.9, LibXL auf 4.6, SQLAPI auf 5.3.6, Saxon auf 12.6 und das Plugin SDK aktualisiert.
Alle Änderungen in den Release Notes.
So far we know about 14 conferences around the world. Time to pick which ones to join. Please pick a few from this menu:
Event | Language | Date | Where | Links |
Claris Engage Japan |
Japanese |
5th to 7th November 2025 |
Tokyo, Japan |
claris.com/ja/conference |
EngageU |
English |
9th to 11th November 2025 |
Antwerpen, Belgium |
engageu.eu |
Full Access |
English |
20th to 23rd October 2025 |
Los Altos, USA |
fullaccess.us |
Reconnect.Melbourne |
English |
16th to 17th October 2025 |
Melbourne, Australia |
reconnect.fm |
Naples FileMaker Week |
English |
8th to 10th October 2025 |
Naples, Italy |
filemakerweek.com |
FileMaker Konferenz |
German |
15th to 17th September 2025 |
Hamburg, Germany |
filemaker-konferenz.com |
Build Grow Learn |
English |
8th to 10th September 2025 |
Greenville, USA |
buildgrowlearn.com |
Vienna Calling |
English |
4th to 7th June 2025 |
Vienna, Austria |
viennacalling.eu |
Elevate FM |
English |
26th to 27th May 2025 |
Toronto, Canada |
elevatefm.ca |
FMTR Zirvesi '25 |
Turkish/English |
24th May 2025 |
Istanbul, Turkey |
fmtrzirvesi.com |
Rendez-vous::FM[2025] |
French |
15th to 17th May 2025 |
Reimes, France |
rendez-vous-fm.fr |
CodeWave |
Spanish |
25th to 26th April 2025 |
Valencia, Spain |
codewave.es |
Claris Engage USA |
English |
25th to 27th March 2025 |
Austin, Texas |
claris.com |
(more)
Feature flags (also known as feature toggles) are a powerful technique in modern development. They allow you to turn features on or off dynamically—without modifying scripts or deploying updates. While widely used in web and SaaS platforms, this strategy works extremely well in FileMaker, especially when building scalable, multi-user solutions or managing access to licensed features.
(more)
I wanted to transcribe a few voice messages from WhatsApp. Doing this by hand takes a long time for longer voice messages, but maybe I can solve this with a script?
With FileMaker and the MBS FileMaker Plugin, you can quickly build a supporting tool for this.
I used the functions from the Speech component for Mac and iOS.
First, a new script was created in the project. In this script, we first check whether Speech recognition has been initialized. If the SpeechRecognition.IsInitialized function returns something that is not equal to 1, we must first initialize the whole thing with SpeechRecognition.Initialize
(more)