<?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: vetriselvan Panneerselvam</title>
    <description>The latest articles on DEV Community by vetriselvan Panneerselvam (@vetriselvan_11).</description>
    <link>https://dev.to/vetriselvan_11</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3256427%2Fb4d97c63-fc86-420b-9fc9-217a62f4ba8a.png</url>
      <title>DEV Community: vetriselvan Panneerselvam</title>
      <link>https://dev.to/vetriselvan_11</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vetriselvan_11"/>
    <language>en</language>
    <item>
      <title>zip Operator in RxJs</title>
      <dc:creator>vetriselvan Panneerselvam</dc:creator>
      <pubDate>Thu, 09 Jul 2026 18:47:42 +0000</pubDate>
      <link>https://dev.to/vetriselvan_11/zip-operator-in-rxjs-10b6</link>
      <guid>https://dev.to/vetriselvan_11/zip-operator-in-rxjs-10b6</guid>
      <description>&lt;p&gt;Hey, Devs!&lt;/p&gt;

&lt;p&gt;Imagine a scenario where you're calling two different observables and need to combine their responses pair by pair. Instead of manually coordinating the emissions, you can use the RxJS zip operator.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxq99llb6ju4k7tlyrmxl.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxq99llb6ju4k7tlyrmxl.png" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Observable A emits every 1 second, while Observable B emits every 3 seconds. The zip operator waits until all input observables have emitted one value before producing an output.&lt;/p&gt;

&lt;p&gt;Although Observable A emits multiple values before Observable B emits its first, zip pairs values by their emission order. So, the first value from A is paired with the first value from B, the second with the second, and so on. Values from the faster observable are buffered until the corresponding value from the slower observable becomes available. &lt;/p&gt;

</description>
      <category>rxjs</category>
      <category>zip</category>
      <category>operator</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Master Angular Dependency Injection: Self, SkipSelf, Host, Optional with Real Examples</title>
      <dc:creator>vetriselvan Panneerselvam</dc:creator>
      <pubDate>Mon, 06 Jul 2026 12:27:00 +0000</pubDate>
      <link>https://dev.to/vetriselvan_11/master-angular-dependency-injection-self-skipself-host-optional-with-real-examples-446f</link>
      <guid>https://dev.to/vetriselvan_11/master-angular-dependency-injection-self-skipself-host-optional-with-real-examples-446f</guid>
      <description>&lt;p&gt;&lt;a href="https://medium.com/@vetriselvan_11/master-angular-dependency-injection-self-skipself-host-optional-with-real-examples-6249be2be255?source=rss-7b84cfd6b858------2" rel="noopener noreferrer"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fht97xw0j73f97faofywl.png" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A complete guide to Angular DI resolution strategies. Learn how Angular searches injectors, resolves services, handles NullInjectorError&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/@vetriselvan_11/master-angular-dependency-injection-self-skipself-host-optional-with-real-examples-6249be2be255?source=rss-7b84cfd6b858------2" rel="noopener noreferrer"&gt;Continue reading on Medium »&lt;/a&gt;&lt;/p&gt;

</description>
      <category>injectable</category>
      <category>services</category>
      <category>angular</category>
      <category>host</category>
    </item>
    <item>
      <title>RxJs Pipe Operator</title>
      <dc:creator>vetriselvan Panneerselvam</dc:creator>
      <pubDate>Thu, 02 Jul 2026 02:02:13 +0000</pubDate>
      <link>https://dev.to/vetriselvan_11/rxjs-pipe-operator-350a</link>
      <guid>https://dev.to/vetriselvan_11/rxjs-pipe-operator-350a</guid>
      <description>&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv7t2wmfpybya1bljvms3.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv7t2wmfpybya1bljvms3.png" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;br&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F80ivanoqipr0iev37gt3.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F80ivanoqipr0iev37gt3.png" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>rxjs</category>
      <category>operator</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Atomic Design Explained: Create Reusable and Maintainable Web Components</title>
      <dc:creator>vetriselvan Panneerselvam</dc:creator>
      <pubDate>Thu, 07 May 2026 18:05:47 +0000</pubDate>
      <link>https://dev.to/vetriselvan_11/atomic-design-explained-create-reusable-and-maintainable-web-components-jjd</link>
      <guid>https://dev.to/vetriselvan_11/atomic-design-explained-create-reusable-and-maintainable-web-components-jjd</guid>
      <description>&lt;p&gt;Modern UI development becomes much easier when interfaces are built systematically and reusable components are designed with scalability in mind. In this blog, I explored how Atomic Design helps create clean, maintainable, and consistent user interfaces by breaking them down into:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Atoms&lt;/li&gt;
&lt;li&gt;Molecules&lt;/li&gt;
&lt;li&gt;Organisms&lt;/li&gt;
&lt;li&gt;Templates&lt;/li&gt;
&lt;li&gt;Pages&lt;/li&gt;
&lt;/ul&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%2Fedk6i58r2aa79zqisdjn.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%2Fedk6i58r2aa79zqisdjn.png" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;br&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%2Frnxfnto3dbsorgflstg2.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%2Frnxfnto3dbsorgflstg2.png" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;br&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%2Fwany7i210d2srqmat7jy.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%2Fwany7i210d2srqmat7jy.png" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;br&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%2Fmii16aky70f7m950c5xr.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%2Fmii16aky70f7m950c5xr.png" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;br&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%2Fzv6ul9dev9z4h73on2on.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%2Fzv6ul9dev9z4h73on2on.png" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks for reading! If this was helpful, consider clapping 👏 and following for more full-stack tips. Do you have questions or suggestions? Drop them in the response below!&lt;/p&gt;

&lt;p&gt;👉 Connect me on &lt;a href="https://www.linkedin.com/in/vetriselvan-panneerselvam" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; for more content on Web Development, Frontend Architecture, UI Design Systems, and modern technologies.&lt;/p&gt;

&lt;p&gt;✍️ Author: Vetriselvan Panneerselvam&lt;/p&gt;

&lt;p&gt;👨‍💻 Full Stack Developer | 💡 Code Enthusiast | 📚 Lifelong Learner | ✍️ Tech Blogger | 🌍 Freelance Developer&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>atomicdesignpattern</category>
      <category>designpatterns</category>
    </item>
    <item>
      <title>Angular Signal Forms: Custom Validation Made Simple (Step-by-Step Guide)</title>
      <dc:creator>vetriselvan Panneerselvam</dc:creator>
      <pubDate>Tue, 21 Apr 2026 18:29:48 +0000</pubDate>
      <link>https://dev.to/vetriselvan_11/angular-signal-forms-custom-validation-made-simple-step-by-step-guide-jok</link>
      <guid>https://dev.to/vetriselvan_11/angular-signal-forms-custom-validation-made-simple-step-by-step-guide-jok</guid>
      <description>&lt;p&gt;&lt;a href="https://medium.com/@vetriselvan_11/angular-signal-forms-custom-validation-made-simple-step-by-step-guide-2a790d06f281?source=rss-7b84cfd6b858------2" rel="noopener noreferrer"&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%2Fbtvdkymrtrpaxehiuu28.png" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Learn how to implement custom validations in Angular Signal Forms with practical examples. Improve form handling, performance, and ux.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/@vetriselvan_11/angular-signal-forms-custom-validation-made-simple-step-by-step-guide-2a790d06f281?source=rss-7b84cfd6b858------2" rel="noopener noreferrer"&gt;Continue reading on Medium »&lt;/a&gt;&lt;/p&gt;

</description>
      <category>angularsignals</category>
      <category>angularsignalforms</category>
      <category>validation</category>
      <category>customvalidator</category>
    </item>
    <item>
      <title>Angular 21 Signal Forms: The Ultimate Guide to Signal-Based Inputs</title>
      <dc:creator>vetriselvan Panneerselvam</dc:creator>
      <pubDate>Thu, 09 Apr 2026 05:59:25 +0000</pubDate>
      <link>https://dev.to/vetriselvan_11/angular-21-signal-forms-the-ultimate-guide-to-signal-based-inputs-4p9j</link>
      <guid>https://dev.to/vetriselvan_11/angular-21-signal-forms-the-ultimate-guide-to-signal-based-inputs-4p9j</guid>
      <description>&lt;p&gt;&lt;a href="https://medium.com/@vetriselvan_11/angular-21-signal-forms-the-ultimate-guide-to-signal-based-inputs-cd234b0ce5cc?source=rss-7b84cfd6b858------2" rel="noopener noreferrer"&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%2Fw5sxjia8l7paizss1ck9.png" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Master the new Signal-based form system in Angular 21. Learn how to migrate from Reactive Forms, handle validation with Signals.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/@vetriselvan_11/angular-21-signal-forms-the-ultimate-guide-to-signal-based-inputs-cd234b0ce5cc?source=rss-7b84cfd6b858------2" rel="noopener noreferrer"&gt;Continue reading on Medium »&lt;/a&gt;&lt;/p&gt;

</description>
      <category>formfield</category>
      <category>angular21</category>
      <category>signalforms</category>
      <category>angularsignalforms</category>
    </item>
    <item>
      <title>Mastering TypeScript: A Deep Dive into satisfies and Inferred Type Predicates</title>
      <dc:creator>vetriselvan Panneerselvam</dc:creator>
      <pubDate>Tue, 07 Apr 2026 00:23:13 +0000</pubDate>
      <link>https://dev.to/vetriselvan_11/mastering-typescript-a-deep-dive-into-satisfies-and-inferred-type-predicates-1bjm</link>
      <guid>https://dev.to/vetriselvan_11/mastering-typescript-a-deep-dive-into-satisfies-and-inferred-type-predicates-1bjm</guid>
      <description>&lt;p&gt;&lt;a href="https://medium.com/@vetriselvan_11/mastering-typescript-a-deep-dive-into-satisfies-and-inferred-type-predicates-5580d450711e?source=rss-7b84cfd6b858------2" rel="noopener noreferrer"&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%2Fuw5y9dsuvawpjn4qf3da.png" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Learn how to write cleaner, safer code with the TypeScript satisfies operator and the new auto-inferred type predicates in TS 5.5.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/@vetriselvan_11/mastering-typescript-a-deep-dive-into-satisfies-and-inferred-type-predicates-5580d450711e?source=rss-7b84cfd6b858------2" rel="noopener noreferrer"&gt;Continue reading on Medium »&lt;/a&gt;&lt;/p&gt;

</description>
      <category>advancetypescipt</category>
      <category>satisfiesoperator</category>
      <category>typewideningvssatisf</category>
      <category>typescript</category>
    </item>
    <item>
      <title>Master TypeScript Decorators by Building an Automated Retry Utility</title>
      <dc:creator>vetriselvan Panneerselvam</dc:creator>
      <pubDate>Thu, 02 Apr 2026 07:51:26 +0000</pubDate>
      <link>https://dev.to/vetriselvan_11/master-typescript-decorators-by-building-an-automated-retry-utility-4c7e</link>
      <guid>https://dev.to/vetriselvan_11/master-typescript-decorators-by-building-an-automated-retry-utility-4c7e</guid>
      <description>&lt;p&gt;&lt;a href="https://medium.com/@vetriselvan_11/master-typescript-decorators-by-building-an-automated-retry-utility-c64aed2fe3b2?source=rss-7b84cfd6b858------2" rel="noopener noreferrer"&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%2Fu5yzsvfd3alblnut14vu.png" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Take a deep dive into Method Decorators. Step-by-step guide on creating a @Retry annotation to automatically re-invoke failed functions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/@vetriselvan_11/master-typescript-decorators-by-building-an-automated-retry-utility-c64aed2fe3b2?source=rss-7b84cfd6b858------2" rel="noopener noreferrer"&gt;Continue reading on Medium »&lt;/a&gt;&lt;/p&gt;

</description>
      <category>decorators</category>
      <category>customdecorator</category>
      <category>promises</category>
      <category>typescript</category>
    </item>
    <item>
      <title>TypeScript Decorators: Building a High-Performance Custom Debounce</title>
      <dc:creator>vetriselvan Panneerselvam</dc:creator>
      <pubDate>Wed, 01 Apr 2026 03:22:38 +0000</pubDate>
      <link>https://dev.to/vetriselvan_11/typescript-decorators-building-a-high-performance-custom-debounce-36mh</link>
      <guid>https://dev.to/vetriselvan_11/typescript-decorators-building-a-high-performance-custom-debounce-36mh</guid>
      <description>&lt;p&gt;&lt;a href="https://medium.com/@vetriselvan_11/typescript-decorators-building-a-high-performance-custom-debounce-38f6cad4bda5?source=rss-7b84cfd6b858------2" rel="noopener noreferrer"&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%2F3oz3rl6tkqfpc3e67eq2.png" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Move your debounce logic out of your components and into reusable decorators. Explore the TypeScript method decorators through an example.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/@vetriselvan_11/typescript-decorators-building-a-high-performance-custom-debounce-38f6cad4bda5?source=rss-7b84cfd6b858------2" rel="noopener noreferrer"&gt;Continue reading on Medium »&lt;/a&gt;&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>customdebounce</category>
      <category>debounce</category>
      <category>decorators</category>
    </item>
    <item>
      <title>Angular Signal Forms: How to Implement FormArray with Signals (Step-by-Step)</title>
      <dc:creator>vetriselvan Panneerselvam</dc:creator>
      <pubDate>Wed, 25 Mar 2026 00:48:33 +0000</pubDate>
      <link>https://dev.to/vetriselvan_11/angular-signal-forms-how-to-implement-formarray-with-signals-step-by-step-2486</link>
      <guid>https://dev.to/vetriselvan_11/angular-signal-forms-how-to-implement-formarray-with-signals-step-by-step-2486</guid>
      <description>&lt;p&gt;&lt;a href="https://medium.com/@vetriselvan_11/angular-signal-forms-how-to-implement-formarray-with-signals-step-by-step-c4e3d5a138d2?source=rss-7b84cfd6b858------2" rel="noopener noreferrer"&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%2Frcasme6v1d4a1k1n0wcz.png" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Learn how to build dynamic FormArrays using Angular Signal-based forms. Includes a step-by-step intro and practical code examples&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/@vetriselvan_11/angular-signal-forms-how-to-implement-formarray-with-signals-step-by-step-c4e3d5a138d2?source=rss-7b84cfd6b858------2" rel="noopener noreferrer"&gt;Continue reading on Medium »&lt;/a&gt;&lt;/p&gt;

</description>
      <category>angular</category>
      <category>signalforms</category>
      <category>formfield</category>
      <category>signal</category>
    </item>
    <item>
      <title>ng-Diagram Angular Guide: Create Custom Nodes and Drag-and-Drop Palette</title>
      <dc:creator>vetriselvan Panneerselvam</dc:creator>
      <pubDate>Fri, 20 Mar 2026 06:02:17 +0000</pubDate>
      <link>https://dev.to/vetriselvan_11/ng-diagram-angular-guide-create-custom-nodes-and-drag-and-drop-palette-jkg</link>
      <guid>https://dev.to/vetriselvan_11/ng-diagram-angular-guide-create-custom-nodes-and-drag-and-drop-palette-jkg</guid>
      <description>&lt;p&gt;&lt;a href="https://medium.com/@vetriselvan_11/ng-diagram-angular-guide-create-custom-nodes-and-drag-and-drop-palette-0835c5d66a85?source=rss-7b84cfd6b858------2" rel="noopener noreferrer"&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%2Fibxeiqol7yuno6uy2jbw.png" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;H ey devs 👋&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/@vetriselvan_11/ng-diagram-angular-guide-create-custom-nodes-and-drag-and-drop-palette-0835c5d66a85?source=rss-7b84cfd6b858------2" rel="noopener noreferrer"&gt;Continue reading on Medium »&lt;/a&gt;&lt;/p&gt;

</description>
      <category>customnode</category>
      <category>ngdiagram</category>
      <category>draganddrop</category>
      <category>flowdiagram</category>
    </item>
    <item>
      <title>Build Interactive Node Diagrams in Angular 21 Using ng-diagram</title>
      <dc:creator>vetriselvan Panneerselvam</dc:creator>
      <pubDate>Wed, 11 Mar 2026 09:53:54 +0000</pubDate>
      <link>https://dev.to/vetriselvan_11/build-interactive-node-diagrams-in-angular-21-using-ng-diagram-49n4</link>
      <guid>https://dev.to/vetriselvan_11/build-interactive-node-diagrams-in-angular-21-using-ng-diagram-49n4</guid>
      <description>&lt;p&gt;&lt;a href="https://medium.com/@vetriselvan_11/build-interactive-node-diagrams-in-angular-21-using-ng-diagram-b274edef286f?source=rss-7b84cfd6b858------2" rel="noopener noreferrer"&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%2Fhx8g8mh3s8ukburzmvhe.png" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Learn how to build interactive node-based diagrams in Angular 21 using ng-diagram, including draggable nodes, link connections, and…&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/@vetriselvan_11/build-interactive-node-diagrams-in-angular-21-using-ng-diagram-b274edef286f?source=rss-7b84cfd6b858------2" rel="noopener noreferrer"&gt;Continue reading on Medium »&lt;/a&gt;&lt;/p&gt;

</description>
      <category>angular21</category>
      <category>bpmndiagram</category>
      <category>ngdiagram</category>
      <category>flowdiagram</category>
    </item>
  </channel>
</rss>
