<?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: Milan</title>
    <description>The latest articles on DEV Community by Milan (@milan_rother).</description>
    <link>https://dev.to/milan_rother</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%2F3775329%2F5f6395c0-6b1f-4801-ad5d-36c2e9fbe5d5.png</url>
      <title>DEV Community: Milan</title>
      <link>https://dev.to/milan_rother</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/milan_rother"/>
    <language>en</language>
    <item>
      <title>I Built an Open-Source Simulink Alternative That Runs in Your Browser</title>
      <dc:creator>Milan</dc:creator>
      <pubDate>Mon, 16 Feb 2026 09:24:02 +0000</pubDate>
      <link>https://dev.to/milan_rother/i-built-an-open-source-simulink-alternative-that-runs-in-your-browser-4gpg</link>
      <guid>https://dev.to/milan_rother/i-built-an-open-source-simulink-alternative-that-runs-in-your-browser-4gpg</guid>
      <description>&lt;p&gt;What if you could build and simulate block-diagram models in your browser — for free, with no installation?&lt;/p&gt;

&lt;p&gt;That's what I've been working on for the last 27 months.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;System simulation — control systems, vehicle dynamics, signal processing — is dominated by MATLAB/Simulink. It's excellent software, but:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Expensive:&lt;/strong&gt; €2,000-15,000 per seat per year&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Closed:&lt;/strong&gt; Proprietary file formats, vendor lock-in&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Heavy:&lt;/strong&gt; Complex installation, license servers, IT involvement&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Isolated:&lt;/strong&gt; Awkward Python integration, poor CI/CD support&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There's no real open-source equivalent at the system simulation level.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Solution: PathSim + PathView
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;PathSim&lt;/strong&gt; is a pure-Python framework for dynamical system simulation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;pathsim
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;pathsim&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Simulation&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Connection&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;pathsim.blocks&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Integrator&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Amplifier&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Adder&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Scope&lt;/span&gt;

&lt;span class="c1"&gt;# Build a simple feedback system
&lt;/span&gt;&lt;span class="n"&gt;integrator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Integrator&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;gain&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Amplifier&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1.5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;summer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Adder&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;scope&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Scope&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;sim&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Simulation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;blocks&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;integrator&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;gain&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;summer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;scope&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;connections&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="nc"&gt;Connection&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;summer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;integrator&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="nc"&gt;Connection&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;integrator&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;gain&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="nc"&gt;Connection&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;integrator&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;scope&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="nc"&gt;Connection&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gain&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;summer&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;sim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;duration&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;10.0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;scope&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;plot&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;PathView&lt;/strong&gt; is a visual block-diagram editor that runs entirely in your browser via Pyodide/WebAssembly:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Try it now:&lt;/strong&gt; &lt;a href="https://view.pathsim.org" rel="noopener noreferrer"&gt;view.pathsim.org&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No signup. No server. Your data never leaves your machine.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;18+ numerical solvers&lt;/strong&gt; — from basic Euler to implicit BDF for stiff systems&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hierarchical subsystems&lt;/strong&gt; — compose complex models from reusable components&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Event handling&lt;/strong&gt; — hybrid continuous/discrete systems (check the bouncing ball)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Algebraic loop resolution&lt;/strong&gt; — automatic detection and solving&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Browser execution&lt;/strong&gt; — full simulation in WebAssembly (Pyodide), no backend needed&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Real-World Adoption
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;JSBSim&lt;/strong&gt; (NASA's flight dynamics simulator) adopted PathSim for system-level modeling&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MIT Plasma Science &amp;amp; Fusion Center&lt;/strong&gt; uses PathSim for nuclear fusion fuel-cycle simulation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;300+ GitHub stars&lt;/strong&gt;, 3,000+ monthly downloads&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Python in WebAssembly vs. Server Side
&lt;/h2&gt;

&lt;p&gt;Running a simulation framework in the browser via Pyodide is interesting. You might assume that a dedicated backend serever hosted somewhere on the web wins over Pyodide. But it turns out, when you have a decently performant CPU, the 30% loss of Pyodide over antive Python still places you way ahead of off the shelf server performance. &lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model library&lt;/strong&gt; — 50+ curated, validated simulation models&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code generation&lt;/strong&gt; — C code from PathSim models (early stage)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Browser editor:&lt;/strong&gt; &lt;a href="https://view.pathsim.org" rel="noopener noreferrer"&gt;view.pathsim.org&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Install:&lt;/strong&gt; &lt;code&gt;pip install pathsim&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docs:&lt;/strong&gt; &lt;a href="https://docs.pathsim.org" rel="noopener noreferrer"&gt;docs.pathsim.org&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/pathsim" rel="noopener noreferrer"&gt;github.com/pathsim&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'd love to hear your feedback. What simulation problems are you working on? What would make PathSim useful for your work?&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I'm Milan Rother, a simulation engineer. If you need help with simulation — from Simulink migration to custom model development — reach out at &lt;a href="https://milanrother.com/#services" rel="noopener noreferrer"&gt;milanrother.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>opensource</category>
      <category>webassembly</category>
      <category>svelte</category>
    </item>
  </channel>
</rss>
