<?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: Vitaliy Stoliarov</title>
    <description>The latest articles on DEV Community by Vitaliy Stoliarov (@ni55an).</description>
    <link>https://dev.to/ni55an</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%2F778820%2F2e20da14-8add-499a-ba56-6313c02bea8f.png</url>
      <title>DEV Community: Vitaliy Stoliarov</title>
      <link>https://dev.to/ni55an</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ni55an"/>
    <language>en</language>
    <item>
      <title>Rete.js 2 stable is now available!</title>
      <dc:creator>Vitaliy Stoliarov</dc:creator>
      <pubDate>Wed, 12 Jul 2023 22:44:40 +0000</pubDate>
      <link>https://dev.to/ni55an/retejs-2-stable-is-now-available-59b3</link>
      <guid>https://dev.to/ni55an/retejs-2-stable-is-now-available-59b3</guid>
      <description>&lt;p&gt;After months of active development, it's finally here! ⌛&lt;br&gt;
Upgrade now and enjoy the stability without any breaking changes&lt;/p&gt;

&lt;p&gt;Check out the intro and examples on the website &lt;a href="https://retejs.org"&gt;https://retejs.org&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/xqPLa6P194A"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Code generation: transform JavaScript into visual programming language and back</title>
      <dc:creator>Vitaliy Stoliarov</dc:creator>
      <pubDate>Tue, 27 Jun 2023 21:32:09 +0000</pubDate>
      <link>https://dev.to/ni55an/code-generation-transform-javascript-into-visual-programming-language-and-back-2ad5</link>
      <guid>https://dev.to/ni55an/code-generation-transform-javascript-into-visual-programming-language-and-back-2ad5</guid>
      <description>&lt;p&gt;I would like to introduce to you Rete Studio, a general-purpose code generation tool that seamlessly bridges the gap between textual and visual programming languages&lt;/p&gt;

&lt;p&gt;The implementation of this solution proved to be more challenging than expected. The primary focus was finding the scalable method to convert the Abstract Syntax Tree (AST) of the programming language (JavaScript was used as the foundation) into a user-friendly node editor. Later on, the task became even more complex, requiring the conversion back into code&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/retejs"&gt;
        retejs
      &lt;/a&gt; / &lt;a href="https://github.com/retejs/rete-studio"&gt;
        rete-studio
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A general-purpose code generation tool powered by Rete.js
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1&gt;
Rete Studio&lt;/h1&gt;
&lt;p&gt;&lt;a href="https://stand-with-ukraine.pp.ua" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/3726a50d574d2030025f2a33759b9b1ba2982ff8309c51476fddffcae0492658/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6d6164655f696e2d756b7261696e652d6666643730302e7376673f6c6162656c436f6c6f723d303035376237" alt="Made in Ukraine"&gt;&lt;/a&gt;
&lt;a href="https://discord.gg/cxSFkPZdsV" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/7715e0482d539f8fff232acd44a1c4a056aa2b0b30a646ba7eb2e66133cf9176/68747470733a2f2f696d672e736869656c64732e696f2f646973636f72642f313038313232333139383035353630343234343f636f6c6f723d253233373238396461266c6162656c3d446973636f7264" alt="Discord"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Rete.js application&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;
Introduction&lt;/h2&gt;
&lt;p&gt;Rete Studio is a general-purpose code generation tool powered by Rete.js. Its primary goal is to seamlessly bridge the gap between textual and visual programming languages. With Rete Studio, you can transform a textual programming language into a visual representation, which can then be transformed back into textual language.&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://raw.githubusercontent.com/retejs/rete-studio/main/public/codegen.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iX5svmLz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://raw.githubusercontent.com/retejs/rete-studio/main/public/codegen.png" alt="codegen"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
Key features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Playground&lt;/strong&gt;: input your code and check its graph representation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lab&lt;/strong&gt;: debugging tool for code transformation into a graph and back&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Editor&lt;/strong&gt;: open your local project to edit code visually as a graph&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
Roadmap&lt;/h2&gt;
&lt;p&gt;Currently, JavaScript is the only supported language. Considering the complexity of the transformation process, our current priority is building a robust application. Once we have fine-tuned our methodologies and algorithms (including different programming languages), we will introduce them as a separate plugin for Rete.js.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;If you believe in the potential of this project to revolutionize the way code&lt;/strong&gt;…&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/retejs/rete-studio"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


</description>
    </item>
    <item>
      <title>Visually programmed Chatbot powered by Rete.js 2</title>
      <dc:creator>Vitaliy Stoliarov</dc:creator>
      <pubDate>Wed, 03 May 2023 21:22:41 +0000</pubDate>
      <link>https://dev.to/ni55an/visually-programmed-chatbot-powered-by-retejs-4lga</link>
      <guid>https://dev.to/ni55an/visually-programmed-chatbot-powered-by-retejs-4lga</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--v3wHnsdW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zerlcw0egvmsk65ekvoa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--v3wHnsdW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zerlcw0egvmsk65ekvoa.png" alt="Rete.js 2 Chatbot" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is a simple demonstration of a chatbot whose behavior is programmed using a visual editor.&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://codesandbox.io/embed/nok9iq"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;In this implementation, all elements are customized, including animated connections. The chat window is presented as a separate node that can be moved only using special handles at the bottom and top. A dataflow and control flow-based engine is used to process the graph. There is also validation of connections by checking socket compatibility.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/retejs"&gt;
        retejs
      &lt;/a&gt; / &lt;a href="https://github.com/retejs/rete"&gt;
        rete
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      JavaScript framework for visual programming and creating node editor #StandWithUkraine
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1&gt;
Rete.js  &lt;a href="https://app.travis-ci.com/retejs/rete" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/117105ee44a2cb907f9f5956a3f03daf555d755fd4f22a17b79bf1649f5989e8/68747470733a2f2f6170702e7472617669732d63692e636f6d2f726574656a732f726574652e7376673f6272616e63683d6d6173746572" alt="Build Status"&gt;&lt;/a&gt;
&lt;a href="https://sonarcloud.io/dashboard?id=retejs_rete" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/5645eb4324343714956ac1ad121a5a7f4df040985c5067f4c0ea744e73c23463/68747470733a2f2f736f6e6172636c6f75642e696f2f6170692f70726f6a6563745f6261646765732f6d6561737572653f70726f6a6563743d726574656a735f72657465266d65747269633d616c6572745f737461747573" alt="Quality Gate Status"&gt;&lt;/a&gt;
&lt;a href="https://gitter.im/retejs/Lobby" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/5dbac0213da25c445bd11f168587c11a200ba153ef3014e8408e462e410169b3/68747470733a2f2f6261646765732e6769747465722e696d2f4a6f696e253230436861742e737667" alt="Join the chat at https://gitter.im/retejs/Lobby"&gt;&lt;/a&gt;
&lt;/h1&gt;
&lt;h4&gt;
JavaScript framework for visual programming&lt;/h4&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/a0cf5fae2712e23678f3d3e7639ebd178ec451f320f709c61f588d70df656d8b/68747470733a2f2f692e696d6775722e636f6d2f727964477536422e706e67"&gt;&lt;img src="https://camo.githubusercontent.com/a0cf5fae2712e23678f3d3e7639ebd178ec451f320f709c61f588d70df656d8b/68747470733a2f2f692e696d6775722e636f6d2f727964477536422e706e67" alt="rete logo"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
#StandWithUkraine 💛💙
&lt;/h2&gt;
&lt;p&gt;#RussiaInvadedUkraine on 24 of February 2022, at 5.00 AM the armed forces of the Russian Federation  attacked Ukraine. Please, Stand with Ukraine, stay tuned for updates on Ukraine’s official sources and channels in English and support Ukraine in its fight for freedom and democracy in Europe.&lt;/p&gt;
&lt;p&gt;Help to defend Ukraine — donate to &lt;a href="https://savelife.in.ua/en/donate/" rel="nofollow"&gt;Ukraine’s main charity fund&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Help to defend Ukraine — donate to the &lt;a href="https://ukraine.ua/news/donate-to-the-nbu-fund/" rel="nofollow"&gt;fund of the National Bank of Ukraine&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
Introduction&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Rete&lt;/strong&gt; is a modular framework for visual programming. &lt;strong&gt;Rete&lt;/strong&gt; allows you to create node-based editor directly in the browser. You can define nodes and workers that allow users to create instructions for processing data in your editor without a single line of code.&lt;/p&gt;
&lt;h2&gt;
Next version&lt;/h2&gt;
&lt;p&gt;The beta version of Rete.js 2 is available in the &lt;code&gt;next&lt;/code&gt; branch&lt;/p&gt;
&lt;h2&gt;
Documentation&lt;/h2&gt;
&lt;p&gt;Check the &lt;a href="https://rete.js.org/#/docs" rel="nofollow"&gt;docs&lt;/a&gt; and learn about the components and capabilities.&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/retejs/rete"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


</description>
    </item>
    <item>
      <title>Sankey diagram, built using Rete.js 2</title>
      <dc:creator>Vitaliy Stoliarov</dc:creator>
      <pubDate>Fri, 28 Apr 2023 13:43:15 +0000</pubDate>
      <link>https://dev.to/ni55an/sankey-diagram-built-using-retejs-1beo</link>
      <guid>https://dev.to/ni55an/sankey-diagram-built-using-retejs-1beo</guid>
      <description>&lt;p&gt;&lt;iframe src="https://codesandbox.io/embed/v75qmr"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;This example showcases the versatility of the framework, which can be easily customized to accommodate a diverse range of graph or flow diagram types&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/retejs"&gt;
        retejs
      &lt;/a&gt; / &lt;a href="https://github.com/retejs/rete"&gt;
        rete
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      JavaScript framework for visual programming and creating node editor #StandWithUkraine
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1&gt;
Rete.js  &lt;a href="https://app.travis-ci.com/retejs/rete" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/117105ee44a2cb907f9f5956a3f03daf555d755fd4f22a17b79bf1649f5989e8/68747470733a2f2f6170702e7472617669732d63692e636f6d2f726574656a732f726574652e7376673f6272616e63683d6d6173746572" alt="Build Status"&gt;&lt;/a&gt;
&lt;a href="https://sonarcloud.io/dashboard?id=retejs_rete" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/5645eb4324343714956ac1ad121a5a7f4df040985c5067f4c0ea744e73c23463/68747470733a2f2f736f6e6172636c6f75642e696f2f6170692f70726f6a6563745f6261646765732f6d6561737572653f70726f6a6563743d726574656a735f72657465266d65747269633d616c6572745f737461747573" alt="Quality Gate Status"&gt;&lt;/a&gt;
&lt;a href="https://gitter.im/retejs/Lobby" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/5dbac0213da25c445bd11f168587c11a200ba153ef3014e8408e462e410169b3/68747470733a2f2f6261646765732e6769747465722e696d2f4a6f696e253230436861742e737667" alt="Join the chat at https://gitter.im/retejs/Lobby"&gt;&lt;/a&gt;
&lt;/h1&gt;
&lt;h4&gt;
JavaScript framework for visual programming&lt;/h4&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/a0cf5fae2712e23678f3d3e7639ebd178ec451f320f709c61f588d70df656d8b/68747470733a2f2f692e696d6775722e636f6d2f727964477536422e706e67"&gt;&lt;img src="https://camo.githubusercontent.com/a0cf5fae2712e23678f3d3e7639ebd178ec451f320f709c61f588d70df656d8b/68747470733a2f2f692e696d6775722e636f6d2f727964477536422e706e67" alt="rete logo"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
#StandWithUkraine 💛💙
&lt;/h2&gt;
&lt;p&gt;#RussiaInvadedUkraine on 24 of February 2022, at 5.00 AM the armed forces of the Russian Federation  attacked Ukraine. Please, Stand with Ukraine, stay tuned for updates on Ukraine’s official sources and channels in English and support Ukraine in its fight for freedom and democracy in Europe.&lt;/p&gt;
&lt;p&gt;Help to defend Ukraine — donate to &lt;a href="https://savelife.in.ua/en/donate/" rel="nofollow"&gt;Ukraine’s main charity fund&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Help to defend Ukraine — donate to the &lt;a href="https://ukraine.ua/news/donate-to-the-nbu-fund/" rel="nofollow"&gt;fund of the National Bank of Ukraine&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
Introduction&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Rete&lt;/strong&gt; is a modular framework for visual programming. &lt;strong&gt;Rete&lt;/strong&gt; allows you to create node-based editor directly in the browser. You can define nodes and workers that allow users to create instructions for processing data in your editor without a single line of code.&lt;/p&gt;
&lt;h2&gt;
Next version&lt;/h2&gt;
&lt;p&gt;The beta version of Rete.js 2 is available in the &lt;code&gt;next&lt;/code&gt; branch&lt;/p&gt;
&lt;h2&gt;
Documentation&lt;/h2&gt;
&lt;p&gt;Check the &lt;a href="https://rete.js.org/#/docs" rel="nofollow"&gt;docs&lt;/a&gt; and learn about the components and capabilities.&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/retejs/rete"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


</description>
    </item>
    <item>
      <title>Rete.js 2: visual programming for React.js, Angular and Vue.js</title>
      <dc:creator>Vitaliy Stoliarov</dc:creator>
      <pubDate>Mon, 24 Apr 2023 18:56:40 +0000</pubDate>
      <link>https://dev.to/ni55an/retejs-2-visual-programming-for-reactjs-angular-and-vuejs-2072</link>
      <guid>https://dev.to/ni55an/retejs-2-visual-programming-for-reactjs-angular-and-vuejs-2072</guid>
      <description>&lt;p&gt;In this article I will introduce you to Rete.js, a framework for creating node editors with customization and built-in features for processing. From its inception to its current state (version 2 beta), I will provide a brief history of the framework, highlighting its evolution and growth.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bGSWWutq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mh756rjtgjxo5qg3k4v0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bGSWWutq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mh756rjtgjxo5qg3k4v0.png" alt="rete.js" width="800" height="410"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;While this article won’t delve into detailed guides on how to use Rete.js, you can easily find them on the official website at &lt;a href="https://retejs.org/"&gt;retejs.org&lt;/a&gt;. Instead, you can leave your feedback in the comments section below or ask questions on our &lt;a href="https://discord.gg/cxSFkPZdsV"&gt;Discord server&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  History
&lt;/h2&gt;

&lt;p&gt;My interest in visual programming began back in 2017 when I came up with the idea of creating an tool for data processing through a graphical interface. At that time, I was already familiar with Blender’s node editor and Unreal Engine’s Blueprint, but I couldn’t find any ready-made solutions in JS that met my needs.&lt;/p&gt;

&lt;p&gt;So, I decided to develop my own solution using d3.js. I started with a node editor graphical interface that was similar in capabilities to the aforementioned solutions. Then I focused on processing these schemes. My goal was to create a library that allowed me to create different types of nodes without worrying about anything other than the input data the node should receive and the output it should provide.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://npmjs.com/package/d3-node-editor"&gt;&lt;code&gt;d3-node-editor&lt;/code&gt;&lt;/a&gt; package was created to fulfill my needs for an interface that could create nodes of various types and offer data processing functionality. &lt;a href="https://codepen.io/Ni55aN/pen/jBEKBQ"&gt;The demo&lt;/a&gt; is still available on Codepen. Soon, after it received a few stars on the repository, I noticed that it was gaining interest from others as well. This motivated me to shift my focus from my original project to the library, and I began to consider how it could be improved.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---asWf4i3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tsgym8veswn2mppr6x0z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---asWf4i3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tsgym8veswn2mppr6x0z.png" alt="D3 Node Editor preview" width="800" height="549"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One of the first issues I tackled was how to make it customizable and flexible. It was important that new features could be added without disrupting the main codebase. This was especially crucial because breaking changes could cause issues for users who relied on the library in their projects. To solve this issue, I decided to implement an event-based architecture.&lt;/p&gt;

&lt;p&gt;During the implementation of the new architecture, I decided to give it a shorter name that was available on NPM. That’s how the framework was born, complete with a package called &lt;a href="http://npmjs.com/package/rete"&gt;&lt;code&gt;rete&lt;/code&gt;&lt;/a&gt;. In addition, the plugin system was implemented that allows to split functionality into different packages and install them on demand. Over time, I also added the ability to render nodes using a variety of frameworks, including Angular, Vue.js, and React.js.&lt;/p&gt;

&lt;p&gt;As the main functionality was implemented, the framework gained popularity with and without my involvement (thanks to those who mentioned it in articles or shared links). I dedicated time to fixing bugs and adding features, but this was mainly driven by motivation and external factors.&lt;/p&gt;

&lt;p&gt;As a result, we have now reached a stage where the framework has a second major version in beta.&lt;/p&gt;

&lt;h2&gt;
  
  
  Disadvantages of v1
&lt;/h2&gt;

&lt;p&gt;After several years since the first release I can summarize its disadvantages. Am I saying that the first version should not be used? Partly yes, that’s why I’d like to discuss it here. Is it worth to use the v1 while the v2 is still in beta? Absolutely, because the first version has been tested extensively by the community.&lt;/p&gt;

&lt;h3&gt;
  
  
  Time and skills
&lt;/h3&gt;

&lt;p&gt;One of the unfortunate truths about open-source projects: libraries or frameworks are typically provided “as is”, especially if they are developed purely out of enthusiasm. The quality of these solutions depends directly on the time and skills invested in them. As a result, there is a possibility that your issue may remain unanswered, or that a bug may not be fixed for years. Therefore, it’s crucial to contribute to a project that you’re passionate about in right way.&lt;/p&gt;

&lt;h3&gt;
  
  
  Design
&lt;/h3&gt;

&lt;p&gt;During the early stages, like the design phase, some unforeseen factors can have a significant impact on subsequent stages.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VEpcYoxa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/io6xkxarnyp0omc4tleg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VEpcYoxa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/io6xkxarnyp0omc4tleg.png" alt="A plugin example for Rete.js v1" width="800" height="604"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let’s review the critical points:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;TypeScript&lt;/strong&gt;: it wasn’t used from the beginning, since version 1.0.0. Support for static typing could be improved, but significant improvements may require breaking changes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Component abstraction&lt;/strong&gt;: it enables the creation of nodes of varying types, simplifying the development process but also restricting developers. Although the import/export feature is built-in, this approach can cause confusion in distinguishing between nodes and components.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Event-based architecture and plugin system&lt;/strong&gt;: they have undoubtedly provided significant assistance in terms of flexibility. However, it can be quite challenging to debug. All events were concentrated in the core. Plugins can create their own events, leading to an overwhelming number of events that aren’t isolated. Also the connected plugins are just a list, where the order of connection is crucial.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Engine&lt;/strong&gt;: graph processing was previously uncharted territory. Initially, I had planned to only work with dataflow, but due to implementation limitations, recursion support was not possible. Eventually, the &lt;a href="https://github.com/retejs/task-plugin"&gt;task plugin&lt;/a&gt; was developed, which partially solved the issue of creating control flow solutions on top of the existing engine.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Documentation
&lt;/h3&gt;

&lt;p&gt;In the first versions I used GitHub Wiki for documentation and later switched to Read the Docs. However, I was still struggling with some limitations of Markdown, so I decided to create a website called &lt;a href="https://rete.js.org/"&gt;rete.js.org&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8stmojZO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w2mtn2ioeql2vbkdlfpl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8stmojZO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w2mtn2ioeql2vbkdlfpl.png" alt="Documentation page at rete.js.org" width="800" height="590"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Despite the site provided some documentation and examples, it didn’t cover everything as I discovered from questions on GitHub.&lt;/p&gt;

&lt;h3&gt;
  
  
  Package building
&lt;/h3&gt;

&lt;p&gt;I’ve discovered a litany of pitfalls. Firstly, relying on the Rollup and hoping for seamless integration was naive. I have repeatedly encountered uninformative errors when attempting to use the plugins. Secondly, managing multiple packages while working with HMR is a significant challenge. Especially when using npm link, which can cause problems with dependency linking that require several hours of debugging. As a result, resolving these issues can take up a lot of time.&lt;/p&gt;

&lt;h2&gt;
  
  
  What has been done?
&lt;/h2&gt;

&lt;p&gt;The development of the second version of the framework and its accompanying materials has taken many times more efforts than the first version. The codebase was completely rewritten from scratch, with a focus on full TypeScript support and flexibility in customization. The only thing that remained unchanged is the recognizable visual design.&lt;/p&gt;

&lt;p&gt;Overall, my goal wasn’t to implement a lot of features. Flexibility and extensibility have a higher priority than a multitude of features that can be easily enabled with a flag like &lt;code&gt;enableThisCoolFeature&lt;/code&gt;. Of course, it's great to have many features, but alongside this we would also end up with dozens of options, each requiring 5-10 more options to customize these features.&lt;/p&gt;

&lt;h3&gt;
  
  
  Architecture
&lt;/h3&gt;

&lt;p&gt;The new version of the framework features an architecture that is TypeScript-first and more scalable. It includes two key components: an alternative to event-based architecture and a cascading plugin system. In short, plugins can be connected not only to the editor instance but also to other plugins, resembling a cascade. This enables data, also known as signals, to be transmitted from the parent plugin to all child plugins, where they can be transformed or prevented.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ms2kibXQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5738jks2b2c590za34td.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ms2kibXQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5738jks2b2c590za34td.png" alt="A plugin example for Rete.js v2" width="800" height="481"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For further details, please refer to the &lt;a href="https://retejs.org/docs/concepts/plugin-system"&gt;Plugin system&lt;/a&gt; page.&lt;/p&gt;

&lt;h3&gt;
  
  
  Presets
&lt;/h3&gt;

&lt;p&gt;The key innovation in this version is the implementation of presets. These are a set of ready-made features that can be used by default or replaced with an alternative preset. Instead of using flags such as &lt;code&gt;enableThisCoolFeature&lt;/code&gt;, presets can be added without the need to modify the plugin's source code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XmwLwLaq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cno44ajud6j689gt0gkr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XmwLwLaq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cno44ajud6j689gt0gkr.png" alt="An example of using presets" width="800" height="297"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For more information, please refer to the &lt;a href="https://retejs.org/docs/concepts/presets"&gt;Presets&lt;/a&gt; section.&lt;/p&gt;

&lt;h3&gt;
  
  
  Engine
&lt;/h3&gt;

&lt;p&gt;The Engine is now implemented in a separate package called &lt;a href="http://npmjs.com/package/rete-engine"&gt;&lt;code&gt;rete-engine&lt;/code&gt;&lt;/a&gt;. It is designed to process schemes using dataflow and control flow approaches, as well as their combinations. This implementation is more flexible than the one in the previous version and is easier to understand from a theoretical perspective regarding the different problems these approaches solve.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Mt_fneQK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yy0znxun50sh58otjf6c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Mt_fneQK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yy0znxun50sh58otjf6c.png" alt="An example of using Dataflow engine" width="800" height="546"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Learn more on the &lt;a href="https://retejs.org/docs/concepts/engine"&gt;Engine&lt;/a&gt; article.&lt;/p&gt;

&lt;h3&gt;
  
  
  Rete CLI
&lt;/h3&gt;

&lt;p&gt;This tool has existed since the first version, but significant improvements have been made in the new version, including the resolution of some issues. This is particularly useful when a project is divided into different packages and repositories. The tool now supports TypeScript by default, along with linting and test runner. The issue with polyfill integration has been resolved, whereby polyfills were excluded from bundles in order to reduce their size, causing errors in certain environments where they were not automatically included, such as &lt;em&gt;regeneratorRuntime is not defined&lt;/em&gt;. This issue has now been resolved using &lt;a href="https://www.npmjs.com/package/@babel/runtime"&gt;@babel/runtime&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For more details, please refer to the &lt;a href="https://retejs.org/docs/development/rete-cli"&gt;Rete CLI&lt;/a&gt; documentation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Rete Kit
&lt;/h3&gt;

&lt;p&gt;The idea of creating this tool did not come up immediately, but it proved to be extremely useful for both testing purposes and for familiarizing other developers with the project on their preferred stack, such as Angular, React.js or Vue.js.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pog-YTpY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h6dzawam83z0txjbievn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pog-YTpY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h6dzawam83z0txjbievn.png" alt="Vue.js app built with a single “rete-kit app” command" width="800" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This tool does several things: it creates a plugin base (which was done by the previous version of Rete CLI), creates an application using Rete.js, and performs bulk build during development. You can read more about this in the &lt;a href="https://retejs.org/docs/development/rete-kit"&gt;Rete Kit&lt;/a&gt; article. Here I just want to highlight the creation of an application for different stacks with the necessary features, which proved to be an extremely useful functionality. Using only one command &lt;code&gt;rete-kit app --next&lt;/code&gt; you can get a working application with an editor.&lt;/p&gt;

&lt;p&gt;Check out details on &lt;a href="https://retejs.org/docs/development/rete-kit"&gt;Rete Kit&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Rete QA
&lt;/h3&gt;

&lt;p&gt;Finally, another tool has been added to the framework in order to maintain quality without spending too much time. This tool is presented as a separate package called &lt;a href="http://npmjs.com/package/rete-qa"&gt;&lt;code&gt;rete-qa&lt;/code&gt;&lt;/a&gt; and is responsible for performing regression UI tests on different stacks and browsers. The first aspect is achieved by Rete Kit, while the second is accomplished through &lt;a href="https://playwright.dev/"&gt;Playwright&lt;/a&gt; under the hood, which runs all tests for each stack on Chromium, WebKit, and Firefox.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--St_hsm1L--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cy0hb3eiuqh5z0e3zgsr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--St_hsm1L--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cy0hb3eiuqh5z0e3zgsr.png" alt="The process of executing UI tests for all available stacks and browsers" width="800" height="419"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;More details can be found in the &lt;a href="https://retejs.org/docs/quality-assurance"&gt;Quality Assurance&lt;/a&gt; article.&lt;/p&gt;

&lt;h3&gt;
  
  
  Documentation and examples
&lt;/h3&gt;

&lt;p&gt;This time, a lot of effort was put into developing documentation, examples, and the website itself. The website was migrated to Nuxt 3 with the use of accompanying modules, which unfortunately had an impact on the release time.&lt;/p&gt;

&lt;p&gt;Many articles were added, which provide an overview of the project ecosystem and various formalities, as well as a FAQ page and guides for different parts of the functionality, along with links to examples.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yE8mYWXz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/es2orwve32lvfqg16rvk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yE8mYWXz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/es2orwve32lvfqg16rvk.png" alt="Examples page for Rete.js 2" width="800" height="415"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Currently, there are 32 examples, most of which are hosted on Codesandbox.&lt;/p&gt;

&lt;p&gt;Additionally, Algolia’s &lt;a href="https://docsearch.algolia.com/"&gt;DocSearch&lt;/a&gt; has been integrated for improved search experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The story of Rete.js began several years ago when customizable JavaScript solutions were hard to come by. Currently, Rete.js continues to evolve and has significantly improved, although it is still in beta. It is more flexible and extensible than its previous version. With a more careful design and the creation of testing tools, as well as a focus on supporting TypeScript, Rete.js has become an even more reliable and flexible tool for creating node editors.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
