InterSystems Official
Benjamin De Boe · Jun 14

InterSystems IRIS, IRIS for Health & HealthShare Health Connect 2021.1 are now Generally Available

InterSystems is very pleased to announce the 2021.1 release of InterSystems IRIS Data Platform, InterSystems IRIS for Health and HealthShare Health Connect, which are now Generally Available to our customers and partners.

The enhancements in this release offer developers more freedom to build fast and robust applications in their language of choice, both server-side and client-side. This release also enables users to consume large amounts of information more effectively through new and faster analytics capabilities.

We expect many customers and partners to upgrade their Caché and Ensemble deployments to this InterSystems IRIS release and have made every effort to make that a smooth and worthwhile transition. Most applications will see immediate performance benefits just from running on IRIS, even before they explore the many powerful capabilities IRIS brings to the table.

We kindly invite you to join our webinar presenting the highlights of the new release, at 11AM EDT on June 17. The webinar will be recorded and made available for replay afterwards. Or listen to our Data Points podcast episode on what's new in 2021.1.

Release Highlights

With InterSystems IRIS 2021.1, customers can deploy InterSystems IRIS Adaptive Analytics, an add-on product that extends InterSystems IRIS to provide business users with superior ease of use and self-service analytics capabilities to visualize, analyze, and interrogate vast amounts of data to get the information they need to make timely and accurate business decisions, without being experts in data design or data management. Adaptive Analytics transparently accelerates analytic query workloads that run against InterSystems IRIS by autonomously building and maintaining interim data structures in the background.

Other spotlight features new in this release include:

  • Improved manageability for our External Language Servers, which now also cover R and Python. This gateway technology enables robust and scalable leveraging of server-side code in your language of choice
  • The InterSystems Kubernetes Operator (IKO) offers declarative configuration and automation for your environments, and now also supports deploying InterSystems System Alerting & Monitoring (SAM).
  • InterSystems API Manager v2.3, including an improved user experience, Kafka support and hybrid mode.
  • Mainstream availability of IntegratedML, enabling SQL developers to build and deploy Machine Learning models directly in a purely SQL-based environment. 
  • Support for stream fields on sharded tables, giving you full SQL schema flexibility on InterSystems IRIS horizontally scalable architecture
  • An iris-lockeddown container image, implementing many security best practices such as disabling web access to the management portal and appropriate OS-level permissions.
  • Support for Proof Key for Code Exchange (PKCE) for Oauth 2.0


InterSystems IRIS for Health 2021.1 includes all of the enhancements of InterSystems IRIS. In addition, this release further extends the platform's comprehensive support for the FHIR® standard through APIs for parsing & evaluating FHIRPath expressions against FHIR data. This is in addition to the significant FHIR-related capabilities released since 2020.1, including support for FHIR Profiles, FHIR R4 Transforms and the FHIR client API.

This release also includes HealthShare Health Connect, our IRIS for Health based integration engine that delivers high-volume transaction support, process management, and monitoring to support mission critical applications. For a detailed overview of how its feature set compares to InterSystems IRIS for Health, please see here.


More details on all of these capabilities can be found in the product documentation, which has recently been made even easier to navigate through a convenient Table of Contents sidebar.

If you are upgrading from an earlier version and use TLS 1.3, please see these upgrade considerations.


How to get the software

InterSystems IRIS 2021.1 is an Extended Maintenance (EM) release and comes with classic installation packages for all supported platforms, as well as container images in OCI (Open Container Initiative) a.k.a. Docker format. 

Full installation packages for each product are available from the WRC's product download site. Using the "Custom" installation option enables users to pick the options they need, such as InterSystems Studio and IntegratedML, to right-size their installation footprint.

Container images for the Enterprise Editions of InterSystems IRIS and IRIS for Health and all corresponding components are available from the InterSystems Container Registry using the following commands:

docker pull
docker pull
docker pull
docker pull

For a full list of the available images, please refer to the ICR documentation.

Container images for the Community Edition can also be pulled from the Docker store using the following commands:

docker pull store/intersystems/iris-community:2021.
docker pull store/intersystems/iris-ml-community:2021.
docker pull store/intersystems/irishealth-community:2021.
docker pull store/intersystems/irishealth-ml-community:2021.

Alternatively, tarball versions of all container images are available via the WRC's product download site.


InterSystems IRIS Studio 2021.1 is a standalone IDE for use with Microsoft Windows and can be downloaded via the WRC's product download site. It works with InterSystems IRIS and IRIS for Health version 2021.1 and below. InterSystems also supports the VSCode ObjectScript plugin for developing applications for InterSystems IRIS with Visual Studio Code, which is available for Microsoft Windows, Linux and MacOS.

Other standalone InterSystems IRIS 2021.1 components, such as the ODBC driver and web gateway, are available from the same page.


Sharing your experiences

We only get to announce one EM release per year, so we are excited to see this version now hitting the GA milestone and eager to hear your experiences with the new software. Please don't hesitate to get in touch through your account team or here on the Developer Community with any comments on the technology or the use cases you're addressing with it.

For selected new capabilities and products, we've set up Early Access Programs to allow our users to evaluate software before it gets released. Through these focused initiatives, we can learn from our target audience and ensure the new product fulfills their needs when it gets released. Please reach out through your account team or watch the Developer Community if you're interested in participating in any of these.

2 0 27 408
Log in or sign up to continue

Thanks for the new release, @Benjamin De Boe !

Is there any publicly available list of publicly available images on the InterSystems registry?

Use docker-ls:

PS D:\Cache\distr> .\docker-ls tags --registry intersystems/iris-community
requesting list . done
repository: intersystems/iris-community
- 2020.1.1.408.0
- 2020.
- 2020.4.0.547.0
- 2021.

Are there any ARM images available?

Yes to both questions: For a full list of the available images, please refer to the ICR documentation.

Our doc team is updating that page today, but generally anything for which there was a 2021. tag, there should also be a 2021. There were a few open questions on the new permutations that we were looking through this morning.

Improved manageability for our External Language Servers, which now also cover R and Python.  

Are there any docs for that, especially R and Python?

I think you're looking for this. The doc is not separate for each language, but the quick reference in the last section points you at the respective class references.

Thank you Benjamin!

But I see it does not mention R at all and there's no corresponding R method in $system.external:

set javaGate = $system.external.getJavaGateway()
set netGate = $system.external.getDotNetGateway()
set pyGate = $system.external.getPythonGateway()

I believe the R one goes through the Java gateway, but not sure why it's not described (yet) in the docs. Pinging @Bob Kuszewski for more detail

You are right Benjamin, the R gateway go through the Java gateway with two helper classes :

  • com.intersystems.rgateway.Helper
  • org.rosuda.REngine.Rserve

An example can be found here :

If I may, I prefer the approach of Eduard for the R gateway : who by pass the java gateway and directly use socket connection to the R Server.

@Eduard Lebedyuk : you are right no documentation a this time for the R Gateway.

Thank you for the info Guillaume!

I would like to clarify that I'm not an author of Community R Gateway (although I do publish it).

Shiao-Bin Soong is the author of both Community R Gateway and R Gateway.

When i run the following:

set srv = $system.external.getServers()

write srv.%ToJSON()
["%DotNet Server","%IntegratedML Server","%JDBC Server","%Java Server","%Python Server","%R Server","%XSLT Server"]

R does appear


Can't wait for Python, I checked out R on Wiki. It looks interested for graph plotting and statistical analysis. The Wiki page also mentioned APL which is defined as:

APL (named after the book A Programming Language)[3] is a programming language developed in the 1960s by Kenneth E. Iverson. Its central datatype is the multidimensional array. It uses a large range of special graphic symbols[4] to represent most functions and operators, leading to very concise code. It has been an important influence on the development of concept modeling, spreadsheetsfunctional programming,[5] and computer math packages.[6] It has also inspired several other programming languages.[7][8]

in Wiki

I learned this language while I was studying to become an actuary and during the university holidays I worked at Legal & General who were the Insurance company who were sponsoring my University Tuition and during or of these work experience holidays, instead of putting me in the room where the actuaries worked, they put me ina room with an IBM computer with a special keyboard and told me that this computer was specifically designed to run APL programs. Here are some examples of the language:

Simple statistics[edit]

Suppose that X is an array of numbers. Then (+/X)÷⍴X gives its average. Reading right-to-left⍴X gives the number of elements in X, and since ÷ is a dyadic operator, the term to its left is required as well. It is in parenthesis since otherwise X would be taken (so that the summation would be of X÷⍴X, of each element of X divided by the number of elements in X), and +/X adds all the elements of X. Building on this, ((+/((X - (+/X)÷⍴X)*2))÷⍴X)*0.5 calculates the standard deviation. Further, since assignment is an operator, it can appear within an expression, so

SD←((+/((X - AV←(T←+/X)÷⍴X)*2))÷⍴X)*0.5

Prime numbers[edit]

The following expression finds all prime numbers from 1 to R. In both time and space, the calculation complexity is {\displaystyle O(R^{2})\,\!} (in Big O notation).


Executed from right to left, this means:

  • Iota ι creates a vector containing integers from 1 to R (if R= 6 at the start of the program, ιR is 1 2 3 4 5 6)
  • Drop first element of this vector ( function), i.e., 1. So 1↓ιR is 2 3 4 5 6
  • Set R to the new vector (assignment primitive), i.e., 2 3 4 5 6
  • The / replicate operator is dyadic (binary) and the interpreter first evaluates its left argument (fully in parentheses):
  • Generate outer product of R multiplied by R, i.e., a matrix that is the multiplication table of R by R (°.× operator), i.e.,
4 6 8 10 12
6 9 12 15 18
8 12 16 20 24
10 15 20 25 30
12 18 24 30 36
  • Build a vector the same length as R with 1 in each place where the corresponding number in R is in the outer product matrix (set inclusion or element of or Epsilon operator), i.e., 0 0 1 0 1
  • Logically negate (not) values in the vector (change zeros to ones and ones to zeros) (, logical not or Tilde operator), i.e., 1 1 0 1 0
  • Select the items in R for which the corresponding element is 1 (/ replicate operator), i.e., 2 3 5

And I wrote a number of programs which had the IT department asking "How on earth did you do that and what does it mean?" to which I replied "I asked the computer to do this for me and it said 'Yes Nigel' and the programs worked. It was then that I knew I was destind to become a developer . When, a few years later in London I was introduced to Multidimedsional structures I already knew what they were because of my exposure to APL.

Dear InterSystems, how about introducing APL into our library of analytical programming languages?


Hi Nigel, 

glad you like the Python Gateway work. Perhaps you're also interested in participating in the embedded python EAP?

As for APL, we're typically looking for some critical mass of customer demand before embarking on such a development project and only recall it being mentioned once before. But thanks for bringing it up, as each critical mass starts somewhere :-). 

This said, we've had some really great work pioneered in the community here. The Python Gateway project is one example that originated here and its popularity (thanks @Eduard Lebedyuk and @Sergey Lukyanchikov 
!) inspired the one now released as part of the core IRIS platform. Similar concepts, such as the Julia Gateway are still "incubating" as a community-driven project. Maybe APL could fit that same path?

Hi Ben

Yeah, I added the comments about APL because I just happened to notice it in Wiki while looking at R and it reminded me of my Actuarial days. It was a curious language being almost entirely symbolic in nature. The standard "Hello World" program that every language tutorial teaches was something more like 


I learned it in 1981 and I see that there have been releases of APL2 and so I guess that somewhere someone is using it (probably in Mathematical Modelling which is what many Actuaries do instead of designing Insurance Policies and staring at Life Expectancy Tables which was what Actuaries did in those day) and I think that a language like Julia (which I have also downloaded and played with a few months ago is much more suited to Pure Math). Can I ask a question, I notice that Python is an Interpreted language like ObjectScript. Was that part of the decision to include it into IRIS (and also that it is one of the most popular languages on the Top 10 language list) based on the fact that it could ultimately be compiled down to .obj code?

You're spot on. The similarity between Python and ObjectScript plus its popularity (Python's, that is ;-) ) are exactly what drove us to build Embedded Python. We're not compiling it to .obj code though, but running it "as Python" in the kernel. @Bob Kuszewski and @David McCaldon are much better at explaining that nuance (and actually do in the intro webinar to our early access program for this upcoming feature.

Hi Ben

I certainly would like to join the Python EAP. I was actually sent an invite but it slipped through the gap and I had communicated with Eduard to issue another Invite. I have already installed the IRIS 2021.1 PYTHON kit and I just need a license. At Anastasia's recommendation, I sent a request to Bob to get a license. I don't know if it's too late to join the current EAP as gather there will be another one but if I can join in the current one then that would be great

And we updated the images with ZPM 0.2.14 too:


And to launch IRIS do:

docker run --rm --name my-iris -d --publish 9091:1972 --publish 9092:52773 intersystemsdc/iris-community:2021.

docker run --rm --name my-iris -d --publish 9091:1972 --publish 9092:52773 intersystemsdc/iris-ml-community:2021.

docker run --rm --name my-iris -d --publish 9091:1972 --publish 9092:52773 intersystemsdc/iris-community:2020.4.0.547.0-zpm

docker run --rm --name my-iris -d --publish 9091:1972 --publish 9092:52773 intersystemsdc/irishealth-community:2021.

docker run --rm --name my-iris -d --publish 9091:1972 --publish 9092:52773 intersystemsdc/irishealth-ml-community:2021.

docker run --rm --name my-iris -d --publish 9091:1972 --publish 9092:52773 intersystemsdc/irishealth-community:2020.4.0.547.0-zpm

And for terminal do:

docker exec -it my-iris iris session IRIS

and to start the control panel:


To stop and destroy container do:

docker stop my-iris

Thank you Benjamin!

Is community edition download is available to run directly from windows other then docker image?

I'm running:


And $zv is:

IRIS for UNIX (Ubuntu Server LTS for x86-64 Containers) 2021.1 (Build 215U) Wed Jun 9 2021 12:37:06 EDT

Are $zv for ml and non ml builds the same? How can I distinguish if my app is running on ml or non ml build?

yes, they are the same. Like Studio and ODBC, it's an install-time option to right-size your footprint (and therefore highly relevant for container images). I'm not sure if there's a handy utility method to check if it's been installed or not, but @Thomas Dyar would know.

What happened to intersystems/arbiter? I  can't find it in registry:

>docker-ls.exe repositories  --registry
requesting list . done
- intersystems/iris-community
- intersystems/iris-community-arm64
- intersystems/iris-ml-community
- intersystems/irishealth-aa-community
- intersystems/irishealth-community
- intersystems/irishealth-community-arm64
- intersystems/irishealth-ml-community
- intersystems/sam

However, a direct pull succeeds:

docker pull
2021. Pulling from intersystems/arbiter
f22ccc0b8772: Already exists
3cf8fb62ba5f: Already exists
e80c964ece6a: Already exists
cc40d98799c0: Pull complete
4179ff34652c: Pull complete
70ed38c703cc: Pull complete
ab1c2108b984: Pull complete
758289e88757: Pull complete
Digest: sha256:51c31749251bea1ab8019a669873fd33efa6020898dd4b1749a247c264448592
Status: Downloaded newer image for

@Luca Ravazzolo?

It's still there, docker-ls just needs the auth.

 docker-ls repositories --registry --user "********" --password "****************"         
requesting list . done
- intersystems/arbiter
- intersystems/arbiter-arm64

I'm authorized in in docker. Is that not enough? Interesting.

I see both of them

      "RepositoryName": "intersystems/arbiter",
      "Tags": [
      "RepositoryName": "intersystems/arbiter-arm64",
      "Tags": [


Command used

docker run --rm carinadigital/docker-ls \
  docker-ls \
    -u luxabc \
    -p abcdefghijklmnopqrstuvxyz0987654321 \
    --registry \
      repositories \
        --level 2 \