Cuby is a computational chemistry framework written in ruby. For users, it provides an unified access to various computational methods available in different software packages. For developers, Cuby is much more - it is a complex framework that provides object-oriented access to the data enetering the calculations and to their results, making it easy to create new computational protocols by combining existing blocks of the framework.
Although Cuby is used for calculations, it does very little of them itself. It calls external software to do the calculations and works with their results. Cuby provides an unified way how to run calculations in many popular computational chemistry programs and it can combine the results into more advanced protocols. Software already supported in Cuby is listed on page Interfaces; new interfaces can be developed easily. There is a good reason to divide the work this way - the specialized programs efficiently do what they are made for while Cuby provides the high-level interface and the possibility to work with the results in new ways. Cuby implements many of the common computational protocols which can be combined into more complex workflows.
Finally, a paper on Cuby is there! It overviews the purpose, design and applications of Cuby. It has been published in Journal of Computational Chemistry – available here. More information on how to cite Cuby is provided on the Authors page.
The capabilities of Cuby can be demonstrated on a QM/MM calculation. Cuby contains its own implementation of the QM/MM scheme which calls the separate QM and MM calculations via Cuby's interfaces. This means that any interfaced programs can be used even if they do not support QM/MM calculations themselves. The resulting QM/MM potential can be combined with any protocol, such as geometry optimization or molecular dynamics, which are implemented in Cuby. Moreover, this calculation can be just one step in an complex workflow which is defined by the means of a structured input file.
Version 4 is a major step forward in the development of Cuby. The architecture of the framework has changed. Large parts of the code, inculding most interfaces, were rewritten from scratch. The code is now fully modular what makes it possible to develop new interfaces and protocols easier than before.
A major improvement is a transparent implementation of paralellization at the very basis of the framework. Any calculations that can be performed simultaneosusly can run in parallel, all what is needed is to specify the available resources in the input.
While the philosophy is the same, the new developments led to some changes in the input. It is still based on the easy to use YAML format but it is now more structured. Also, some keywords had been renamed or changed. More details are provided on a dedicated page.