<p>After starting with jQuery in Drupal 6 and moving to full JavaScript frameworks like Vue, I've recently been using Stimulus when adding JavaScript to my projects.</p>
<p>After finding it via SymfonyCasts and Symfony UX (I can't remember if Ryan and I discussed it <a href="/podcast/10-ryan-weaver-symfonycasts">in our podcast episode</a>), I like that it works on top of my existing HTML and Twig templates instead of having to rewrite or duplicate all the markup.</p>
<p>You enable and configure it with data attributes like <code>data-controller</code> and <code>data-action</code> in your HTML which refer to separate JavaScript classes and methods, so you have some structure and organisation compared to putting all the logic in Twig.</p>
<p>Having separate controllers also makes it easy to reuse logic in other parts of your application or extract it for use in other projects.</p>
<p>If you want an example of how I've set up stimulus with esbuild, <a href="https://github.com/opdavies/stimulus-esbuild-example">take a look at this GitHub repository</a>, or <a href="https://symfonycasts.com/screencast/stimulus">watch the Stimulus course on SymfonyCasts</a>.</p>
<p>I skipped the lessons on Stimulus before and didn't try it for a while, but I'm glad I have.</p>
format:full_html
processed:|
<p>After starting with jQuery in Drupal 6 and moving to full JavaScript frameworks like Vue, I've recently been using Stimulus when adding JavaScript to my projects.</p>
<p>After finding it via SymfonyCasts and Symfony UX (I can't remember if Ryan and I discussed it <a href="/podcast/10-ryan-weaver-symfonycasts">in our podcast episode</a>), I like that it works on top of my existing HTML and Twig templates instead of having to rewrite or duplicate all the markup.</p>
<p>You enable and configure it with data attributes like <code>data-controller</code> and <code>data-action</code> in your HTML which refer to separate JavaScript classes and methods, so you have some structure and organisation compared to putting all the logic in Twig.</p>
<p>Having separate controllers also makes it easy to reuse logic in other parts of your application or extract it for use in other projects.</p>
<p>If you want an example of how I've set up stimulus with esbuild, <a href="https://github.com/opdavies/stimulus-esbuild-example">take a look at this GitHub repository</a>, or <a href="https://symfonycasts.com/screencast/stimulus">watch the Stimulus course on SymfonyCasts</a>.</p>
<p>I skipped the lessons on Stimulus before and didn't try it for a while, but I'm glad I have.</p>