<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: David Heddle</title>
    <description>The latest articles on DEV Community by David Heddle (@heddle).</description>
    <link>https://dev.to/heddle</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3784107%2F1defeaa2-b738-476a-8d3f-d5b64df3e9c4.png</url>
      <title>DEV Community: David Heddle</title>
      <link>https://dev.to/heddle</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/heddle"/>
    <language>en</language>
    <item>
      <title>Why Swing Still Makes Sense for Scientific Desktop Applications in 2026</title>
      <dc:creator>David Heddle</dc:creator>
      <pubDate>Sat, 21 Feb 2026 17:06:56 +0000</pubDate>
      <link>https://dev.to/heddle/why-swing-still-makes-sense-for-scientific-desktop-applications-in-2026-5fkl</link>
      <guid>https://dev.to/heddle/why-swing-still-makes-sense-for-scientific-desktop-applications-in-2026-5fkl</guid>
      <description>&lt;p&gt;Over the past (too many) years, I’ve built scientific tools for physics research and visualization in Java. Those tools gradually morphed into a desktop framework for visualization, scientific plotting and curve fitting, and simulation. Recently, I cleaned up the architecture and published the core to Maven Central.&lt;/p&gt;

&lt;p&gt;(A full technical paper describing the architecture is available &lt;br&gt;
&lt;a href="https://arxiv.org/abs/2602.21026" rel="noopener noreferrer"&gt;on arXiv.&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;It includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multi-view (virtually extended) desktop infrastructure&lt;/li&gt;
&lt;li&gt;Thread-safe plotting&lt;/li&gt;
&lt;li&gt;Integrated thread-safe simulation engine&lt;/li&gt;
&lt;li&gt;Optional JOGL-based 3D extension&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is not to compete with UI frameworks or full-stack Web apps. It is to provide infrastructure for scientific desktop software.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Main project: mdi&lt;/strong&gt; (all functionality except 3D)&lt;br&gt;
GitHub&lt;br&gt;


&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/heddle" rel="noopener noreferrer"&gt;
        heddle
      &lt;/a&gt; / &lt;a href="https://github.com/heddle/mdi" rel="noopener noreferrer"&gt;
        mdi
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      MDI project (redo of bCNU)
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;MDI – Modular Desktop Interface for Scientific Applications&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/6c224e1a65538c58b536fc347ffa7925be30e749662104fac62d150fe4f52685/68747470733a2f2f696d672e736869656c64732e696f2f6d6176656e2d63656e7472616c2f762f696f2e6769746875622e686564646c652f6d6469"&gt;&lt;img src="https://camo.githubusercontent.com/6c224e1a65538c58b536fc347ffa7925be30e749662104fac62d150fe4f52685/68747470733a2f2f696d672e736869656c64732e696f2f6d6176656e2d63656e7472616c2f762f696f2e6769746875622e686564646c652f6d6469" alt="Maven Central"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/b8cadaa967891081f8f165695470689986c028821dd8a040132f6e661795dc0d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d626c7565"&gt;&lt;img src="https://camo.githubusercontent.com/b8cadaa967891081f8f165695470689986c028821dd8a040132f6e661795dc0d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d626c7565" alt="License"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/64d0e243d8e25e5428f23ef29bc8533ffd3734bae3086fbd169e78df4b0bed38/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4a6176612d31372b2d6f72616e6765"&gt;&lt;img src="https://camo.githubusercontent.com/64d0e243d8e25e5428f23ef29bc8533ffd3734bae3086fbd169e78df4b0bed38/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4a6176612d31372b2d6f72616e6765" alt="Java"&gt;&lt;/a&gt;
&lt;a href="https://arxiv.org/abs/2602.21026" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/a96cffeafc013776c2fb7b5a420e22792a2032bb55639305df9fb173db14905c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f61725869762d323630322e32313032362d6233316231622e737667" alt="arXiv"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;MDI is a Java framework for building scientific desktop applications with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Interactive plotting&lt;/li&gt;
&lt;li&gt;Simulation engines&lt;/li&gt;
&lt;li&gt;Multi-view modular architecture&lt;/li&gt;
&lt;li&gt;Extensible tools and layered drawing&lt;/li&gt;
&lt;li&gt;Distribution via Maven Central&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It is built on pure Swing for long-term JVM stability and zero external runtime dependencies.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Why MDI?&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Scientific desktop applications have different needs than typical GUI apps:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Long-running simulations&lt;/li&gt;
&lt;li&gt;Real-time data visualization&lt;/li&gt;
&lt;li&gt;Multi-document workflows&lt;/li&gt;
&lt;li&gt;Precise rendering control&lt;/li&gt;
&lt;li&gt;Stability across Java versions&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;MDI provides architectural infrastructure for these use cases.&lt;/p&gt;
&lt;p&gt;It is not just a widget toolkit.&lt;br&gt;
It is a foundation for building complete scientific applications.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Key Features&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Multi-Document Architecture&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;Each window (“view”) operates independently while sharing:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Messaging infrastructure&lt;/li&gt;
&lt;li&gt;Common models&lt;/li&gt;
&lt;li&gt;Simulation engine integration&lt;/li&gt;
&lt;li&gt;Extensible toolbars&lt;/li&gt;
&lt;li&gt;Layered drawing support&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Integrated Plotting (splot)&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;The built-in plotting module provides:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Thread-safe curve updates&lt;/li&gt;
&lt;li&gt;Swing EDT-safe rendering&lt;/li&gt;
&lt;li&gt;Curve fitting&lt;/li&gt;
&lt;li&gt;Lock-free staging queues for background updates&lt;/li&gt;
&lt;li&gt;Coalesced repaint events&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Plots can…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/heddle/mdi" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;




&lt;p&gt;Maven artifact:&lt;br&gt;
io.github.heddle:mdi&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3D JOGL/OpenGL extension: mdi-3D&lt;/strong&gt; &lt;br&gt;
GitHub&lt;br&gt;


&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/heddle" rel="noopener noreferrer"&gt;
        heddle
      &lt;/a&gt; / &lt;a href="https://github.com/heddle/mdi-3D" rel="noopener noreferrer"&gt;
        mdi-3D
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      3D add-on to mdi
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;mdi-3D – 3D Support for the MDI Framework&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/e9d6e5f59db0246993b1bf5db754ee3eea9bda85048634b0b979271b793d83e7/68747470733a2f2f696d672e736869656c64732e696f2f6d6176656e2d63656e7472616c2f762f696f2e6769746875622e686564646c652f6d64692d3364"&gt;&lt;img src="https://camo.githubusercontent.com/e9d6e5f59db0246993b1bf5db754ee3eea9bda85048634b0b979271b793d83e7/68747470733a2f2f696d672e736869656c64732e696f2f6d6176656e2d63656e7472616c2f762f696f2e6769746875622e686564646c652f6d64692d3364" alt="Maven Central"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/b8cadaa967891081f8f165695470689986c028821dd8a040132f6e661795dc0d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d626c7565"&gt;&lt;img src="https://camo.githubusercontent.com/b8cadaa967891081f8f165695470689986c028821dd8a040132f6e661795dc0d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d626c7565" alt="License"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/64d0e243d8e25e5428f23ef29bc8533ffd3734bae3086fbd169e78df4b0bed38/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4a6176612d31372b2d6f72616e6765"&gt;&lt;img src="https://camo.githubusercontent.com/64d0e243d8e25e5428f23ef29bc8533ffd3734bae3086fbd169e78df4b0bed38/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4a6176612d31372b2d6f72616e6765" alt="Java"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;mdi-3D&lt;/code&gt; is an optional 3D extension module for the MDI scientific desktop framework.&lt;/p&gt;
&lt;p&gt;It adds hardware-accelerated 3D rendering support using JOGL while preserving the lightweight nature of the core &lt;code&gt;mdi&lt;/code&gt; project.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Why Separate 3D?&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Most scientific desktop applications do not require 3D rendering.&lt;/p&gt;
&lt;p&gt;Separating 3D into its own Maven module:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Keeps the core &lt;code&gt;mdi&lt;/code&gt; dependency lightweight&lt;/li&gt;
&lt;li&gt;Avoids pulling in JOGL unless explicitly needed&lt;/li&gt;
&lt;li&gt;Reduces compatibility risk with future Java releases&lt;/li&gt;
&lt;li&gt;Allows 2D-only applications to remain stable and minimal&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This design ensures that adding 3D is a conscious architectural choice.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Installation&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;First include the core &lt;code&gt;mdi&lt;/code&gt; dependency:&lt;/p&gt;
&lt;div class="highlight highlight-text-xml notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&amp;lt;&lt;span class="pl-ent"&gt;dependency&lt;/span&gt;&amp;amp;gt
    &amp;lt;&lt;span class="pl-ent"&gt;groupId&lt;/span&gt;&amp;gt;io.github.heddle&amp;lt;/&lt;span class="pl-ent"&gt;groupId&lt;/span&gt;&amp;gt;
    &amp;lt;&lt;span class="pl-ent"&gt;artifactId&lt;/span&gt;&amp;gt;mdi&amp;lt;/&lt;span class="pl-ent"&gt;artifactId&lt;/span&gt;&amp;gt;
    &amp;lt;&lt;span class="pl-ent"&gt;version&lt;/span&gt;&amp;gt;1.0.0&amp;lt;/&lt;span class="pl-ent"&gt;version&lt;/span&gt;&amp;gt;
&amp;lt;/&lt;span class="pl-ent"&gt;dependency&lt;/span&gt;&amp;gt;


## Demo Application

The repository includes a full-featured `DemoApp3D` showcasing:

- Interactive 3D globe with poltical boundaries
- a 3D simulation of the free expansion&lt;/pre&gt;…
&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/heddle/mdi-3D" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;




&lt;p&gt;Maven artifact:&lt;br&gt;
io.github.heddle:mdi-3D&lt;/p&gt;

&lt;p&gt;Both the core (mdi) and the extension (mdi-3D) have have multi-view demonstration applications, and their README.md's give instructions on how to run the demos.&lt;/p&gt;

&lt;p&gt;Here are some pics from the demo apps.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F28549kfwxxbvjvzv8rcd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F28549kfwxxbvjvzv8rcd.png" alt="A traveling salesperson simulation."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyqxbfegriw1bt3odjk2n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyqxbfegriw1bt3odjk2n.png" alt="A 3D simulation of 50,000 particles undergoing a free expansion."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1bj08xm59os63cw11cdi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1bj08xm59os63cw11cdi.png" alt="An example of a 2D histogram rendered with Swing"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you have any questions, don't hesitate to ask.&lt;/p&gt;

</description>
      <category>java</category>
      <category>science</category>
      <category>showdev</category>
      <category>ui</category>
    </item>
  </channel>
</rss>
