About Nirmata

Nirmata’s mission is to help businesses innovate faster, by enabling continuous delivery of software for all enterprises.

Nirmata enables Enterprise DevOps by making it easy for developers to perform fully automated application operations tasks based on policies that are managed by a platform team. Nirmata has been built ground-up for Microservices style applications, where an application is composed of multiple services and each service is designed to be elastic, resilient, composable, minimal, and complete. Nirmata provides seamless service discovery, registration, load-balancing and customizable routing for microservices. These features enable several DevOps best practices, and sophisticated automation required for continious delivery of software.

The Nirmata solution is non-intrusive and easy to use. It integrates with your current build tools and does not try to hide, or abstract-away, the Infrastructure-as-a-Service (IaaS) layer. This approach allows full visibility and control, and yet provides the benefits of a platform. You can configure your cloud or data center resources, using each provider’s security and management best practices and then use Nirmata to orchestrate and manage applications across providers.

Nirmata Overview Video

Core Concepts

The figure below shows the core concepts in Nirmata and their relationships to each other. Each of these concepts are defined below:



Applications are composed of multiple Services, and can run in one or more Environments. While Nirmata has been designed for Microservcies-style applications, it is easy to model and manage traditional client-server applications as well.


A Service is part of an Application. It is the unit of software versioning and delivery. Each Service is run in its own application container. Some applications may contain a few services, like a web-app and a database. Others can contain several services to enable a Microservcies-style architecture.


An Environment is a runtime instance of an Application. Environments can be created for different stages of development, such as dev-test, staging, production or can be based on deployment characteristics such as regions.


Policies are used to govern resource usage, application constraints, and ensure scalable and repeatable behaviours, and best practices, across multiple teams.

Cloud Providers

Cloud Providers supply resources to run application containers. You can create one or more cloud providers, setup pools of hosts from them, and then use policies to manage how applications, services, and environments are mapped to hosts.

Nirmata currently supports the following cloud providers:
  • Public Clouds:
    • Amazon Web Services (AWS)
    • Microsoft Azure
    • Cisco Cloud Services
    • VMware vCloud Air
    • Other (individual machine instances from any other IaaS providers)
  • Private Clouds:
    • VMware vSphere
    • OpenStack
    • Other (individual virtual or physical servers)

Nirmata can securely manage both public and private clouds, without requiring any special network or firewall configuration.

Host Groups

Host Groups are used to model pools of similar hosts (servers) in a Cloud Provider. For example, you can allocate pools of resources based on service tiers, application characteristics, or application lifecycle needs.


Each Service runs in a Container. Nirmata uses the Docker Engine as its container techonology. Since Docker is an open techonology, you can always keep control of your images, and can also run them outside of Nirmata.

Image Registries

An Image Registry stores Docker images, which are typically produced by a build system. Nirmata supports both public and private image registries. You can setup your build tools to generate images for each service, and then trigger Nirmata to deploy the images.

Getting Started

Here are three easy steps to familiarize yourself with Nirmata:
  1. Setup a Cloud Provider and a Host Group (see Cloud Providers and Host Groups.)
  2. Import the a sample application from the Nirmata OSS Github repository (see Create an Application.)
  3. Run the Application in an Environment. (see Deploy an Application to a Environment.)

Getting Started Video