Meet The InpremTM Family


Studio provides the essential/unique tools and runtime components that an integrator or developer needs for creating a custom IoT system using the various Inprem workflows.  Where additional tools not included with Studio are needed (e.g., Open Source utilities), Studio documentation explains where to obtain them, and how to use them for the purpose at hand.  Our goal is to provide an in-depth, comprehensive, well-documented set of tools, workflows and resources that can be applied to most common systems integration solutions (and some interesting new ones you may not have encountered before!).

Think of Studio as CIWare Labs’ product that provides the “total package” of software and services that you receive when you purchase a license (licensing is explained here.) package of software and services.

Server is the set of software programs that are installed on your host, which for our v1 release targets Raspberry Pi 3b and 4b as host CPU. 

Inprem Studio v1, which includes Server with a DevTime license (see below) is delivered as a single binary image that includes the Linux OS and all other programs/frameworks that are needed to fully exploit the power of Studio for your specific application(s). Other than activating your license, it is immediately ready to use once booted on your host.

Server runs in two contexts, DevTime and RunTime. 

Raspberry Pi 3b and 4b as host CPU.


DevTime refers to the comprehensive set of tools and workflows that CIs and developers use for developing new projects/products for your customers.  DevTime is a reference to the state of being “in development”.


RunTime is a more limited set of capabilities designed for use by End Users of the individual integrated systems (“instances”) that are created using Studio in DevTime mode.  Since end users almost always require a much more limited set of capabilities than integrators and developers, the RunTime license unlocks a smaller subset of functionality and is thus licensed at a lower price point than the DevTime license.

Studio Tools & Workflow

Here is the workflow you use when integrating systems using Studio/Server. See below for brief explanations of the different tools that are represented below in green and blue bold.

  1. Create a customer in CRM.

  2. Create a site attached to the customer using Structure.

  3. Add devices, their protocols/connections, and their command libraries to the site using Configure.  Attach them to the Structure. Also specify device-specific behavior you want to have access to via a RunTime User Interface (UI).  If you are using hardware devices such as remote controls, Configure those devices and connect the appropriate input commands to the corresponding output commands.

  4.  Program and test drivers for any as-yet-unsupported devices.  This requires that the particular protocols used by the devices are supported.  Studio provides a language specifically for writing device drivers and including them in your libary of devices.

  5. If you want to design and program your own “soft UI” (e.g. a UI for touchscreen), create the custom UI using one of our several recommended methods and hook its controls up to Server using IREST (InPrem Server’s comprehensive REST API).  Virtually any UI front end approach can be used, if it is able to make and receive REST calls.

  6. Using IAL (Inprem Automation Language), Program additional behavior, for example, to create commands that affect more than one device at a time, or automation that derives from events issued by time schedules, data triggers, and many other sources.

  7. Test the system, from the bottom up, i.e. verify device functions and then more sophisticated programming sequences and automation. Server provides various capabilities throughout the DevTime tools/workflows that assist in testing.

  8. Build the project in its current state (partial or completed) to create a Server RunTime image, and write this image to an SD card.  Install the SD card into your Raspberry Pi 3/4 host.

  9. Use the new RunTime system.

  10. Enhance as needed over time (i.e., loop back through this process as appropriate).  This may be because of bugs, customer feedback, or to incorporate new Server features that have become available.

So, exactly what tools/workflows are in Studio v1?  The following sections provide brief explanations.


The CRM (Customer Relationship Manager) tool built into Studio provides convenience and consolidation of essential information needed to develop and maintain specific systems for your customers.  Whether you have one customer or hundreds, CRM will help you keep track of them, easily open a project you need to work on, and pull their historical Server images up for editing at any time.


Structure refers to the project site, which reflects the basic foundational taxonomy of buildings, rooms, levels, and other spaces in which devices are located and interconnected.  The Structure tool offers a number of templates that support a wide range of site types that can be used to quickly create the taxonomy foundation such that it closely models the project you are working on.


There are a number of Configure tools.  Each protocol supported is stored in a library of device commands (v1 will support IP/REST, TCP, RS-232, IR, and Relay protocols).  These protocol-centric libraries will be curated by CIWare Labs and our manufacturing partners. For example, through our partner Global Caché we provide our customers access to the world’s largest library of commands for driving IR equipment through Global Caché network adapters, via our integration with their Control Tower online database.  If an IR device you need to control is not available, you can create a custom library of commands for it using our IR learning tool.  We provide incentives for sharing these new libraries with us so we can make them available to other Inprem and Global Cache partners/customers. With protocols other than IR, if a necessary driver is not available, you can configure and/or program it yourself with the appropriate Studio tools.


Program refers to the tools and APIs provided to create device actions and overall system behaviors. All programming in Studio ultimately targets Server’s internal execution pipeline.  The execution pipeline supports both synchronous and asynchronous execution models, so individual programs can be run in parallel or serial modes.  Sub-programs within a serial program can be run asynchronously, and parallel sets of sub-programs can be specified to run serially within their scope.  In control and automation programming, the ability to specify how individual programs run relative to each other is relevant, affecting the order that actions occur, as well as the performance of the overall system. Program supports this powerful flexibility, and extends it to DevTime licensed customers to use.

The programming model in Server also incorporates “intents”, which are mapped in the execution pipeline to resolve into the specific device commands that are necessary to accomplish the ultimate behavioral goal(s).  Intents are very intuitive and serve well the purpose of generating a number of individual tasks to serve a larger purpose.  For example, Program can map a user’s intent to “turn on my favorite morning TV show in the Kitchen” into a collection of synchronous and asynchronous device commands that accomplish that.  The intent concept is actually quite similar to “goal”.  It reflects (and actually embraces) the concept of uncertainty that is an inescapable reality in control/automation hardware and software systems – things don’t always work the way you want them to.  This can be as simple as a tripped circuit breaker or as complex as an obscure firmware bug in a device.

The best way to build a reliable system is to examine all the cases you can identify that might cause abnormal/unexpected system behavior (“exceptions”). Use IAL (see below) to program appropriate responses to exceptions, and gradually harden your system/product accordingly. Note: The ability to handle exceptions is a function of both hardware and software, and varies according to the overall system scope and complexity.


All of Server’s RunTime capabilities are exposed in IAL (Inprem Automation Language), which provides for quick, yet detailed, programming of integrated system behavior by CI’s and Developers. IAL runs directly on Server and thus is part of the hardened host environment, with no separate CPUs required.

Issuing individual device commands, invoking scenes, and responding to or generating events are examples of behavior that IAL will perform. IAL is built on IREST, which enables it to drive system behavior through the Program execution pipeline.


IREST is Server’s application programming interface (API).  IREST provides complete, secure access to all Server features and functionality that are available. IREST is used by CIWare Labs engineers for all internal development, and all integrators/developers that build systems/products using Server (Note: some iREST calls are only accessible to internal or OEM developers). UIs in the Server product are all built using AngularJS, as part of an SPA (Single Page Application). As such, all DevTime and RunTime behavior is completely server-based.

Custom programs that interact with Server (notably, UIs and external automation systems) do it through IREST. A program that uses IREST directly must be installed on a different CPU than Server, as Server is hardened, both for security and reliability reasons.

Using various mechanisms, it is practical to build cloud-based apps that call and respond to IREST. CIWare Labs is currently in the process of determining the optimum method for our CI customers, and which will work better for OEM partners who are developing products using our technology.


Build creates a complete instance of a customer’s configured Server for a specific site, including all OS, frameworks, and modules involved, in a format that can be simply written to an SD card using any SD formatter. This SD card, once inserted into the Raspberry Pi, will start up in the mode that is supported by the license. (Click here for licensing info.)


LAIR is a specific application, built into Server, that supports IR input using Global Caché network adapters. Using LAIR, simple IR remotes can be used to trigger any device action or program in Server. This system is configurable using the standard Structure, Configure and Program tools/workflows in Server, making IR a fully qualified UI device that can be incorporated into any integrated system or product that incorporates Inprem technology.  (Click here to load our new white paper describing LAIR)

CIWare Labs Innovation

Our goal is to constantly innovate and deliver to you a continuously improving set of tools and workflows that solve challenging, relevant problems. We also commit to helping you innovate on behalf of your customers. Our belief is that through proactive customer and partner relationships we will together transform the art and science of system integration to our mutual benefit.

© 2019 by CIWare Labs, Inc. All rights reserved.