Windows 8 introduces a new concept called “charms”. Charms are basically a set of features that is handled by the OS, but is used/implemented/extended by the installed apps.
That sounds really confusing…but it isn’t…or…well…I will try to explain…
When you expand the “toolbar” on the right hand side of Windows 8 (swiping from the right edge of the screen towards the center) you are faced with a couple of buttons. First off the start button (Windows logo), but also share, settings, search. These are all “charms”. A charm is basically a feature that can be called up through the OS by using that toolbar, but should be implemented by the individual apps.
This way, the user will always find that functionality in the same way. So whenever you want to set a setting for an app, that setting is available under the settings charm in the toolbar. All the app needs to do, is to tell the system that it wants to use that feature by implementing a “contract”.
Settings is the simplest one, as it is very local so to say, even though the settings window also includes system settings that is outside of the applications control. The share charm on the other hand is a bit more complicated, as well as the search one. But they are also cooler!
By implementing a search contract, the app is telling Windows that it supports searching. And whenever the user taps the search charm, it pulls up a screen with a search box, as well as a list of apps that support searching. If you are inside an app that supports searching, it is pre-selected, otherwise it will default so searching Apps.
As soon as you type into the textbox, it will ask the selected application to search for the input text. It will use the returned values to give the user suggestions. And as soon as the user presses enter, it will launch the apps search page and let it show the result and handle the users future actions.
This way, applications that have data that makes sense to search, can integrate with the system and give the user a great search experience in one location.
Share is even more complicated, but also even cooler. Sharing has 2 parts, a source and a target, and an app can be either of them, or both. What it means is that an app can implement a contract saying that it supports sharing its information, and as soon as a user taps the share charm while in that app, it can supply the system with a piece of data that can be sent to another app for sharing. Sharing can mean sharing on a social network, or simply storing it locally. So sharing is basically just a way to say that one app can expose data that can be consumed by another app.
A target is the other end. it is an application that can take the source’s chunk of data and use it for something, for example upload to Facebook or post on Twitter. The funky thing is that all target apps are listed when you tap “share”. This way, apps that have data to expose somehow, can get it exposed to a bunch of different places, in a bunch of different ways without having to know about them ahead of time. And apps that can expose data in some way, can get that data from some other app without knowing about that app… Sweet!
The only guideline is that you should not implement contracts unless they make sense. Not all apps have features that makes sense to expose. For example, a PDF reader should not integrate with the system search, as it should only search within a document, something that doesn’t make sense when pressing search outside of the app. While a Facebook app probably should, as it would mean that you could search for friends or photos using the normal search… Makes sense?