WURFL Microservice for AWS Marketplace

Using WURFL Microservice for AWS will allow you to run your own WURFL-based device detection service in your hosting infrastructure by deploying familiar AWS AMI images. If you are not familiar with AWS and the possibilities of the Amazon Cloud infrastructure, here is a good place to get started.

WURFL Microservice Architecture

WURFL Microservice is a service which exposes its functions through a REST interface. Communication with the service happens through local APIs (Client APIs) that speak HTTP to the HTTP Server.

Note: The REST interface is used for communication between the Client API and the HTTP Server and is totally transparent to users of WURFL Microservice. Users with a very specific use-case(s) may contact ScientiaMobile about enabling the ability to directly utilize the REST Interface (this approach is normally discouraged). Among other things, local APIs will provide a caching layer which delivers greater performance in actual usage.

The following diagram explains the overall architecture of WURFL Microservice as deployed through the AWS Marketplace. The AMI will start an instance of the HTTP Server. In addition to supporting the REST interface for API clients, the service will periodically query ScientiaMobile for updates to the WURFL Device Description Repository to include the profiles of newly released devices.

Deploying the AMI and Setting up the Local APIs

1. Go to the AWS Marketplace, search for WURFL, and select the correct AMI for your needs. AMIs are currently available based on the set of Capabilities (Device Properties) and API Programming Language:

  • Capability Sets: Basic, Standard, or Pro.

  • Programming Languages: Go (golang), Java, .NET, Node.js and PHP.

You can find direct links to the specific AMIs here:


WURFL Microservice for Go

WURFL Microservice for Java

WURFL Microservice for .NET

WURFL Microservice for Node.js

WURFL Microservice for PHP


WURFL Microservice for Go

WURFL Microservice for Java

WURFL Microservice for .NET

WURFL Microservice for Node.js

WURFL Microservice for PHP


WURFL Microservice for Go, Java, .NET, Node.js, PHP

2. Select the EC2 instance you want to run your AMI on.

Note: This depends greatly on how much traffic you need to process through device detection. As a rule of thumb, using EC2 t2.micro (single CPU, 1GB Memory) will allow about 1000 lookups/sec. Actual throughput will be much higher for users of any of the APIs thanks to local caching. While t2.micro is sufficient for development and testing, a larger instance such as c3.large is recommended for production.

WURFL Updater: In order to use the WURFL Updater functionality within your instance, you must ensure that your instance can connect to the public internet (either through a gateway or a public IP). This allows it to reach out to the ScientiaMobile servers and obtain the latest version of the device repository.

3. After reviewing the purchasing options, follow the instructions for running the purchased AMI under your AWS account. This will create an instance that you can monitor from your AWS Dashboard. You will need to know the Instance IP address (<instance-ip>) to correctly configure your client API options (following step). The address can be found in your AWS dashboard.

Note: The configuration presented here is the simplest possible way to obtain a running instance of WURFL Microservice within AWS. In a real production environment, things are likely to be more complex than this and may involve making multiple instances of the product with a load balancer to distribute traffic and achieve fault tolerance. Discussion of the AWS infrastructure is outside the scope of this document.

4. (Only for first-time WURFL Microservice AMI users) Run the Instance and point your web browser to the Instance IP address:


Note: The key component of WURFL Microservice is a daemon that exposes a REST API to other modules in your microservice architecture. APIs are provided to offer a traditional programming interface in multiple languages and hide the complexity of the REST end-points under the hood. WURFL Microservice conveniently utilizes the availability of a HTTP server to distribute the required Client Libraries (i.e. the local APIs) to integrate Device Detection within your application in Java, PHP, .NET, etc.

For the Pro AMI, you will see the list of API packages for all the supported languages:

For language specific AMIs (Java, .NET, etc.), the /download end-point will only show the package acquired with the AMI.

Note: The URL to the actual packages are available in the following format:


You may use curl, wget, or similar methods, to download directly to the desired directory (you may want to add the library to your own Git repository for future use without the need to replicate this step).

This step will confirm that the AMI is up and running.

5. (Only for first-time WURFL Microservice AMI users) Install the Client API package and import the API in your project to start using it in your application.

You can find the documentation for each API here:

  1. Golang (GO Language)

  2. Java

  3. Microsoft .NET

  4. PHP

  5. Node.js

6. (Optional) Open a shell terminal and confirm that the WURFL Microservice is running as expected:

$ curl  http://<instance-ip>/v2/status/json
    "lookup_request": 0,
    "lookup_useragent": 0,
    "lookup_device_id": 0,
    "make_model_requests": 0,
    "server_info_requests": 8,
    "v1_capabilities_requests": 0,
    "not_found_404": 0,
    "server_uptime": 1172

© 2019 ScientiaMobile Inc.
All Rights Reserved.

NOTICE: All information contained herein is, and remains the property of ScientiaMobile Incorporated and its suppliers, if any. The intellectual and technical concepts contained herein are proprietary to ScientiaMobile Incorporated and its suppliers and may be covered by U.S. and Foreign Patents, patents in process, and are protected by trade secret or copyright law. Dissemination of this information or reproduction of this material is strictly forbidden unless prior written permission is obtained from ScientiaMobile Incorporated.