GridFS with MongoDB

The MBS Xojo MongoDB Plugin got GridFS functionality in the last release. It allows you to store files in a MongoDB database. Internally the files are stored in two tables, one with the file list and a second one with file chunks. The MongoDB client library provides a nice interface for this. We wrap that in MongoGridFSMBS and MongoGridFSFileMBS classes.

Read file

Let's read a file. We build the MongoURIMBS object for whatever server we need, in our example a local one. We connect to the server using the MongoClientMBS class. Then we initialise the MongoGridFSMBS object using the name of the database "test". We store files in this database and use the prefix "fs" for the table. You can store files in multiple databases and store different file sets within the same database with different prefixes.

The FindOneByFileName() function finds a file by the name (or path). You get the matching MongoGridFSFileMBS object and then you can inspect properties or use the read methods to read the content. Here is a little sample code:

Sub Read() Var uri As New MongoURIMBS("mongodb://localhost/") Var Client as new MongoClientMBS(uri) Var GridFS As MongoGridFSMBS = Client.GridFS("test", "fs") // now find the file and write it Var file As MongoGridFSFileMBS = GridFS.FindOneByFileName( "test.txt") // read data Var data As String = file.ReadAll Var bytes As Integer = data.Bytes MessageBox "bytes read: "+bytes.ToString End Sub

You may have the Client and GridFS objects in properties of your window or app. This way you keep it open and avoid reconnecting each time.

(more)

MBS Xojo Developer Conference: Speaker wanted

Outside picture of the hotel showing the front door and lift.

We look for speakers interested to present at the MBS Xojo Conference, 22nd to 24th April 2026 in Andernach, Germany.

If we can have you as a speaker for a full session, 45 minutes talk and 15 minutes for questions, we honor your work with a discounted ticket.

We look for topics like these:

  • Desktop app development
  • Web development
  • iOS development
  • Android development
  • Database access
  • Threads, workers, shell class to run things in background
  • The various ways to work with PDF.
  • Encryption best practices
  • App Stores
  • Performance optimization
  • Tips & tricks for Xojo

Feel free to submit your topic to us. There may be other topics possible, that are not on the list above. Please sign up for the conference to reserve your spot.
If your topic is chosen to go on the schedule, we will offer you a refund if you paid already for your ticket.

Please contact us if you like to become a presenter and please do not hesitate to send us questions.


Saxon version 12.7

A few days ago Saxonica company released a new version of their Saxon libraries: Announcing Saxon 12.7!

We reported over 20 issues over time against 12.5 and they got fixed for us. Great service!

We have the download for Saxon libraries for you on our website: Saxon Downloads.

Our package include only the libraries and we built an universal library for macOS to bundle both intel and ARM code into one file. This is a convenience for you, so you don't need to download the big packages from Saxonica.

(more)

Introducing the New AtomicFlagMBS Class in MBS Xojo Plugins 25.2

With the release of MBS Xojo Plugins version 25.2, developers gain access to a powerful new class designed to help manage concurrency in a thread-safe, lock-free manner: the AtomicFlagMBS class. This lightweight atomic boolean type can be the foundation for building your own synchronization primitives like semaphores or critical sections — without relying on heavyweight system locks.

(more)

News from the MBS Xojo Plugins Version 25.2

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

LibXL

Let's start with what's new in the LibXL topic. LibXL supports you since years in creating, reading and modifying Excel files. This release adds the XLTableMBS class which allows you to add and format tables.

First, we can add a table with the AddTable method from the XLSheetMBS class. You can give this table a name, a range, if it has a header and a style. You can change the name and style later using the properties of the class we have added.You can find out which styles you can use here.

With the properties we also can decide whether we want to apply the formatting to the colum and row stripes. With theproperties ShowLastColumn and ShowFirstColumn you can decide whether the first and last column should have the style applied. If you want to know how many columns are in your table, use the ColumnSize property.

Would you like to give a specific area in your table a border? This is no problem with the SetBorder method from the XLSheetMBS class. First define the area in the parameters and then specify the border style and color.

(more)

Introducing AtomicIntegerMBS: Thread-Safe Integer Operations in Xojo

With the release of MBS Xojo Plugins version 25.2, developers now have access to a powerful new class for multithreaded programming: AtomicIntegerMBS. This class brings low-level atomic operations into your Xojo toolkit, enabling thread-safe manipulation of integer values across all major platforms (macOS, Windows, Linux, and iOS).

Whether you’re managing counters, flags, or other shared numeric resources between threads, AtomicIntegerMBS ensures consistent and safe updates without requiring traditional locking mechanisms like Mutex.

(more)

MBS Xojo Developer Conference

Outside picture of the hotel showing the front door and lift.Today we reveal the website for the MBS Xojo Conference and start registration. By adding a training day and some sight seeing days, we can fill a week for our guests:

Day Date Day Evening
Monday 20th April Welcome in Germany
Tuesday 21st AprilSight Seeing Tour Dinner
Wednesday22nd AprilTraining Day Reception in Hotel
Thursday 23rd April1st day conference Dinner Event
Friday 24th April2nd day conference Farewell Dinner
Saturday 25th April

Basically we repeat the 2024 conference. That makes planning much easier.

The prices increased a bit, but we would like to keep the same ticket prices and provide almost the same service. For example the speaker discount for the tickets is lower and we remove the Saturday tour. You are still encouraged to stay the weekend and explore the area. If there are several first-time visitors, who like to do the Geysir trip, we could provide help to plan that.

Like last year, we have the hotel for ourselves. All hotel guest rooms should be filled with Xojo developers. At the bar, at the breakfast, in the garden, everywhere you find Xojo developers to talk to.

The hotel is easy to get to via train or car. Please consider coming by train (to Andernach) and walk to the hotel (1.2 km).

We have a second room for labs and un-conference sessions. Your chance to spontaneously meet with developers and discuss a topic. In the lab sessions, we can meet and and implement a new feature in Xojo or add-ons.

The ticket prices stay the same as 2024. The regular rate is 399 €, but we give those who can afford more the chance to pay 799 € and support the event. On the lower end, we like to give young or hobby developers a chance to buy a discounted ticket for 199 € or even get a free ticket. And those are early bird pricing and we raise them in 2026. (all plus VAT if needed)

If you can stay a few more days, please spend some more time with your fellow Xojo developers and enjoy some history, culture and landscape. We plan a sight seeing trip for Tuesday with our oversea attendees.

The hotel rate is affordable with 120 Euro/night including breakfast and VAT (130 for double room). Other hotels nearby should have plenty of rooms available at similar or cheaper rates. And of course you can find luxury accommodation, too.

This community event is organized by Monkeybread Software. We expect to have a Xojo staff around to present and answer questions.

Please do not hesitate to send us questions.


What XSLT 2.0 and 3.0 can do better than XSLT 1.0

XSLT (Extensible Stylesheet Language Transformations) has been a core technology for XML data transformation since the early 2000s. While XSLT 1.0 laid the groundwork, subsequent versions — 2.0 and 3.0 — significantly expanded the language’s capabilities, power, and usability.

You can use XSLT 3.0 in FileMaker with MBS FileMaker Plugin and our Saxon functions. The built-in XSLT in FileMaker itself is only doing XSLT 1.0.

You can use XSLT 3.0 in Xojo with MBS Xojo Plugins and our Saxon classes. Please check the MBS Xojo XML Plugin. The built-in XSLT in Xojo itself is only doing XSLT 1.0.

(more)

Introducing AtomicQueueMBS – A Thread-Safe Queue for Xojo

With the release of version 25.2 of the MBS Xojo Plugins, we’re excited to introduce the new AtomicQueueMBS class—a powerful tool for managing thread-safe job queues in your Xojo applications.

Whether you’re building a multithreaded server, a background processing system, or any app where tasks need to be scheduled and executed safely across threads, AtomicQueueMBS gives you a robust, atomic queue implementation that works across macOS, Windows, Linux, and iOS.

(more)

MonkeyBread Software Releases the MBS Xojo Plugins in version 25.2

Nickenich, Germany - (May 6th, 2025) -- Monkeybread Software today is pleased to announce MBS Xojo Plugins 25.2 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 82,000 documented features, and the versatile plugins have 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 improved our MongoDB integration with adding grid fiel classes around MongoGridFSMBS class. It allows you to store files in a database inside records.

For Windows we add WindowsDecompressorMBS and WindowsCompressorMBS classes to use built-in compression and decompression functionality. We added more methods and events to WinSparkleMBS class to do in-app updates.

Since we got more threading in Xojo, we found a need for atomic integers, flags and a queue or stack. The AtomicIntegerMBS class allows you to have a value to read and write atomically from multiple threads. Similar the AtomicFlagMBS can be used to with multiple threads. And the AtomicQueueMBS can be used as a queue with threads to manage jobs as well as serving as a thread safe stack.

On macOS you can use VNGeneratePersonInstanceMaskRequestMBS and VNGenerateForegroundInstanceMaskRequestMBS to identify a person or object in an image and get a mask for it.

We added the XLTableMBS class to define styled tables in an Excel files. New methods help to add a table and find tables by name or index.

For DynaPDF we have a new DynaPDFRenderJobMBS class to perform rendering pages in a background thread. This keeps the main thread free while you receive events for page pictures. The DynaPDF class can now incrementally update PDF documents and better handle big TIFF images.

We improved CFBinaryDataMBS class to include new methods to get data pointer. Use the base64 encode or decode methods or the compression methods to use built-in compression on macOS and iOS.

Use CountValueMBS method to count values in an array quickly, we added a present method to AVPlayerViewControllerMBS class to show it right away and we added an execution time limit to JSContextMBS class.

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, Saxon to 12.6 and SQLAPI to 5.3.6.

See release notes for a complete list of changes.


Workaround if personal hotspot on iOS doesn’t provide an IP

Sometimes the personal hotspot on iOS doesn’t work. You get on the Wifi from your iPhone, but Internet doesn’t work since you don’t get an IP.

In that case you could restart the iPhone to restart the dhcp server for the hotspot. Or you switch to manual configuration, which often helps. (more)

xDev Magazine 23.3 Issue

The May/June (23.3) issue of xDev Magazine is now available. Here's a quick preview of what's inside:

An AI Image Tagger By Marc Zeedar

Can so-called "Artificial Intelligence" actually be useful? Marc had an idea to use ChatGPT to examine his photos and tag them with keywords for possible organizing and sorting. It took some work to learn the ChatGPT API, but he finally got his Xojo project working. Now he can drop photos onto his app and get back descriptions of what's in each picture!

Raspberry Pi Sensor Fun with ADS1115 by Eugene Dakin

Since the Raspberry Pi does not have an analog port or pin, it is common to use another device to read the analog voltage into the Raspberry Pi. Using the I2C communication protocol simplifies this process, as only a few wires are required to transmit voltage data. The ADS1115 is a popular 16-bit analog-to-digital converter (ADC). This article will guide you through programming the ADS1115 with Xojo API2 and the Einhugur I2C Plugin.

Shrinking Graphics by Marc Zeedar

With today's high-resolution cameras, there are many situations where too much resolution is a problem. Perhaps you're wanting to save bandwidth or storage space, or you want to create small thumbnails or different versions of a photo. Marc created Shrink which lets you quickly "shrink" your photos to 25%, 50%, or 75% of the original dimensions.

Plus: An interview with Tim Parnell, Xojo 2025r1, source code management, Xojo Tennis, Touch GUI, and more!


The biggest plugin in space...

Archives

Jun 2025
May 2025
Apr 2025
Mar 2025
Feb 2025
Jan 2025
Dec 2024
Nov 2024
Oct 2024
Sep 2024
Aug 2024
Jul 2024
Jun 2024
May 2024
Apr 2024
Mar 2024
Feb 2024
Jan 2024
Dec 2023
Nov 2023
Oct 2023
Sep 2023
Aug 2023
Jul 2023
Jun 2023
May 2023
Apr 2023
Mar 2023
Feb 2023
Jan 2023
Dec 2022
Nov 2022
Oct 2022
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