This article is obsolete as of latest alpha, properties and signatures required by the plugin interface are now created inside the inherited class.
There are many interfaces and API's available to plugin development for IM 2.0, but the basics just to meet the minimum requirements for IM for the plugin to even load will be covered in this article.
Regardless of what kind of input or output plugin you are developing, it will likely need at least one input or output channel.
Most plugins will need a way for users to be able to manupilate settings. This will show how to use IMs built in functionality to dynamically create plugin settings.
Mapping plugins are the easiest to make, they only require a specific signature and an overrided method and that is it.
Plugin packages have the benefit of being completely user hands off wen it comes to installation, they simply double click the file.
Some output plugins will have a fixed list of output devices such as keyboard or moue plugins since the system only recignized one of those devices at a time anyway, but virtual controllers may wish to have the ability to allow the user to add or remove as many virtual controllers as needed.