Yes. 

It maybe a different thing: the format with <Export generator> is outdated and Studio together with LoadDir both support the outdated format and don't support the "new" one without the <Export> element, which is in Atelier API that VSCode is using (why do we still use this Atelier name? )

So, I'd better ask to support the new format, as the Export tag thing also has an annoying "feature" that it incudes date/time of export and this changes the file with every save/export even there were no changes.

Sounds like that.

Actually, I tried with another proejct and failed going with PKG approach, as DFI are being exported in a shorter form for me, .e.g.:

<?xml version="1.0"?>

<dashboard xmlns="http://www.intersystems.com/deepsee/library" name="AnnualPotatos" folderName="" title="Annual Potato Analytics" description="" keywords="" owner="" shared="true" public="true" locked="false" resource="" timeCreated="2025-08-26T23:29:13.2Z" createdBy="SuperUser" category="" bookCover="" scheme="" worklistCount="2" snapTo="true" snapGrid="true" gridRows="10" gridCols="10" canResize="true" canModify="true" showTitleBar="true" titleBarOpacity="" titleBarColor="" selectedTitleBarOpacity="" selectedTitleBarColor="" titleBarTextColor="" selectedTitleBarTextColor="" titleBarFont="" companyName="" companyLogo="" companyStyle="" backgroundColor="white" backgroundImage="none" backgroundRepeat="no-repeat" backgroundSize="100% 100%" backgroundOpacity="1" widgetBorders="1px solid #F0F0F0" widgetBordersSwitch="edit" widgetBordersColor="#F0F0F0" widgetBordersStyle="solid" widgetBordersWidth="1" widgetBordersToggle="true">

<widget name="Widget2" type="pivot" subtype="comboChart" subtypeClass="comboChart" title="Potato Sales and Import, Tonnes" dataSource="Potatos/Yearly.pivot" dataLink="" drillDownDataSource="" width="200" height="200" sidebarContent="" showSidebar="false" sidebarWidth="" maximized="false" homeRowL="0" homeColL="0" colSpanL="7" rowSpanL="7" showToolbar="true" showToolbarBottomBorder="true" showToolbarOnlyWhenMaximized="false" colorToolbar="#F0F0F0" opacityToolbar="1" backgroundColor="#F0F0F0" opacity="1" theme="" dataColorList="">

<control name="" action="applyFilter" target="" targetProperty="[Country].[H1].[Country]" location="widget" type="auto" controlClass="" label="Country" title="" value="" text="" readOnly="false" valueList="" displayList="" activeWhen="">

<valueRequired>false</valueRequired>

</control>

<override name="comboChart">{legendVisible:'false',xAxis:{_type:'axis'},yAxisList:[{_type:'axis'}],seriesTypes:',bar',_type:'comboChart'}</override>

</widget>

</dashboard>

In your case there is also an export tag:

<?xml version="1.0"?>

<Export generator="IRIS" version="26" zv="IRIS for Windows (x86-64) 2024.3 (Build 217U)" ts="2025-09-21 16:49:04">



<dashboard xmlns="http://www.intersystems.com/deepsee/library" name="AnnualPotatos" folderName="Potatos" title="Annual Potato Analytics" description="" keywords="" owner="" shared="true" public="true" locked="false" resource="" timeCreated="2025-08-26T23:29:13.2Z" createdBy="SuperUser" category="" bookCover="" scheme="" worklistCount="2" snapTo="true" snapGrid="true" gridRows="10" gridCols="10" canResize="true" canModify="true" showTitleBar="true" titleBarOpacity="" titleBarColor="" selectedTitleBarOpacity="" selectedTitleBarColor="" titleBarTextColor="" selectedTitleBarTextColor="" titleBarFont="" companyName="" companyLogo="" companyStyle="" backgroundColor="white" backgroundImage="none" backgroundRepeat="no-repeat" backgroundSize="100% 100%" backgroundOpacity="1" widgetBorders="1px solid #F0F0F0" widgetBordersSwitch="edit" widgetBordersColor="#F0F0F0" widgetBordersStyle="solid" widgetBordersWidth="1" widgetBordersToggle="true">

<widget name="Widget2" type="pivot" subtype="comboChart" subtypeClass="comboChart" title="Potato Sales and Import, Tonnes" dataSource="Potatos/Yearly.pivot" dataLink="" drillDownDataSource="" width="200" height="200" sidebarContent="" showSidebar="false" sidebarWidth="" maximized="false" homeRowL="0" homeColL="0" colSpanL="7" rowSpanL="7" showToolbar="true" showToolbarBottomBorder="true" showToolbarOnlyWhenMaximized="false" colorToolbar="#F0F0F0" opacityToolbar="1" backgroundColor="#F0F0F0" opacity="1" theme="" dataColorList="">

<control name="" action="applyFilter" target="" targetProperty="[Country].[H1].[Country]" location="widget" type="auto" controlClass="" label="Country" title="" value="" text="" readOnly="false" valueList="" displayList="" activeWhen="">

<valueRequired>false</valueRequired>

</control>

<override name="comboChart">{legendVisible:'false',xAxis:{_type:'axis'},yAxisList:[{_type:'axis'}],seriesTypes:',bar',_type:'comboChart'}</override>

</widget>

</dashboard></Export>

And zpm load imports the latter one, but not the first type.

Also, if I save it in VSCode, it removes <export> tag as a result of compiling. But the same doesn't let it be imported via PKG approach.

Next is editing and control versioning in VS-Code.

DFI changes in VS-Code are not propagating to connected IRIS automatically after saving. @Brett Saviano  - any hints how can this be set up?

In order to make changes in the Dashboard portal to be automatically reflected, one can use git-source-control. After the following lines:

USER> zpm "install git-source-control" 

USER> do ##class(%Studio.SourceControl.Interface).SourceControlClassSet("SourceControl.Git.Extension")

changes made in Dashboard Portal editor are being exported into VSCode (into a file), but the location is wrong - git-source-control has created cls/ZXFree folder and dashboard.dfi

But I expected src/ZXfree.dashboard.DFI, as there is no Folder in a dashboard, just title="ZXFree"

@Pravin Barton , @Timothy Leavitt  - could you please take a look?

Like the minimalistic setup, but this doesn't work on mac:

 12/19/25-12:27:01:978 (467) 0 [Utility.Event] Initializing Interoperability during system startup
iris-1  | [INFO] ...started InterSystems IRIS instance IRIS
iris-1  | [INFO] Executing command /docker-entrypoint.sh iris-after-start '/ext/ascript.sh'...
iris-1  | [ERROR] /docker-entrypoint.sh: line 196: /ext/ascript.sh: Permission denied
iris-1  | [ERROR] Command "/docker-entrypoint.sh iris-after-start '/ext/ascript.sh'" exited with status 32256
iris-1  | [FATAL] Error executing post-startup command
iris-1  | [INFO] Shutting down InterSystems IRIS instance IRIS...

Hi @Brett Saviano !

I double checked the export format - the format is the same now and is supported both in IPM and VSCode ObjectScript.

The only issue left is file naming: Atelier REST API exports DFI file names with dFI extension as:

Potatos-AnnualPotatos.dashboard.DFI

at the same time IPM can consume DFI resources if they are presented as XML (tested in 0.10.4), e.g.:

Potatos/AnnualPotatos.dashboard.xml

Inviting @Pravin Barton also, maybe there are plans to do something with this in the future. 

And it exports files with "-" as a folder delimeter. Imagine if you have 100+pivots and dashboards in folders - in the code repository, they all will be in one folder with 100+ files with "-" as delimiters. Doesn't sound like a convenient approach. 

It's like ObjectScript code files will be named as:

/src/package-subpackage-class.cls

and all reside in one folder, instead of being distributed in packages as folders, as it is working now:

src/package/subpackage/class.cls

@Brett Saviano - hope we could fix this too in the future.
 

And here is an example of "proper" using DFI resources - OEX module, Github.

There is one dashboard and two pivots here:

 <Resource Directory="dfi" FilenameExtension="dfi" Name="Potatos-AnnualPotatos.dashboard.DFI" />
      <Resource Directory="dfi" FilenameExtension="dfi" Name="Potatos-Totals.pivot.DFI" />
      <Resource Directory="dfi" FilenameExtension="dfi" Name="Potatos-Yearly.pivot.DFI" />

Git-source-control "supports" editing in the UI and exporting to files, but it is quite "buggy" - I hope @Timothy Leavitt and Co will introduce 100% support of DFI someday. Today I prefer to use "isc-dev" and export all the DFI from the namespace into the dev folder to commit changes to the individual DFI files.

But still, the question for the iPM/ObjectScript VSCode team is why the Other section (server-side viewer in VSCode ObjectScript) exports DFI in a different format, which cannot be imported later with the system import method, and thus is not being imported by IPM. Maybe @Brett Saviano can comment here:

Also, why is the naming of resources so complex (you need to use "-" as the folder delimiter and follow this in folder structures.

But it works somehow.
 

Hi Ashok!

Yes, you can use IPM to support DFI files.

"Lazy", aka "dirty" way - introduce the following resource:

<Resource Name="*.DFI" />

like here, which will package everything you have in a src/dfi folder. Convenient but not optimal and can introduce problems while working with more than one IRIS BI packages.

in this case resource will import all the 100+ DFIs (pivots, dashboards) into IRIS (via load command) and package/publish then:

Don't ask me, why DFI is an XML in fact.