A tutorial and a sample application (both built with smithy) are available here. The tutorial code is also on GitHub. Gadgets are a modular unit of user interface functionality. They can be thought of as a self-contained interaction component that accomplishes some aspect of the application’s functionality. The intention of segmenting functionality into these independent user interface components is that they can then be re-used as building blocks for larger aggregations of application functionality or custom workflows. Gadgets are not to be confused with widgets. A widget is a much smaller component representing some interaction element such as a list box, textarea, checkbox, etc. Gadgets are composed of widgets as the user interface controls for building the desired functionality of the component. Examples of gadgets or gadget-like components in other systems are iGoogle on the web, Dashboard widgets in OSX, sidebar gadgets in Windows, and so on. They ultimately provide users with a snapshot or slice of relevant functionality that can be turned on or off, assembled into a workspace, or otherwise be independently configured based on the user’s needs. Developing applications with this paradigm allows for extremely flexible and modular user interfaces that can be customized to a specific user or group. This also enables rapid updating of individual units without modifying large or cross-cutting areas of the interface, reducing development risks to the overall application. A further benefit is that the gadget framework can be presented to developers or advanced users as an SDK whereby they can develop their own custom gadgets that easily drop into a workspace. No knowledge of the framework as a whole is required – just knowledge of the gadget interfaces themselves. Sandboxing can be applied that constrains the interaction ability of gadgets with low-level system activities, to the point that failing or insecure gadgets can be shutoff so that the entire application does not fail.