19.1.3: Code Freeze 5/28/26 • 19.2: Code Approval Mode begins 6/18/26 • 20.0: open in main; Feature Freeze 7/23/26 • 20 EA4 Freeze 6/11/26
Welcome to the JMP Development Update for May 29, 2025!
Thanks to everyone who helped fix/test/integrate and verify functional bug fixes for our upcoming JMP 19.1.3 emergency bug fix release! All expected changes have been made, and we have reached our Code Freeze milestone, with Security Freeze to follow on June 4. We expect to release 19.1.3 in mid-June after QA completes installer testing for all products.
JMP 20 EA4 freezes in less than two weeks. For those of you who are new to this process, EA4 is the fourth iteration of JMP 20 features that we have made available for testing by a select group of customers interested in offering feedback. Developers, please continue to update your feature pages to detail new items that are ready for user testing!
JMP 19.2 Code Approval mode starts on 6/18/26. This release uses the maintenance track approval process detailed here in Confluence. It is highly encouraged that developers fix bugs in JMP 20 and allow testers to verify them prior to integrating into the 19.2 track.
Thanks very much to Caleb King and Simin Zheng for presenting a talk titled Applied Statistics in the Era of Artificial Intelligence at Thursday’s JMP Dev meeting! If you missed the meeting, you can find a recording here. I’m glad that we have so many people at JMP who are considering AI-related topics - like reliability of results - so thoughtfully. Near the end of the meeting, we even had a bit of a discussion about AI use in the classroom. Several interns kindly chimed in with comments about their own experiences using (or not using) AI in recent coursework. It was yet another chance to get to know our JMP interns a bit better and I appreciate people sharing. If you’re not in Cary, you might not have a chance to meet our interns in person, but you can read more about them here on InsideJMP!
Congratulations to Russ Wolfinger and his family on the occasion of his daughter Brenna’s wedding last week! Russ is happy to welcome his new son-in-law to the family and shared some wedding pictures in the meeting chat for the April session of our JMP Employee User Group (JEJUG) so I’m sure he won’t mind if I share them here too. If you attended the April JEJUG meeting or saw the recording, you’ll remember that Russ talked about Brenna wearing her grandmother’s wedding dress and the challenges they faced while looking for a specialized cleaner to make it wedding-ready again. It all turned out beautifully! Congrats to the happy couple!

General Announcements
Important Upcoming Dates
- JMP 20 EA4 Code Freeze – 6/11/26
- JMP 19.2 Code Approval - 6/18/26
- JMP 19.2 Code Freeze – 7/9/26
- JMP 20 EA5 Code Freeze – 7/23/26
- JMP 20 Feature Freeze – 7/23/26
- Please visit Confluence for a full list JMP 19 dates and JMP 20 dates.
JMP Development Updates
Core
- Xan: Continued work on custom JSL Graph Builder elements but putting aside for evaluation. Refined axis heuristic for low-resolution number formatting. Add PolySeg JSL support for row linkage.
DOE and Reliability
- Yen-Chun (intern reporting to Ryan Lekivetz): Attended several intern trainings this week, including improv and R&D tech training, which were a lot of fun and informative! For my internship project, I’m developing a model selection framework for order-of-addition (OofA) experiments, where the order of adding components matters. This week, I tested conventional model selection methods on common OofA datasets from the literature, and our next step is to incorporate ordering directionality into the analysis. Overall, it’s been an eventful and enjoyable week.:smiling_face_with_smiling_eyes:
- Jace (intern reporting to Ryan Lekivetz): During the first week of being here, I have started on generating OMARS designs so I can use them for my project later this summer. So far, I have been able to replicate several of the major designs listed in the original paper.
Hosting and Interfaces
- Michael H:
- Helped other developers get xcode-unlock-p4.sh script to work. Since the fix involved an issue with their .zprofile vs. .profile, I improved the script to make it a bit more bulletproof and to also better check its arguments when invoked manually.
- Helped Jim B debug an issue with the Thread Sanitizer test run. The fix was to upgrade to Xcode 26.5 on the build/test machine, to better match the macOS version it was running.
- Integrated a fix to JMP 19.2 for .sql files on Mac. macOS Tahoe changed the UTI for these files and it caused a regression that Mandy discovered.
- Pushed a fix to both JMP 20 and JMP 19.2 to allow JMP to open .xlsx, .json, and .xml files via drag & drop. This got broken in 19.0 and was reported by a user.
- Investigated new Xcode 26.5 static analyzer issues and pushed fixes for most of them. There are still a handful of false positive issues I didn’t fix because the fix would be too invasive. I will investigate changing the reporting tool to ignore them instead.
Interactive HTML
- Arnav Murthi (intern reporting to John Powell):
- Learned JMP by completing the user community tutorial
- Set up various dev tools on my machine (Visual Studio, VS Code, Perforce, etc.)
- Successfully compiled/executed desktop build and web testing – ready to get started coding now
- Mike Stickles: Completed work on issues JMPHTML-15538 (Format Pattern: HTML5 loses its format pattern when using <.>), JMPHTML-15544 (Format Pattern: Label by value does not honor format pattern), JMPHTML-15545 (Format Pattern: Reference line label not honored), and JMPHTML-15504 (Marker Format Pattern: tooltip does not show the format pattern). The first two have been accepted and closed by testing, the third is still being tested, and the fourth has been put up for code review. Currently investigating JMPHTML-15548 (Marker Format Pattern: Format pattern lost after reset axis), which is the last format pattern bug with a “major” priority.
- John Powell:
- Added support for images in tooltips for Pie Charts (JMPHTML-14768).
- Updated 3D rendering to make up for Color and Lighting changes in Three.js (JMPHTML-15554).
- Fixed issue where Cube plot is not drawn (JMPHTML-15530).
- Fixed string “% of Total” not localized for Pie Charts (JMPHTML-14951).
- Paul Spychala: Working on adding support for Surface Plots to interactive HTML and JMPLive (JMPHTML-15556). It is currently a work in progress.
JMP Live
- Aurora: Start work on report preference set feature (backend support for Create and Read of preference sets). Demonstrated Process Screening triage to Product Management. Start work on Process Screening triage performance. Bug hunting with AI.
Statistics
- Elizabeth: Added the Residual type under the Repeated tab for GLMM (JMP-28854). This random residual serves as an overdispersion parameter for one-parameter distributions (like binomial) and was requested by P&G. Helped investigate an issue in Fit Y by X with a blocking factor with unequal block sizes.
- Laura C-S: Working on speeding up the MultiCorrelationFitter class. Estimation of polychorics are much faster now and I’m just cleaning up the code. Integrated bug fixes to 19.2.
Stat Testing
- Zach White (intern reporting to James Koepfler): I have made a strong start on a Measurement Systems Analysis Add-in. It includes a simple dialog box and usable output right now, but I will make it more dynamic and increase the interactivity over the next couple of weeks.
- Ayumi Mutoh: I recently had a kick-off meeting for my project on sequential covering arrays. Since then, I have been reading some literature to understand the algorithm. Also, I have been learning JSL.
- Mark: I met with Wayne Levin to learn about his product CoBaseKRM. We decided that there is no conflict with our ideas for an extension to re-use response and factor definitions and another for a utility to restore missing meta-data for a DOE when the data is imported from Excel. I reviewed the documentation and flow chart with Jacob for the study tool we wish to submit to the JMP Marketplace. I completed several weeks of work on re-establishing a query of the JSL unit testing dashboard. I wrote a JS wrapper for this query to easily change some parameters without using Query Builder each time.
Life Sciences Updates
- Jake Sumner (intern reporting to Russ Wolfinger):
- I have started working on my project to update the JMP PyTorch plugin to include the capability to run GNN models with molecular data. I began by creating slides outlining my plan for the project. I shared these plans with Luciano Silva and Russ Wolfinger to make sure they signed off before I started working on them in earnest. These plans included an overview of how to best construct graphs from molecules, and I suggested that we include the option to create graphs with or without edges drawn between atoms that are spatially close (even if they are not connected by an atomic bond).
- So far, I have written code for the PyTorch plugin that allows us to load molecular structure files and process them into: (1) SMILES strings (a simplified syntax for representing molecular structures as strings) and (2) a corresponding JSON string of dihedral angles between atoms to help re-create the 3D conformation of each molecule. I am currently validating that my dihedral angle approach is working as intended, while also working on code to create graphs with edges based on both spatial proximity and atomic bonding. I look forward to training and testing GNN models soon to ensure they are working as intended!
- Drew: Fixing the last of my 19.2 JMP Clinical bugs. Researching and prototyping some features in JMP Clinical 20.0 - adding population filters to Review Subject Filter and ways of incorporating column recoding into our study add/refresh processes.
- Yiran Song (intern reporting to Russ Wolfinger): Met with other interns and the LS team. Discussed and defined the scope of my project with AI assistant.
Product Management and Product Marketing
- Mia:
- Attended a demo of JMP Live Process Screening triage for JMP 20. Impressive work!
- Met with Sarah Gilyard, Caleb King, Eric Mittman and Rajneesh Rajneesh to review current reliability projects and remaining priorities for JMP 20.
- Working with Mandy Chambers on sample data for demonstrating some of the newer data table functionality - tags with properties, hierarchical column groupings, filter views,...
- Attended a multivariate process capability meeting organized by Sarah Gilyard with Laura Lancaster, Jianfeng Ding, and new JMP GTET member Astrid Ruck.
- Bryan:
- Most of the week was focused on developing additional icons that better align with the Fluent System Icon style. I created and filed 18 new Jira issues for the following icons: MSA, Variability, Pareto, Diagram, ManageSpecLimits, ReliabilityGrowth, ReliabilityRepeatedDeg, Recurrence, DestructiveDegradation, ReliabilityFatigueModel, ReliabilityBlock, RepairableSystemsSimulation, ReliabilityDegradation, ParamReg, PropHazards, ReliabilityCumulativeDamage, Survival, and MaxDiffDesign.
- I coordinated with Henry Moore on the JMP Lab layout for JMP Discovery Summit in Baltimore.
- I coordinated with Evan McCorkle, John Schroedl, and Melisa Turner on accessibility updates. The Accessibility Roadmap can be referenced for current status and future plans. I plan to develop U-Study scripts to exercise functionality that developers expect to have ready for EA4.
Technical Support and Engagement
Technical Support Case Volume by week:

Case Topics for Technical Support queue, last week:

Engagement Support Case Volume by week:

Case Topics for Engagement queue, last week (excluding cases related to Restricted Party Screening):

Development Operations
- Nick:
- Troubleshooting on DailyUT instances. Made new images for JMP 20 Windows 11 and JMP 19.1.3 Windows 2022.
- Updated Jenkins to 2.555.2
- Work on our SBOM scanner tool to allow better one-off requests without the need for a JSON file. This is almost done and should be ready early next week.
- Shannon L: Closed out JMP 19.1.2 release work. Tracking underway for the JMP 19.1.3 & JMP Live 19.5 security and emergency bug fix release. Oxygen program management work. Atlassian administration and user support across several groups at JMP this week, including Procurement, HR, and HTML. JMP Marketplace work for defining how to register Extensions for export compliance. Working with my intern on his summer project. Weekly technical meetings.
- Bob:
- Updated signoff and product readiness pages in Confluence
- Further testing on changes to VC Redistributable files for 19.2
- More testing to finalize trigger files to force builds when no source changes are made
- Melanie: Testing a few TestBot Jenkins projects as we finalize the migration of TestBot to AWS • General work finishing branching and EOR tasks • Investigating a puzzling unit test/dashboard problem JMPTOOL-2221 • Working on improvements to the Unit Test Log project.
- Myron: Worked on JMPTOOL-1884 (update crash OS in email to include arm64), JMPTOOL-2219 (update JiraBot components), and various crash file cleanup tasks.
- Jim: Prior to code freeze, performed multiple integrations into the //depot/rel/r19.1.3/source/… Perforce branch.
Localization
- Trish: Translation vendor reported issues while taking screenshots for 19.5 JMP Live Help (WEBJMP-12511, WEBJMP-12510). JMP Live Configuration help will not be translated WEBJMP-12514 (special thanks to Dieter Pisot & Chris Humphrey for help getting this resolved quickly).
- Howard:
- Refactor Dita pre-process and populate job due to changes from the doc team
- New export/push features in the Dashboard when project first launched
- Debugging backend task process
- Sandy: Enhancements to legacy string report for PortableUI, SampleData, and BuiltIns. Helped debug Localization Dashboard Export Issue.
- Sohail: Adding batch processing to ChatUI interface, live batch status updates, and debugging.
Documentation
- Dalen Hicks (intern reporting to Qiana Perry): This week I focused on engineering and validating a menu-script pipeline by organizing the BA and DOE directories and developing a Python script to extract menu paths into structured XML. I successfully ran the script across 52 files, extracting 1,574 menu paths with 0 failures, establishing a 100% fully functional and scalable processing baseline. Looking forward to refining the output and continuing to build out the automation next week!
- Allison Wray (intern reporting to Qiana Perry): Getting familiar with JMP, JMP Live, and Oxygen XML Editor. I have also been attending the SAS intern and R&D introductory meetings.
- Susan C:
- Cleaning up xrefs in the QPM xref book
- Created the 19.5 RNs & sent for review Documentation - Confluence
- Assisting with JMP Live Config guide issue
- Devon: Converting the Automation Reference chapter of our documentation into XML, reviewing the Consumer Research chapter for handoff to the Statistics team.
- Chris: Joined the Stat book XML files. Working with Daylen to script some XML cleanup and doc analysis. Talked with Michael Osinibi about the upcoming cookie consent.
- Jill: Completed conversion work on RSM and started oXygen conversion work on the EG.
System/Host Testing-Cary
- Hunter: Ran through installation and authorization cases with nearly all JMP 19.1.3 desktop configurations in preparation for the upcoming 19.1.3 final installer testing. Investigated problem with long 30 second delay when launching JMP 19.x offline while license was in the grace period. (Issue has been resolved in JMP 20.) More verification with the most recent JMP 20 authorization enhancements in JMP-30541 that check JMP licenses in the background. Allowed JMP 20 to run continuously for several days on multiple systems as the license transition from grace period to termination. Reviewed more localized documentation and updated the related JIRA items.
- Nick H: Worked on some 20 and 19.2 verifications. I also fixed a couple of failing unit tests in the nightly runs (still waiting on those to reflect properly in the nightly run). I began working on a new page in the testing dashboard to track nightly builds for each JMP track and configuration.
Web Testing – Cary
- Josh: Status update:
- Customer Support and Deployment Assistance
- Answered customer installation questions related to upgrading JMP Live from version 17.x to 19.1.
- Investigated a deployment question regarding why JMP Live was unable to connect to a database deployed in AWS.
- Testing and Validation
- Continued testing JMP Live authentication changes.
- Tested the JMP Live 19.5 installation process, including the database, JMP Pro for Live, Keycloak, and JMP Live components.
- Tested the JMP Live database upgrade process.
- SSO Configuration: Submitted a request to SAS for a SAML connection for jl_distad so that the server can be migrated to SSO.
- Installer Testing Preparation: Created the servers needed for upcoming JMP Live 19.5 and JMP Pro for Live 19.1.3 installer testing, which is expected to begin in the next few weeks.
- Hui: Overall focus was on cross‑surface validation and early risk identification to reduce late‑cycle surprises.
- Validated HTML5 log message coverage across a broad set of features (static images, Row Ascending order, pseudo log scale, AUC/Fill, InSpec probability profiler, Highlight Cells, bar brackets) under JMPHTML‑15480, ensuring expected logging behavior is present for diagnostics and support.
- Verified JMP Live 19.5 → JMP 20 localization and encoding behavior, confirming WebJMP fixes for German and other non‑English languages (WEBJMP‑12312, WEBJMP‑12496, WEBJMP‑12500) and reducing risk of international UX regressions.
- Reviewed and validated format pattern behavior for label fixes from Mike Stickles, confirming correct handling across identified edge cases.
- Tested HTML5 support for Fixed Color Marker labels, confirming expected behavior for the new feature.
- Identified and documented 3 cross‑surface issues across JMP Live, HTML5, and Desktop, including:
- an HTML5 Cube Plot blank‑rendering issue (fixed by John and now ready for validation)
- a JSL behavior discrepancy between JMP and JMP Live when no data table is present
- a gap in JSL support for re‑running analyses that could affect future JMP Live report regeneration.
- Seema: Lots of Process Screening fun!
- Accepted and Closed:
- Open corresponding warning panel section when the user clicks a row in the process screening summary table
- Created Jiras:
- Clicking Warning in Process Screening table should open Warnings panel
- Process Screening control chart not displayed in JMP Live when row with Warnings selected
- Selecting Warning from Warnings Panel in JMP Live should select the corresponding row in the Process Screening table
- Warning panel does not expand/display warnings when category has a label
- Process Screening JSON for qc_sampleName displayed with red highlighting when values are nested
- Taylor M:
- Worked on some Postgres security testing, including these items that were Accepted and Closed:
- Update Postgres to 18.4 due to security vulnerability
- Update Postgres to 16.14 due to security vulnerability
Note from Shannon
I thought I’d share something today that to be honest, I was very late to learn about but found fascinating. Some background - last weekend my college student Mae’s cosplay performance group won the Craftsman-level masquerade performance prize at the Animazement ’26 convention at the Raleigh Convention Center. They were thrilled and surprised - almost everyone in the group was a novice but one member had won a competition before so they competed against more experienced groups. Here’s the group after the performance - Mae is on the upper right.


If you’ve ever met me, you’ve probably heard way more you ever wanted to know about how much Mae loves theater, costumes and cosplay. After watching their video on the Animazement ‘26 Instagram feed, I was trying to find the song they used by searching through the many Madoka Magica soundtracks on Apple Music. Mae laughed and told me the song they used was not from Madoka Magica at all, although she mixed in audio from the show to match their performance. The song they used is called Bad Apple and I’ve been completely oblivious to the internet’s fascination with this song for a decade or longer. There are even samples of Bad Apple in the C++ world. If like me, you need an explainer on this topic, here you go.