Hey everyone,
This is my running list of Servoy tutorials on dotzlaw.com. I add new ones as I publish them and I keep the older ones linked here because most of the fundamentals still apply a decade later. Bookmark this post. I will keep updating it.
If you are not using the new AI Runtime Plugin (`plugins.ai`) that shipped with Servoy 2025.12, you need to read the latest articles below to see what you are missing. If you are new to Servoy, start at the bottom of the post with the Foundations section and work your way up.
I aim to publish a new tutorial every week. Check back on Sundays.
Latest Additions
**The Servoy AI Runtime Plugin Series (April 2026).** A four-part deep dive into `plugins.ai`, the Langchain4j-backed runtime that shipped with Servoy 2025.12. Read them in order.
**[Part 1: Getting Started with the Servoy AI Runtime Plugin]( Getting Started with the Servoy AI Runtime Plugin - Dotzlaw Team )**. Chat completions with OpenAI and Gemini, streaming responses, conversation memory, multimodal input (PDFs, images), and your first vector embedding with a working semantic product search that turns “spicy hot condiments” into a ranked list of actual products.
**[Part 2: Tool Calling with the AI Runtime Plugin: Agentic Servoy]( Tool Calling with the AI Runtime Plugin: Agentic Servoy - Dotzlaw Team )**. Register your existing Servoy methods as tools the LLM can call. The agent decides what to call and in what order, then executes real business logic through your QBSelect, foundset, and `databaseManager` code. Not a demo.
**[Part 3: Embedding Your Servoy Data for Semantic Search]( Embedding Your Servoy Data for Semantic Search - Dotzlaw Team )**. Move semantic search off the in-memory store and into production with PgVector. FoundSet `embedAll()` that preserves primary keys as metadata, custom metadata columns, PDF document chunking for RAG, and batch strategies for keeping embeddings in sync.
**[Part 4: Hybrid Queries with QBVectorColumn: Semantic Meets SQL]( Hybrid Queries with QBVectorColumn: Semantic Meets SQL - Dotzlaw Team )**. The payoff article. Combine semantic similarity with traditional WHERE clauses in a single Query Builder query. Products similar to “lightweight laptop for travel”, under $2,000, in stock, active, all in one database round-trip.
The Back Catalogue (Still Relevant Today)
A lot of the older stuff is just as useful today as the day I wrote it. My favourite is **The Mighty Array**. Who knew all that stuff was hiding in the humble JavaScript array?
Foundations
**[The Mighty Array]( The Mighty Array - Dotzlaw Team )**. Advanced JavaScript array functions in Servoy. The one I still get the most feedback on.
**[Coding Efficiency]( Coding Efficiency - Dotzlaw Team )**. Frameworks, conventions, and the mindset shift that makes you twice as productive.
**[Maintainable Code]( Maintainable Code - Dotzlaw Team )**. How to write code that your future self will thank you for.
**[Encapsulation]( Encapsulation - Dotzlaw Team )**. Using Servoy’s encapsulation features on forms, relations, and value lists.
**[Using Git Flow and SourceTree]( Using Git Flow and SourceTree - Dotzlaw Team )**. The Git Flow model I have used on every Servoy project for the last decade.
Object-Oriented Programming in Servoy
**[Object-Oriented Programming]( Object-Oriented Programming - Dotzlaw Team )**. The entry point for OOP in Servoy.
**[Inheritance Patterns]( Inheritance Patterns - Dotzlaw Team )**. A tour of the different ways to do inheritance.
**[Prototypal Inheritance]( Prototypal Inheritance - Dotzlaw Team )**. Prototypes in Servoy, done right.
**[Multiple Inheritance]( Multiple Inheritance - Dotzlaw Team )**. How to share behaviour across unrelated objects.
**[Parasitic Inheritance]( Parasitic Inheritance - Dotzlaw Team )**. A pattern with a strange name and a legitimate use case.
**[Decorator Design Pattern]( Decorator Design Pattern - OOP - Dotzlaw Team )**. Extending behaviour without touching the original object.
**[Factory Design Pattern]( Factory Design Pattern - OOP - Dotzlaw Team )**. Centralizing object creation.
Performance and Caching
**[Optimizing Code Performance]( Optimizing Code Performance - Dotzlaw Team )**. How to find and fix the slow parts.
**[Function Memoization]( Function Memoization - Dotzlaw Team )**. Caching return values to make repeat calls free.
**[Using an Object as a Cache]( Using an Object as a Cache - Dotzlaw Team )**. The pattern that still saves me database round-trips every week.
**[Optimized Table Shuffle]( Optimized Table Shuffle - Dotzlaw Team )**. Shuffling rows in a table view, the efficient way.
UI and Forms
**[Take Back the UI with OOP]( Take Back the UI with OOP - Dotzlaw Team )**. Toggling groups of UI elements elegantly.
**[Using an Object to Control Elements on Servoy Forms]( Using an Object to Control Elements on Servoy Forms - Dotzlaw Team )**. Treat form elements as members of a bigger object.
**[Button Magic]( Button Magic - Dotzlaw Team )**. Custom SVG CSS buttons that do not look like the 1990s.
**[Using CSS UI Components with Callbacks]( Using CSS UI Components with Callbacks - Dotzlaw Team )**. CSS components in Servoy with real event handling.
**[The Demise of the TreeView]( The Demise of the TreeView - Dotzlaw Team )**. Building a better tree with CSS and callbacks.
**[Table Tree View]( Table Tree View - Dotzlaw Team )**. A table with expandable and collapsible nodes.
**[Add Forms to Tab Panels using a Map]( Add Forms to Tab Panels using a Map - Dotzlaw Team )**. Controlling exactly where a form lands in a tab panel.
**[The New DesignTimeProperties]( The New DesignTimeProperties - Dotzlaw Team )**. The feature that changed how I build reusable form components.
Architecture and Testing
**[Event-Driven Architecture]( Event-Driven Architecture - Dotzlaw Team )**. Loosely coupled modules that do not know about each other.
**[Automated Testing]( Automated Testing - Dotzlaw Team )**. If you are still testing by clicking around, this one is for you.
If any of these articles are useful, pass them on. If you run into anything while building with Servoy, drop a reply here. I read every one.
Cheers,
Gary Dotzlaw