Quick Start

There are different approaches to making software using Mana and they require different levels of knowledge. Here is the place to learn about them and how to use this documentation for best results.


Mana is object-oriented by design. Creating software in Mana is accomplished by arranging virtual “objects” into a sequence and then pressing the “play” button.

So what the heck is a virtual object?

In Mana, a virtual object is simply a name with some data attached to it. The data can represent an image, a model…your Aunt Irma’s oatmeal cookie recipe…anything! Objects are usually composed of other objects and can be very simple or very complex.

Every object has an update method, or a set of instructions that tells it what to do. When you call Update() on the first object, it automatically calls the same routine on all of its child objects, and they each call it on their child objects, etc. This “cascade effect” is how the application progresses and usually it happens over and over again in a loop until some condition is met (e.g. the user closes the app).

What do you mean by “child” objects?

Typically, objects are organized in one of two ways. The Mana interface provides a directory, like folders on your hard drive, where objects can be browsed just like files. In addition, there are some objects that can have others linked to them in a parent-child hierarchy.

All objects have a class (ification) that defines common features. Only objects belonging to certain classes can have child objects because they share that feature. Objects that can have children are derived from Mana’s Linkable class, which is an abstract. Abstract objects are explained in the next article.

Almost all objects can be children. However, it is up to each class to decide restrictions. If you had an object of class “person” and another of class “car,” you might want to restrict objects of class “foot” and class “tire” so that they attach appropriately and you don’t end up with a person’s tire and a car’s foot!


All objects in Mana are derived from a handful of abstract objects. As in other object-oriented systems, abstract objects cannot be instanced (created). They exist only as templates from which other class objects are derived.


Mana superclass objects are the foundation for your project’s development. By extending “supers” and adding your own data and/or methods, you can construct your own prototypes. Prototypes are like abstracts because you don’t use them directly. They exist to provide you with your own form of abstraction.


Many objects in Mana can be extended to create new prototypes. Perhaps you wish to extend your own window widget to make a confirm dialog or a file chooser. This is achieved by adding data to the existing object and declaring it as a new prototype.


Mana makes use of an internal directory for organization. It is essential because it supplies objects with straightforward path names for identification. An “object path” can be used not only to find an object, but to link objects together (via metadata) in ways that make them more useful.

Class Diagram

Here are all Mana objects represented in class diagram form.


Here is a guide to common terminology.