<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Iruha Dev</title><link>https://ilham25.github.io/</link><description>Recent content on Iruha Dev</description><image><title>Iruha Dev</title><url>https://ilham25.github.io/images/og-default.png</url><link>https://ilham25.github.io/images/og-default.png</link></image><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sat, 11 Apr 2026 14:55:52 +0700</lastBuildDate><atom:link href="https://ilham25.github.io/index.xml" rel="self" type="application/rss+xml"/><item><title>I Built a Minimal Workflow Engine to Understand How n8n Works Under the Hood</title><link>https://ilham25.github.io/posts/workflow-engine-n8n-works/</link><pubDate>Sat, 11 Apr 2026 14:55:52 +0700</pubDate><guid>https://ilham25.github.io/posts/workflow-engine-n8n-works/</guid><description>&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve been using n8n for quite some time now and couldn&amp;rsquo;t help wondering how it works under the hood, so I decided to build a minimal working version of the engine myself.
This post covers how the engine handles execution order, the pluggable node system, expression evaluation, and the diamond merge pattern.&lt;/p&gt;
&lt;p&gt;You can find the full source code on &lt;a href="https://github.com/ilham25/workflow-ts"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="what-is-a-workflow-engine"&gt;What is a Workflow Engine?&lt;/h2&gt;
&lt;p&gt;Basically a workflow engine is just a graph where it has 2 or more nodes that have individual functions like “fetch this URL” or “check this condition”. These connections between nodes is what define the data flow.&lt;/p&gt;</description></item></channel></rss>