We are happy to present the bonuses page for the applications submitted to the InterSystems "Full Stack Programming" Contest 2026
See the results below.
We are happy to present the bonuses page for the applications submitted to the InterSystems "Full Stack Programming" Contest 2026
See the results below.
I wanted to try vibecoding a real backend + frontend setup on InterSystems IRIS, ideally using something realistic rather than a toy example. The goal was simple: take an existing, well-known persistent package in IRIS and quickly build a usable UI and API around it — letting AI handle as much of the boilerplate as possible. Here is the result of the experiments.
Hi developers!
I'm testing vibecoding with ObjectScript and my silicon friend created a code-block that got me thinking "what's wrong"?
Here is the piece of code:
for i=0:1:(json.%Size()-1) {
set p = json.%Get(i)
if (p="value1")!(p="value2") {
quit1
}
AI wanted to quit from a method with a return value. Good intention, but bad use of the command.
And ObjectScript compiler compiles this code with no error(?) (syntax linter in VSCode says it's a syntax, kudos @Brett Saviano ).
But in action, it produces <COMMAND>, of course.
Wanted to share with you as this is a good case where return comma
Hi Developers!
Currently I have 2000+ lines in a class, and I think it's a lot already? What are the best practices?
if 10K lines OK? How do you cope with it? Please share?

Hi developers!
In a method I need to return a result as a dynamic object aka JSON Object. And here is my logic:
Classmethod Planets() as%DynamicObject {
set val1="Jupiter"
set val2="Mars"// this doesn't work! cannot compile
return {"value1":val1, "value2":val2}
}So I need to do the following:
Classmethod Planets() as%DynamicObject {
set val1="Jupiter"
set val2="Mars"
set result={}
set result.value1=val1
set result.value2=val2
return result
}The second case works.Maybe I'm preparing the Dynamic Object in the wrong way?Can we just use variables inside JSON?
Here are the technology bonuses for the InterSystems Full Stack Contest 2026, which will give you extra points in the voting:
See the details below.
Hi folks!
Is there any way to know the text of the SQL queries executed against the IRIS server?
My case: I have an SQL class query with a few parameters and and some combination of values causes unexpected results.
It'd be great if I could just copy the query from some log of queries done vs my IRIS the server. Cannot find it easily, though. Any advice?
Hi folks!
How can we handle JSON boolean types in IRIS?
I'm having a UI sending me a JSON payload as:
{
"id": 1,
"strprop": "string",
"boolprop": true
}The class is
MyPackage.MyClass Extends (%Persistent, %JSON.Adaptor)
{
strprop as%String;
boolprop as%Boolean;
}And I'm trying to update an instance of a MyPackage.MyClass and I'm getting a datatype-related error, something like %JSONImportInternal+269...
How am I supposed to deal with booleans in JSON with IRIS and ObjectScript? Any best practice advices?
Hi Developers!
Sometimes we need to deal with classes/tables where the primary key and the IdKey are something that is maintained by yourself.
What is the proper way to generate a new ID in case where ID is a %BigInt?
Property id As %Library.BigInt
Are there any system methods to provide it?
There is data already imported via SQL, so there is no last ID stored in ^myclassD, so I cannot do $I(^myclassD).
Thinking of:
set newid=$O(^myclassD(""),-1),newid=$I(newid)What do you think?
Hi Developers!
Consider I have a persistent class derived from %Persistent and I want it to be derived from %JSON.Adaptor to enjoy all the JSON features.
Can I do it programmatically?
So, it'd be wonderful to have a method in some util class that makes it happen? Something like:
Do ClassUtil.AddAncestor("MyPackage.MyPersistentClass","%JSON.Adaptor")
Any ideas?
Hi developers!
There is a neat feature of ObjectScript classes - Query element, which allows you to write in a clear SQL (without any & or ()), pass parameters to it and call it from ObjectScript as do QueryNameFunc() or via Call SQLProcedureName via SQL, .e.g.
Query MyQuery(p as%String) as%SQLQuery [SQLProc]
{
SELECT * FROM MyTable
WHERE Name=:p
}All works fine, but when I tried to use the same for a DELETE statement see the following error:
SELECT expected, DELETE found ^ DECLARE Q1 CURSOR FOR DELETE
Is the Query element for SELECT only? What am I doing wrong? )
Hi developers!
There is a very neat variable in IPM ${ipmdir} that lets packages be installed on a particular IRIS server and ensures that the data and resources they bring don't mess around as ${ipmdir} variable during the installation transforms into:
iris installation dir/ipm/package_name/version/whatever_you_install_here
It is very convenient, e.g., to bring some data and resource files that can be useful during the installation setup, e.g., via FILECOPY. Indeed, suppose you bring some csv_file, e.g. titanic.csv via FILECOPY as:
<FileCopy Name="data/titanic.csv" Target="${ipmdir}data/titanic.csv"/>or even the whole folder of data in the source code repo into the package:
<FileCopy Name="data/" Target="${ipmdir}data/"/>And in the case of Iris in Docker it resides in:
/usr/irissys/ipm/package_name/1.0.0/data/titanic.csv
This is all great, but is there any way for the installed code to determine the location of the data files? It'd be neat to let the installed app know somehow where is the data that came with it? Could it be the method in the IPM client that will resolve ${ipmdir} for the app?
Hi developers!
Happy holidays!
In ObjectScript there is neat option to log errors - call Log() method of an exception intance, e.g.:
ClassMethod MyMethod() {
Try {
w1/0
}
Catch e {
do e.Log() // logging error in the app logwrite"the error happened: "_e.DisplayString()
}
}Is there anything like that for Embedded Python? e.g:
ClassMethod MyMethod() [Language = python] {
try:
print(1/0)
except ZeroDivisionError as e:
// how can I log e into IRIS App Error Log here?
print("Caught exception: " + str(e))
}Any ideas?
Hi noble developers!
Have a question/discussion. Sometimes, while developing, we'd need to connect VSCode directly to a remote server (e.g., stage one) for debugging purposes. And after change back to local one. And then to remote again.
How do you perform this switching in VSCode in a convenient way?
I have several settings.json files (settings_local, settings_remote) which I put to a main settings.json when I need to make VSCode to connect to switch the connection:

Is it the best practice?
We are happy to present the bonuses page for the applications submitted to the InterSystems "Bringing Ideas to Reality" Contest 2025!
See the results below.
Here are the technology bonuses for the InterSystems "Bringing Ideas to Reality" Contest 2025 that will give you extra points in the voting:
See the details below.
Hi developers!
How do you debug implementation code in .impl classes of REST.API in InterSystems IRIS?
Especially if you don't have access to globals, so no things like:
Set^AAA="here we are"not possible in this case.

Suppose I have the following signature of the REST.API method called as POST and containing JSON. :
Hi Developers!
Here are the technology bonuses for the InterSystems .Net, Java, Python, and JavaScript Contest that will give you extra points in the voting:
Hi folks!
Sometimes, when designing a class method and feeding it with more and more useful features, very soon the number of parameters can reach 10 and even more.
It becomes pretty difficult for users of useful methods to remember the position of the important parameter, and it is very easy to misuse the position and transfer the wrong value to the wrong parameter.
Here is an example of such a method (I asked GPT to create a method with 20 params):
ClassMethod GenerateReportWith20Params(
pTitle As%String = "",
pAuthor As%String = "",
pDate As%String = "", // e.g. 2025-09-03
pCompany As%String = "",
pDepartment As%String = "",
pVersion As%String = "1.0",
pFormat As%String = "pdf", // pdf|html|docx
pIncludeCharts As%Boolean = 1,
pIncludeSummary As%Boolean = 1,
pIncludeAppendix As%Boolean = 0,
pConfidentiality As%String = "Public",
pLanguage As%String = "en",
pReviewers As%String = "", // CSV, e.g. "Alice,Bob"
pApprover As%String = "",
pLogoPath As%String = "",
pWatermarkText As%String = "",
pColorScheme As%String = "default",
pPageSize As%String = "A4",
pOrientation As%String = "Portrait",
pOutputPath As%String = "report.pdf"
) As%Status
{
// implementation
}Hi folks!
It is very easy to import CSV data into IRIS. But what if we want to preserve the original IDs in CSV?
Recently I came across with the situation when I needed to import two csv's into IRIS which were linked by one column referencing to another csv's col: a typical Foreign Key and Primary Key situation, where csv1 contains this column as Primary Key, and csv2 as Foreign key with id's related to csv1.

The image is generated by ChatGPT so don't blame it - it tried its best to generate countries as primary keys with countries.csv-cities.csv relationship :)
We are happy to present the bonuses page for the applications submitted to the InterSystems Developer Tools Contest 2025!
See the results below.
Here are the technology bonuses for the InterSystems Developer Tools Contest 2025 that will give you extra points in the voting:
See the details below.
Hi noble devs!
Just building a simple frontend->JSON->IRIS backend story, and figured that IRIS while importing via %JSON.Adaptor wants JSON fields to match property names, meaning even should match the case. Like:
{ name: "John",
surname: "Doe"}will have issues while saving the dynamic object to a class Sample.Person with:
Class Sample.Person Extends (%Persistent, %JSON.Adaptor)
{
Property Name: %Sting;Property Surname: %String;
}As soon as the case is not the same...
Is there any setting to fix this?) By fixing I mean I want IRIS to don't care about the case JSON fields, as it
Hi developers. Just want to share with you a finding that might save you a few important minutes of your developer life with InterSystems IRIS.

But!
It should work; you deployed the REST API correctly, and everything is just in place.
What can go wrong?
Hi fellow developers!
Curious if you guys use CreatedAt and LastUpdated properties in your classes?
Created to stamp when the record was created and LastUpdated when it was last updated. Where it can be useful - almost everywhere )) I find it convenient in records sorting (e.g. by creation or last update), in sync (with other systems), and so on, for better analytics.
Do you use it all the time for all the classes?
If don't, why not? What do you use instead?
What property type do you use - %TimeStamp? %DateTime?
What is the best practice to have CreatedAt filled automatically during creation and LastUpdated on every successful save (guess it could be in %OnSave)?
Please share your experience /thoughts?
Hi IRIS experts!
I have a parameter in a class that stores a global name:
Parameter GlobalName = "^AGlobal";
then I'm trying to call it as:
set gn=$name(..#GlobalName)
to use it later as:
set @gn@("index")="value"
But! I'm having syntax at set gn=$name(..#GlobalName)
What am I doing wrong?
Hi Developers!
We are happy to present the bonuses page for the applications submitted to the FHIR and Digital Health Interoperability Contest 2025!
See the results below.
Hi Developers!
Here are the technology bonuses for the InterSystems FHIR and Digital Health Interoperability Contest 2025 that will give you extra points in the voting:
Hi developers!
Observing the avalanche of AI-driven and vibe-coding developer tools that have been appearing lately almost every month with more and more exciting dev features, I was puzzled whether it is possible to leverage it with InterSystems IRIS. At least to build a frontend. And the answer - yes! At least with the approach I followed.
Here is my recipe to prompt the UI vs InterSystems IRIS Backend:
Here is the result of my own exercise - a 100% prompted UI vs IRIS REST API that allows to list, create, update delete entries of a persistent class (Open Exchange,frontend source, video):
What is the recipe in detail?
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?
For example I develop the app in the USER namespace so I list the access to