I've been using StimulusJS heavily on two rails apps I have been working on and honestly, I'm loving it. But, I have been reading and hearing a lot lately about AlpineJS. What are the pros and cons? Should I be using AlpineJS instead of StimulusJS?
For further actions, you may consider blocking this person and/or reporting abuse
Oldest comments (4)
This is a great topic.
I needed some page/server interaction so I investigated Stimulus. I watched a few videos etc and thought - okay - let's do this. I did complete the feature(s) but I was never comfortable.
Then I started using Tailwinds and came across AlpineJS. I'd never heard of it before so I watched a few videos etc etc and it was like a eureka moment.
I realised I was not happy with how Stimulus integrates into a project. It makes backend changes that I just don't understand - like a big black box in my code. And it's definitely all or nothing.
AlpineJS however is super light and all in the client. Sure you loose the direct model/controller integration but isn't that what json api calls are for? I've found it extremely easy to work with and have yet to find a feature I can not deliver.
I have one last Stimulus feature to remove. When I get the time - that will be refactored to AlpineJS and then I'm done with Stimulus.
Interesting. What are the backend changes that are happening??
I'd say mainly in the use of a Gem and changing the location of code, stimulus code lives in it's own directory off of the Javascript directory. I really like that you add AlpineJS inline with your html - it makes for super readable code. With Stimulus I have to go hunting.
I'm ignoring the need for Yarn and Webpack as I have grown comfortable with these technologies, especially as they do seem to work. I know that I could use CDN's but I'd rather be in control and know exactly what is being served to users.
Stimulus is a 100% front-end technology. You could run it off a CDN if you wished to.
Honestly, I just don't believe that you've done a lot with Stimulus because what you're saying just doesn't make any sense. Is it possible that you didn't use it properly?