A set of middleclass add-ons that make it easier to use in some cases
Failed to load latest commit information.
Branchy.lua final Branchy refactoring Apr 11, 2011
GetterSetter.lua updated comments Nov 28, 2010
Stateful.lua added some comments to new internal Stateful methods Apr 5, 2011



This is a set of additions to middleclass.


middleclass-extras was made for middleclass 1.x and it’s not under development any more.

middleclass 2.x has some features that make it incompatible with middleclass-extras.

middleclass-extras is being (slowly) re-done as a series of smaller libs. Right now, the only one completely finished is Stateful:

Other libraries might follow, but it might just take time. Sorry about that.

Module brief description

What follows is a brief description of each of the middleclass-extras modules. Each nodule is commented out with usage examples. You can find more examples on the /spec/ folder.

  • Apply allows invoking a method in all the instances of a class (and its subclasses). It also allows sorting before executing.
  • Beholder is a small signaling/event controller mixin. Your classes can ‘observe’ and ‘stop observing’ events. Note that Invoker must be required before Beholder, or the later will not work.
  • Branchy defines some useful methods for classes that behave like trees (addChild, getAncestors, etc)
  • Callbacks is a powerful mixin that allows you to add ‘hooks’ to any existing method. For example, you can specify on runtime that you want to call a method after initializing one object.
  • GetterSetter just adds a couple convenience getXXX, setXXX methods to your class.
  • Indexable allows classes to have a ‘fallback’ method, similar to lua’s __index metamethod. Since __index is reserved, the method used for lookup will be index, whithout underscores.
  • Invoker is a very small mixin that can be used to ‘send’ methods to instances. It’s main advantage is that it accepts both method names and lua functions on its parameters.
  • Stateful defines stateful objects. Classes receive a new method called addState, and instances receive a new method called gotoState. The behaviour of each of the instance methods can be redefined per-state.


The recommended way is using git.

In order to use middleclass-extras, you also need middleclass. You can download them both by doing:

cd your/project/path
git clone git://github.com/kikito/middleclass.git
git clone git://github.com/kikito/middleclass-extras.git

Alternatively, you can manually download them:


middleclass-extras is prepared to be required right after middleclass:



  • You can remove the .init part from middleclass if you are using middleclass as a file (middleclass.lua) instead of as a dir (middleclass/)
  • You can remove the .init part on both requires if your package.path setting already includes ?/init.lua


You may find the specs for this library in middleclass-specs