The Meta-Environment - ToolBus

Skip to main content.



The ToolBus is a software application architecture that utilizes a scripting language based on process algebra to describe the communication between software tools. A ToolBus script describes a number of processes that can communicate with each other and with tools living outside the ToolBus. A language-dependent adapter that translates between the internal ToolBus data format and the data format used by the individual tools makes it possible to write every tool in the language best suited for the task(s) it has to perform.

The global architecture is as follows:


The processes inside the ToolBus (red circles) take care of the coordination of the whole application. ATerms are used to represent the data that is shipped between ToolBus and tools. The tools (blue boxes) carry out the actual work. They may be implemented in different languages (C, Java, Perl, ASF+SDF, ...) and may also run on different computers.

The ToolBus comes with a viewer that allows the debugging of large applications. This screenshot illustrates the ToolBus viewer in action. It shows the Meta-Environment that has justed started up and a user has requested to open a module via the MetaStudio user-interface.


Online Documentation See Guide to ToolBus Programming for an extensive description and examples. Related documentation can be found at Meta-Environment Documentation

API Documentation

See ToolBus, ToolBus library, and ToolBus Java adapter



@Article{BK98, author = {J.A. Bergstra and P. Klint}, title = {The discrete time {T}oolbus -- A software coordination architecture}, journal = {Science of Computer Programming}, year = 1998, volume = 31, number = {2-3}, pages = {205--229}, month = {July}, url = "" }

@InProceedings{, author = {H.A. de Jong and P. Klint}, title = {ToolBus: the Next Generation}, booktitle = {Formal Methods for Components and Objects}, pages = {220--241}, year = 2003, editor = {F.S. de Boer and M. Bonsangue and S. Graf and W.P de Roever}, volume = 2852, series = {Lecture Notes in Computer Science}, publisher = {Springer}, url ={} }