Plugin System/API

Introduction
The purpose of this page is to provide an overview of the proposed plugin API for the Plugin System, and links to pages describing specific portions of the API.

What is the Plugin API?
The Plugin API is (or will be) a collection of text-based messages sent back and forth between a plugin and the Imprudence Viewer. There are three broad types of messages: requests (commands sent from the plugin to the viewer), responses (messages sent from the viewer to the plugin in response to a request), and event callbacks (messages sent from the viewer to the plugin when certain events occur).

Unlike plugins that run in an embedded scripting language interpreter inside the main application (e.g. World of Warcraft's AddOns), an Imprudence plugin is a separate program from the viewer; messages are exchanged via local inter-process communication sockets. This offers numerous advantages over the embedded approach:


 * Plugins can be written in any programming language that supports sockets &mdash; Python, Ruby, C/C++/C#, and countless others.
 * Plugins can use the features and libraries of their language to perform all sorts of advanced operations: connect to the internet, hook into an instant message or music player application, read and write to files or databases, or even provide an operating-system native GUI in a separate window.
 * Because plugins are separate processes, they can take full advantage of threading and multiple processors. Plus, the viewer won't crash or freeze if a plugin malfunctions!

Specification Levels
Not all API features are required to be implemented. Plugin creators and alternative viewer implementors should take note of the three specification levels:


 * Required Features: Features which every implementation MUST provide.
 * Optional Features: Features which an implementation MAY provide.
 * Extra Features: Optional features not specified in the API.

See the Specification Levels page for more information.

Wishlist
The API Wishlist page catalogues many specific suggestions of useful actions that plugins should be able to perform. Anyone is welcome to add to that wishlist.

Proposed / In-Progress API Pages

 * Chat
 * Data Storage
 * UI Widgets