#InterSystems Package Manager (IPM)

13 Followers · 148 Posts

InterSystems Package Manager (IPM) is a tool to deploy the packages and solutions into InterSystems IRIS with dependencies.

Download Package Manager client.

Question Oliver Wilms · Mar 15

I created a new repo called ipm-module-budget from https://github.com/intersystems-community/intersystems-iris-dev-template template.

I cloned the repo to an EC2 instance in AWS. When I try to build image, I see this error:

#8 22.09 [IRISAPP|ipm-module-budget] Reload START (/home/irisowner/dev/)Segmentation fault (core dumped) #8 ERROR: process "/bin/sh -c pip3 install -r requirements.txt && iris start IRIS && \tiris session IRIS < iris.scri pt && iris stop IRIS quietly" did not complete successfully: exit code: 139

9
0 110
Question Sam Duncan · Aug 20, 2025

I've been trying to set up a script I can run after installing an instance to enable IPM across all namespaces. I have been able to install IPM successfully using

set r = ##class(%Net.HttpRequest).%New(),
    r.Server="pm.community.intersystems.com",
    r.SSLConfiguration="ISC.FeatureTracker.SSL.Config" 
d r.Get("/packages/zpm/latest/installer"),
    $system.OBJ.LoadStream(r.HttpResponse.Data,"c")

and then running the zpm commands

repo -r -n registry -url https://pm.community.intersystems.com/ -user "" -pass ""
enable -map -globally
4
0 203
Question Jonathan Lent · Jul 24, 2025

I feel I may be in the "people unclear on the concept" group here.

System Default Settings is a great mechanism, and we use some custom code to deploy it in our pipeline after environment specific changes have been applied to the content. However, we are trying our best to reduce the amount of custom code we use in our system that does not relate directly to the business. For CI/CD, this means we are trying to leverage IPM for the heavy lifting.

Is there a method for handling System Default Settings in IPM that I am just overlooking?

4
0 142
Question Ashok Kumar Thangavel · Jun 10, 2025

Hello Community,

I encountered the following errors while installing the ZPM module on version 2025.1. The ZPM install command failed on the Community Edition of IRIS for Health.

Skipping installation of python wheel 'attrs-25.1.0-py3-none-any.whl' due to error: '0 ;«WCould not find a suitable pip caller. Consider setting UseStandalonePip and PipCallerÓUSERÇ'e^OnAsStatus+1^%Exception.General.1^1/e^AsStatus+1^%Exception.AbstractException.1^15e^OnPhase+28^%IPM.ResourceProcessor.PythonWheel.1^1)e^%Initialize+8^%IPM.Lifecycle.Base.1^1-e^ExecutePhases+163^%IPM.Storage.Module.1^1+e^LoadNewModule+118^%IPM.Utils.Module.1^1e^Load+44^%IPM.Main.1^1"d^ShellInternal+48^%IPM.Main.1^1d^Shell+2^%IPM.Main.1^1e^ZPMLoad+3^IPM.Installer.1^1e^setup+63^IPM.Installer.1^1"e^AsyncSetup+2^IPM.Installer.1^1d^^^0'. You may need to install this wheel manually or from PyPI to use certain features of IPM.
6
0 235
Question Evgeny Shvarov · Apr 26, 2025

Hi developers!

While developing web apps the security practice I consider safe and convenient is to create a special Role (e.g. equal application name) which contains security resources which application will need (SQL tables, priviledges, database access, etc) and assign it to the Web Application.
So the user gets this role once it loggs in to the application (via password, no password or delegated).

Convenient, right?

So, the question is, when I deploy the app as an IPM module what should I put as a database access?

4
0 171
Question Dmitrii Baranov · Mar 31, 2025

I'd like to ask you for recommendations on how to properly use repository dependencies when using VSCode and Client-side editing. Suppose I have projects A, B and C, with A being independent, B depending on A, and C depending on A and B. I am currently working with the main project C, and I want to be able to contribute to all the other projects in a single VSCode window (instead of opening three instances). How do you solve this problem? Git submodules? ZPM? Something else?

1
0 156
Question Pravin Barton · Feb 14, 2025

For some build scripting with the InterSystems Package Manager, I'd like to first uninstall a package with `zpm "uninstall"` and then load it from disk using `zpm "load"`. That way anything that got deleted from the source will also be deleted from IRIS. 

The problem is that `zpm "uninstall"` takes in a module name and I only have the directory path to the package source. Is there a way to get the module name for an installed IPM module given the source path? It's okay  to assume that it has previously been installed from that same directory with `zpm "load"`.

1
0 139
Question Jani Hurskainen · Oct 30, 2024

I assume IPM manifest tag UnitTest is tightly coupled with the standard unit test framework, right? However we have our own one that predates the standard one and we are not going to switch.

I think I need to import the unit test cases and then be able to run a single class method for the test run. Any ideas how this would be possible?

9
0 226
Question Jani Hurskainen · Oct 29, 2024

I'm working on my first (!) IPM module and I'm a little puzzled with the registry authorization.

I have a working local registry (I hope!) and the module is loaded (with load-command) to the namespace.

Now publish-command fails because of missing authorization. I have set nothing authorization related myself and I'm lost how the authorization should be configured. All the material I have read so far seems to ignore that and only mentions one have to authenticate ...

Here's the command output:

zpm:IPMTEST1>version

%SYS>     zpm          0.7.3
IPMTEST1> zpm-registry 1.3.2
https://pm.community.intersystems.com - 1.0.6
http://localhost:52773/registry/ - 1.3.2

zpm:IPMTEST1>list-installed -tree
osex-ipm-demo 1.0.0
├──osex-ipm-hello 1.0.0
└──osex-ipm-numbers 1.0.0
zpm-registry 1.3.2
└──yaml-utils 0.1.4

zpm:IPMTEST1>publish -verbose osex-ipm-hello

[IPMTEST1|osex-ipm-hello]       Reload START (/home/irisowner/work/objectscript-ex/ipm/hello/)
Skipping preload - directory does not exist.
Load of directory started on 10/29/2024 19:14:29 '*'

Loading file /home/irisowner/work/objectscript-ex/ipm/hello/src/OSEX/ipm/hello/Hello.cls as udl
Load finished successfully.

[IPMTEST1|osex-ipm-hello]       Reload SUCCESS
[osex-ipm-hello]        Module object refreshed.
[IPMTEST1|osex-ipm-hello]       Validate START
[IPMTEST1|osex-ipm-hello]       Validate SUCCESS
[IPMTEST1|osex-ipm-hello]       Compile START
Compilation started on 10/29/2024 19:14:29 with qualifiers 'd-lck'
Compiling class OSEX.ipm.hello.Hello
Compiling routine OSEX.ipm.hello.Hello.1
Compilation finished successfully in 0.007s.

[IPMTEST1|osex-ipm-hello]       Compile SUCCESS
[IPMTEST1|osex-ipm-hello]       Activate START
[IPMTEST1|osex-ipm-hello]       Configure START
[IPMTEST1|osex-ipm-hello]       Configure SUCCESS
Studio project created/updated: osex-ipm-hello.PRJ
[IPMTEST1|osex-ipm-hello]       Activate SUCCESS
[IPMTEST1|osex-ipm-hello]       Package START
Exporting 'OSEX.ipm.hello.Hello.cls' to '/usr/irissys/mgr/Temp/dirfi49Wp/osex-ipm-hello-1.0.0/src/OSEX/ipm/hello/Hello.cls'
Exported to /usr/irissys/mgr/Temp/dirfi49Wp/osex-ipm-hello-1.0.0/module.xml
Module exported to:
        /usr/irissys/mgr/Temp/dirfi49Wp/osex-ipm-hello-1.0.0/

Module package generated:
        /usr/irissys/mgr/Temp/dirfi49Wp/osex-ipm-hello-1.0.0.tgz
[IPMTEST1|osex-ipm-hello]       Package SUCCESS
[IPMTEST1|osex-ipm-hello]       Register START
[IPMTEST1|osex-ipm-hello]       Register SUCCESS
[IPMTEST1|osex-ipm-hello]       Publish START
Publish to: http://localhost:52773/registry/
[osex-ipm-hello]        Publish FAILURE
ERROR! Publishing module, authorization required.
zpm:IPMTEST1>
6
0 238
Question Jani Hurskainen · Oct 30, 2024

It's not supported at the moment but is it possible to implement the Sonatype Nexus (or JFrog Artifactory) support based on the current (or upcoming) IPM version?

In repo command help I see there is a support for filesystem repositories (which I have not yet tried) and my current (hopefully not far-fetched) interpretation is the IPM is designed to be able to support different repositories:

zpm:IPMTEST1>help repo
[...]
  ■ Filesystem repository:
    ∙ -filesystem, -f, -fs : Create/update a filesystem repository
    ∙ -depth, -d <value> : For filesystem repositories, specifies the depth (number of folders underneath the root) to search for files named module.xml
    ∙ -path, -p <value> : For filesystem repositories, specifies the path to the root directory
[...]
  ■ Examples
    ∙ repo -name LocalFiles -snapshots 1 -fs -depth 2 -path C:\MyWorkspace\RootModuleDir\
      Create a repository pointing to the filesystem with name LocalFiles, accepting snapshots, looking for files named module.xml up to 2 directories deep in C:\MyWorkspace\RootModuleDir\
5
0 230
Question Jani Hurskainen · Oct 30, 2024

I'm trying package IPM command but I'm getting the following error:

zpm:IPMTEST1>package -verbose -only -path /home/irisowner/ osex-ipm-hello

[IPMTEST1|osex-ipm-hello]       Package START
Exporting 'OSEX.ipm.hello.Hello.cls' to '/home/irisowner/src/OSEX/ipm/hello/Hello.cls'
Exported to /home/irisowner/module.xml
Module exported to:
        /home/irisowner/

[osex-ipm-hello]        Package FAILURE
ERROR! ObjectScript error: <VALUE OUT OF RANGE>zConstructTar+19^%ZPM.Utils.FileBinaryTar.1

What's wrong here?

I can see all the correct module files created:

$ pwd
/home/irisowner
$ ll module.xml src/OSEX/ipm/hello/Hello.cls
-rwxr-xr-x 1 irisowner irisowner 494 Oct 30 09:12 module.xml*
-rwxr-xr-x 1 irisowner irisowner 111 Oct 30 09:12 src/OSEX/ipm/hel
2
0 164
Question Jani Hurskainen · Oct 28, 2024

I'm trying out the package manager (IPM). I'm trying to create a local (private) registry. To me it looks like the local registry installation succeeded but I can't figure out how to use it.

I'm using latest stable v0.7.3.

I have uploaded one module there (as told in one forum post):

$ curl http://localhost:52774/registry/
{"version":"1.3.2"}
$ curl http://localhost:52774/registry/packages/-/all
[{"name":"objectscript-math","description":"Math library for InterSystems ObjectScript","repository":"https://github.com/psteiwer/ObjectScript-Math/","origin":"","versions":["0.0.5"],"is_owner":0}]
4
0 189
Question Kwabena Ayim-Aboagye · Jul 9, 2024

I'm working with isc.rest and am going through the tutorial right now. My project directory exists on my IRIS server. When I try to create a module.xml file in the root package, I get a #16006 error. I see that there is a "generate" command for zpm that should create a module.xml for me on my local filesystem. How can I create this module.xml in the same folder that holds my code living on the IRIS server?

1
0 198
Question Yuri Marx · Nov 7, 2023

When using docker compose, I can create ENV variables using environment section, like this:

version: '3.6'
services:
iris:
build:
context: .
dockerfile: Dockerfile
target: final
restart: always
command: --check-caps false --ISCAgent false
environment:
      - JIRISREPORT_PATH=/home/irisowner/dev/jirisreport.jar
ports:
      - 1972
      - 52773
      - 53773

In this case I created an ENV variable JIRISREPORT using Docker compose, but using IPM xml manifest, Can I set ENV variables?

1
0 323
Question John Murray · Jun 11, 2023

I am trying to write the module.xml for a package that creates a web application associated with the %SYS namespace.

I didn't find a way of specifying that the CSPApplication tag should create the app for a specific namespace. It apparently gets set up to use the namespace in which the package install command gets run. This contrasts with how an installer manifest works, where the <CSPApplication> tag is put inside a <Namespace> tag.

So I wondered if I could make my package fail installation if the current namespace isn't %SYS. My package doesn't need to load anything, only create the web app.

3
0 425
Question sween · Oct 5, 2022

Anybody willing to share a method form the ZPM cli (or othewise) where zpm will "Install package if not already installed?"  I would want this to count for updates too I think as I would want to control that too.

The use case is in a CI-CD pipeline, where the pipeline can be used to provision start to state, but for somethings only do once.  An example would be I have a package that provisions a fhir package or search parameter in my own way, but doesnt do it again when somebody merges operational code and the pipeline fires again, it would not attempt to load the fhir package again.

6
0 363