Microsoft Research Mobile Backend as a Service: Introducing Project Hawaii


Microsoft Research(MS Research) is an infinite source of technical innovation. Because of my academic background, I am constantly following the new MS Research projects and drawing ideas and inspiration from them. Recently, I came across Project Hawaii ( ) which provides a set of mobile services hosted in Windows Azure for computational and data storage. Sounds familiar? Yes, Project Hawaii overlaps slightly with Windows Azure Mobile Services but it focuses on new and innovative service capabilities. In this first release, Project Hawaii enables the following capabilities:

·        The Key-Value service enables a mobile application to store application-wide state information in the cloud.

·        The Optical Character Recognition (OCR) Service returns the text that appears in a photographic image. For example, given an image of a road sign, the service returns the text of the sign.

·        The Path Prediction Service predicts a destination based on a sequence of current locations and historical data.

·        The Relay Service provides a relay point in the cloud that mobile applications can use to communicate.

·        The Rendezvous Service maps from well-known human-readable names to endpoints in the Hawaii Relay Service.

·        The Speech-to-Text Service takes a spoken phrase and returns text. Currently this service supports English only.

·        The Translator service enables a mobile application to translate text from one language to another, and to obtain an audio stream that renders a string in a spoken language.


Obviously, given my recent work in the mobile backend as a service (mBaaS) space, Project Hawaii results super interesting to me. After spending a few hours playing with the current release, I thought the experience would make a few interesting blog posts.

Let’s start with the Hawaii’s key-value service:

Project Hawaii’s Key-Value Service (KVS) provides a simple key-value store for mobile applications. By using the KVS, an application can store and retrieve application-wide state information as text using key-value pairs.

Obtaining a Project Hawaii Application ID

Prior to use any of the Project Hawaii services, developers need to obtain a valid application ID. We can achieve that by going to the Project Hawaii signup page (  and registering your Windows Live credentials. After that, you will obtain an application identifier that can be used to authenticate to the different cloud services. As illustrated in the following figured.


After having completed this process, we need to register our application in the Windows Azure Marketplace.


Using the Project Hawaii Key Value Service

As its name indicates, the key-value service provides a service interface that enables mobile applications to store information in key-value pair forms. The main vehicle to leverage this capability is a RESTful interface abstracted by SDKs for the Android, Windows Phone and Windows 8 platforms. In the case of Windows 8, the KeyValueService class included in the Microsoft.Hawaii.KeyValue.Client namespace abstracts the capabilities of the Project Hawaii Key-Value service. The following matrix summarizes some of the operations provided by the KeyValueService class.





Initiates a call to create a key-value item. The item must not already exist.


Initiates a call to delete key-value items.


Initiates a call to delete key-value items by keys.


Initiates a call to get key-value items.


Initiates a call to get key-value items by key.


Initiates a call to get key-value items by keys.


Initiates a call to set one or more key-value items. If the key does not exist, the method creates it.

Like any good mBaaS SDK, the KeyValueService class provides a very succinct syntax to integrate with the Project Hawaii key-value service. For instance, the following code illustrates the process of inserting different items using the Project Hawaii key-value service.



private const string clientID = "My Client ID";

private const string clientSecret = "My Client Secret";


private void SetItem_Test()


KeyValueItem item1 = new KeyValueItem() { Key = "Key2", Value = "value2" };

KeyValueService.SetAsync(clientID, clientSecret, new KeyValueItem[1]{item1}, this.OnSetComplete, null) ;




private async void OnSetComplete(SetResult result)


        await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async () =>


                   if (result.Status != Microsoft.Hawaii.Status.Success)

                      Result.Text = "Success";


                       Result.Text = "Error";






 Similarly, applications can query items stored in the key-value infrastructure using the following syntax.

private void GetItem_Test()


  KeyValueService.GetByKeyAsync(clientID, clientSecret, "Key1", GetByKeyComplete, null);



Key-value storage can be a really useful capability in mobile applications. The Project Hawaii Key Value service provides a very simple mechanism to enable mobile application to leverage these capabilities using a very simple syntax.

We will cover other capabilities of Project Hawaii in future blog posts.

No Comments