Choose Language Hide Translation Bar

Add-In Manager


Add-In Manager enables you to easily build and re-build Add-In files, manage versions of an add-in over time, directly access source files, and have extra customizations for your add-in. Now with version 2.0 of Add-In Manager, you can control your entire JSL application development life-cycle now that you can deploy your add-ins out to your users directly from Add-In Manager!

Quickly Build Add-Ins

The fundamental feature of Add-In Manager is the ability to build a JMP add-in file directly from source files. This feature was initially included in my Custom Add-In Builder add-in and Add-In Manager has taken the basics of that add-in and improved upon it.

Add-In Manager.PNG

Deploy an Add-In to Users

With version 2.0 of Add-In Manager, you can now deploy (or push) add-ins out to your users directly from Add-In Manager. You can deploy to a TEST location for your users to test out your add-in and you can also deploy to a PROD location.




When deploying to PROD, a JSL script with an Associative Array is automatically updated with the latest publish date/time. This Associative Array can be used by an auto-generated 'updateCheck.jsl' script that can compare the build date of the user's add-in to the build date according to the Associative Array. If a newer version of the add-in is available, the user will see the following window, where they can choose to update to the latest version. This concept using an Associative Array to check for updates was adapted from @brady_brady's method of using a table with publish dates. This method is described in @Jeff_Perkinson's post How to write self-updating JMP add-ins.


Update Available.PNG

Manage Versions of an Add-In

Add-In Manager has the ability to automatically keep a version history of an add-in file each time a new one is built. It allows you to install, restore, or delete a previous version of an add-in. You can optionally include a comment for each build so you can keep track of what changes went into each version.


Making Extra Add-In Customizations

Add-In Manager allows you to make a few customizations to your add-in that previously required manual changes to XML. Below are the extra customizations available in Add-In Manager.

  • Max JMP Version
  • Built-in JMP Icons for menu items
  • Insert before position for specifying a position for a menu item
  • Custom menu bar – create your own menu or use an existing menu other than “Add-Ins”
  • New in Add-In Manager 2.0:  Multiple main menu's within a single add-in

Menu Items.png

Accessing Source Files Directly from JMP

On the Files tab within Add-In Manager, you can open files in your source folder directly from JMP by double-clicking on the desired file in the table.


Automatic Management of Custom Metadata

With Add-In Manager version 2.0, you can create your own custom metadata in addition to the metadata automatically included and managed by Add-In Manager.

Custom Metadata.png

Managing Previously Installed Add-Ins

From the Installed tab, you can enable, disable, or register installed add-ins as well register add-ins that are not installed.


System Requirements

This add-in is supported on Windows and Mac operating systems with JMP 13.

Blog Series

Add-In Manager, Part 1: Defining and building a JMP add-In

Add-In Manager, Part 2: Deploying auto-updating add-ins to users

Add-In Manager, Part 3: Advanced customization


Version 1.1-1.3 (October 16, 2017)


  • Fixed a few cases that caused the add-in to throw an error
  • Added new preferences for controlling whether menus and toolbars are shown

Version 2.0 (November 22, 2017)


  • Added support for deploying add-ins to TEST and PROD locations.
  • Added support for custom metadata via an Associative Array that can be included in your scripts.
  • Added ability to have multiple main menus in a single add-in.
  • Added ability to copy and paste menu items in the Menu Item Tree.
  • Added support for establishing a source folder from an existing 'jmpaddin' file. 
  • Added ability to check for a new version, pulled directly from the JMP Community.
  • Added preference to automatically install add-ins after being built.
  • Removed support for building multiple add-ins at a time, for various reasons.
  • Squashed other various bugs.

Version 2.1 (February 26, 2018)


  • Added preference to exclude invisible files and folders (i.e. files/folders that start with a period). This is useful if you're using a version control system, like Git.
  • The customMetadata.jsl file is now ignored when determining if you have the latest version installed. 

Version 2.2 (March 8, 2018)


  • Fixed an issue when adding more than two top-level main menus.
  • Added new icons to selection screen. Removed icons only available on one OS.

Version 2.3 (April 6, 2018)


  • Fixed error on Mac caused when a source folder was renamed or deleted
  • Preferences window now works even if you don't have the Consolas font installed on your computer.

Let me know if you find any issues!


The add-in does not seem to get installed on my computer. This seems to be the issue with some of the recently uploaded add-ins. Does this add-in require JMP-13?

I have JMP 12.2 on my computer.


Hi @tejvishnu,

Yes, JMP 13 is required to install this add-in. Unfortunately, I was not able to make this add-in compatible with JMP 12. I have updated the post to include this this information.




I want to be so good, and charitable and thank JMP developers for the 13th version of a software program that I love to teach with. I've had it since version 5.0, with it's well thumbed paper manuals and to be honest nothing has been added that is of any value to me since that version. But loving version 5.0 as I did, I have happily and willingly upgraded each year. And then the ROC-Curve & partial Area Under the Curve Analysis script came along which was beautiful in JMP12. I have set up a teaching session to show my students about ROC curves.... and I upgraded to v13...... and now it doesn't display the curves. boo. 


Thank you for this! Now creating and updating add-ins so easy that I develop and improve my own add-ins more often than in the dark ages before this tool.



Thanks again for this addin. I am finally getting up to speed with the new version and taking advantage of some of your improvments on what I was doing manually :) My one ask, and I'm not sure if this is possible, is to be able to build several addins at once. I know the bottom panels for information and directories are addin specific, but perhaps those could disappear if more than one addin is selected. Then all selected could be DEVd/Deployed/etc.

I manange over 40 addins right now and I often make updates in batches so being able to do a bunch of all of the addins at once would be amazing!


Hi Justin,

In JMP 14.0.1, I keep getting this error:


Error Message: {"argument should be list"(1, 2, "Concat Items", Concat Items /*###*/(errorList, " "))} Error: argument should be list 1 time(s). Type: Error Function Name: Concat Items Function being executed: Concat Items /*###*/(errorList, " ") Call Stack: getLastModifiedDateOfNewestFile getStatusIcon refreshAddinTableBox initialize


Any ideas? This is Manager 2.2.






If you still have version 1.3 of the add-in, you can change the ID and menu item name for that version and use it along side the new version. Version 1 allows you to use check boxes to build multiple at a time and should be able to hook up with the data table used by version 2. There were a lot of architectural changes in v2.0 so unfortunately I had to remove the checkboxes. I have it on my list to add those back in the future.




Thanks for reporting this! It looks like you are using a Mac, and you must have renamed or deleted one of your source folders. I have added a check for this now (v2.3) so it should not fail anymore.


@Justin_Chilton Thanks! I'll give that a try.




Version 2.3 works like a charm on my Mac! Thank you!!!





I'm having an issue with the autoupdate feature.  I have traced the issue back to the updateCheck.jsl script. 


The following line fails, then the try statement exits.

customMetadata_aa = Include("customMetadata.jsl" );


If I add the following to the file path there are no issues and it looks like things work as advertised.   


Am I supposed to be doing this for each addin or should this be automatic?






Hi Aubrey,

The Include statement within the updateCheck.jsl script uses a relative path to the customMetadata.jsl file. As long as both of those files are in the same folder, it should work properly. What does the folder structure look like for your add-in?

Feel free to send me a private message if you need to send anything you don't want on this public post.




Hello Justin,

Add-In Manager v2.3 is working wonderfully in all aspects for me but one, I am unable to get the updateCheck to correctly push updates.  Some facts:
- My code outside of the update check runs correctly.

- My PROD folders "Metadata" and "Deployment" are both on server locations under the same parent folder, and I have verified users have access to them both.

- Within the Preferences section, I have selected "Include Update Check Script", and copied the include statement provided in this section into my code.  I have edited the add-in ID section of this statement from ( to match my add-in.  I did not edit anything else within this statement and did not edit anything within the updateCheck.jsl script.

- When making changes to the add-in and deploying to PROD, I have verified that the "pubDate" within the publishedAddins.jsl file located in the Metadata server file has changed with each deployment 

- I have had users download an existing version of the file located within the PROD folder, close JMP, reopen JMP, and run the add-in with success.

- I have deployed a newer iteration to PROD, verified the pubDate changed, and requested the previous user to reopen JMP and run the existing add-in.  The user is never prompted to update the add-in.

- I have had the same user go into the PROD folder and reinstall the add-in, which has successfully updated the Add-In.


Hi @Adam_R,

Thanks for all the work on the details! A few questions and things to try:

  • Do you have the "Create Metadata File" preference set under the "Custom Metadata" preference group? This file is required for the update script to pass.
  • What is the directory structure like for your addin? Is the script calling '' in a lower level folder? If so, the updateCheck.jsl file is expecting it to be in the same folder where the folder is being called from, making the function not work. A workaround for this is to add another JSL file at the root level of your addin (same as customMetadata.jsl and updateCheck.jsl) that calls the updateCheck function and just include that file in the lower level JSL script. Another option is to edit the updateCheck.jsl script to use '$addin_home(' instead of just the relative file name. If this is the issue, I can update the addin to make this more flexible where it's not so dependent on the default directory of where you call the function. 
  • The updateCheck.jsl script is implemented so it fails silently using a Try() so to not mess with the workflow of your add-in. So, if neither of the first two suggestions fix it, could you comment out the Try() within the updateCheck.jsl file and let me know what error message you get when you attempt to check for an update?

Let me know if you have any questions.




Hello Justin,

As this is my first Add-In and I am an infant in regards to JMP experience (around 11 months of use), I may begin asking simple questions now as I work through activating the update-check function.  I have created a simple test add-in to focus on only the update function so I can understand this functionality before applying it to my more robust program.




aa = Include( "$ADDIN_HOME(com.jmpTest.myjmpaddin)\customMetadata.jsl" );
Include( "$ADDIN_HOME(com.jmpTest.myjmpaddin)\updateCheck.jsl" );;
New Window ("Test 3",
     Panel Box ("Test 3",
          Text Box("Test 3")



Responding to your questions:

  • Did I have the "Create Metadata File" preference set?
    • I did have the checkbox selected for "Create Metadata File", but I did not have the custom metadata code containing the include statement within my script.  I have added this line of code to the row immediately before the update check code as you can see above, but it did not correct the issue.
  • What is the directory structure of my addin?
    • In the middle section of the Add-In Manager window, Under the Files tab, addin.def, addin.jmpcust, customMetadata.jsl, and updateCheck.jsl all exist within the same folder.  That folder exists in the same parent folder as the addin file itself (<Filename>.jmpaddin).
      • This folder exists on my C drive, NOT on the server.  Should I have saved these files to the server as well?
    • In the bottom section, Prod tab, I have all three options saving to a server location.  They each have their own folder, and all three folders exist within the same parent folder.
      • ARCHIVE – only contains previous iterations of the add-in as I deploy.
      • META – only contains the file publishedAddins.jsl
      • PROD – only contains the add-in installer file .jmpaddin
  • What error message do I receive when commenting out “Try()”
    • I receive the error message “Error with file:  Path is invalid:  \customMetadata.jsl”
      • I have tried changing the above location path from the $ADDIN_HOME... language to the exact location on my C drive as it is called out in the File tab (middle section).  It did not help, I received the same error message.

Thank you for your assistance!



Hi Adam,

Appologies for the delayed reply. Based on the error message you are seeing when removing the try, it looks like my assumption about the updateCheck script being able to find the customMetadata file was correct. I see where you have the '

aa = Include( "$ADDIN_HOME(com.jmpTest.myjmpaddin)\customMetadata.jsl" );' part of your script. However, you don't actually need to include the file there. Instead, you want to change the include within the updateCheck.jsl script. It should look something like the following (around line 11).

customMetadata_aa = Include( "$ADDIN_HOME(com.jmpTest.myjmpaddin)\customMetadata.jsl" );

Let me know if you have any additional questions.




Hi there, I have started using Add-In manager after many years of managing changes manually. However, I recently had an issue with the Menu items not being visible I updated to JMP 14.3.0 recently, not sure if this is related. I had no issues with this before. 


As you can see there are no errors in the build or deployment flagged so I'm at a loss as to what is happening.


Any help or suggestions are appreciated as I really don't want to have to rebuild it from scratch.






Screenshot 2019-05-23 at 10.43.58.png

Article Labels
Article Tags