The major goal of MPS is to allow extending languages to generate domain specific languages. MPS originally includes a ready-to-use universal language called BaseLanguage, which can itself be used to create programs. However, the right way to use MPS is to extend BaseLanguage and create new languages. MPS comes with several helpful extensions to BaseLanguage for working with strings, collections, dates, regular expressions, etc. In creating a language, you define the rules for code editing and rendering. You can also specify the language type-system and constraints. This allows MPS to verify program code on the fly, and thus makes programming with the new language easy and less error-prone. You can also define generators for their language to transform code in the custom language to compilable code in some conventional language. Currently, MPS is particularly good for, but is not limited to, generating Java code. You can also generate XML, HTML, JavaScript, and more.