Hotwire Discussion

Post your examples or open source projects

Following two those two threads:

I am starting this thread where we can post relevant examples of projects using Stimulus. Hopefully, this can help people get started with more curated list of examples. Also maybe we can extract out of it some common patterns and good practice to help us all.

For each project/example we post, I would like to suggest that we follow this template (all items being optional):

  1. Name :
  2. Github repo :
  3. Link to Live app :
  4. Is it a project in production? : Yes/No Demo only
  5. Comments: features, pattern, good practice, Language, trick, performance etc… being demonstrated by this project
  6. Owner / Hunter (you can hunt and post someone else project/repo that you find relevant to this thread)

Q/A and discussion around a project are welcome of course.


As I created this thread let’s open the ball rolling :slight_smile:

  1. Name : TodoMVC Rails on Stimulus
  2. Github repo :
  3. Link to Live app :
  4. Is it a project in production? : No Demo only
    A modest attempt to implement the famous TodoMVC with Rails/TurboLinks and Stimulus. This project has been very helpful for me to get up to speed with Stimulus but more generally with Turbolinks and Rails-ujs.
    Todos are stored in the DB, so one of the feature demonstrated with the demo is the ability to Post message with Rails-ujs in a Stimulus controller and use Rails strong params in your controller.
    Most actions are done client side with stimulus controller to get the real time feeling of client side UI. Adding a new todo is still done server side with a Turbolinks refresh (work in progress : potential solutions).
    It uses two Controllers : todoList and todoItems. todoItem will send notifications to update to the main todoList controller. This part can probably be optimized when controller communication is fully part of Stimulus API (data-outlet?)
  6. Owner / Hunter? : Owner (comments welcome, I am a modest developper)

name: people_controller.js on Rails with Stimulus
Githugb repo:
Link to live: no
Production: no
Comments: It was a tutorial sample of the onebitcode. link of the tutorial



Hey there.

I’m going to use Stimulus in my open-source app:

  1. Name: Skyderby
  2. Github repo:
  3. Link to Live app:
  4. Is it a project in production? : Yes
  5. Comments: as of March, 3, 2018 it only first step made in PR #/96 for 2 small features, but I really like this experience and going to migrate project to Stimulus and finally drop Backbone + Underscore dependency
  6. I’m Owner

Name : Stimulus with Turbolinks, select2 and formValidation
Github repo :
Link to Live app :
Is it a project in production? : No Demo only

1 Like

Name : A simple Stimulus table filter demo
Github repo :
Link to Live app :
Is it a project in production? : No Demo only

1 Like

Name : hickory-cricket
Github repo : n/a,!/hickory-cricket
Link to Live app :
Is it a project in production? : Demo only
Comments: Javascript selection via CSS
Owner: true


I :heart::heart::heart: Stimulus!

Here is the demo of uploading progress using rails-ujs + Stimulus.

Source code can be found here:

It is as simple as it should be.


Name : Stimulus Controllers for Mapbox-GL
Github repo :
Link to Live app : no, sorry : )
Is it a project in production? : not yet, buit it will
Owner : me / $dayjob


  • Name : Sticky Table Headers
  • Github repo :
  • Link to Live app : It’s only in the admin section of a private app I run. I have a blog post about it here and it’s on NPM here.
  • Is it a project in production? : Yes
  • Comments: This is a small port of a JQuery plugin I was using. I have a couple pages with a lot of records, so it’s nice to keep those headers as context for what all the data means. Please submit bugs if you find any, I’m sure there are a lot of missing edge cases.
  • Owner: me
1 Like

Name : StimulusJS with Rails Action Cable and a bit of Sidekiq
Github repo :
Link to Live app : n/a
Is it a project in production? : No Demo only - version of it is in prod internally used

1 Like
  1. Name: Conway’s Game Of Life on Rails with Stimulus.js
  2. Github repo:
  3. Link to Live app:
  4. Is it a project in production? : It’s a Demo :wink:
  5. Comments: Even if the architecture is kind of ridiculous, I’m really impressed with the result.
  6. Owner: Me :slight_smile:
  1. alonetone
  4. Open source production rails app since 2007 (!!), stimulus app since 2018
  5. Comments: I finally migrated a bunch of old js behavior hanging around from 2008 to a handful of stimulus controllers. All playback wrangling and js sugar is done with stimulus. The core part of the mp3 player is playback_controller.js and inherited by the other flavors of playback behavior on the site:

You haven’t updated in six months! I’m also building something like this also :slight_smile:

not great but this is my first stimulus controller:

  1. name: parameters
  2. repo: none
  3. url: none
  4. prod?: kind of but not really
  5. comments: from an hash (spec) and initial parameters, it will create form inputs dynamically depending on some other input (handles default, autocomplete, types, deepness of the spec, etc.)
  6. owner: me
class window.Parameters extends Stimulus.Controller
  @targets = ['spec', 'parameters', 'select', 'initial']

  connect: ->
    @spec = JSON.parse(@specTarget.textContent)
    @deepness = u.toI(@data.get('deepness'))
    @change(initial: true)

  change: (options = {}) ->
    @parametersTarget.innerHTML = @parametersHTML(options)

  currentSpec: ->
    return unless @deepness and @value()

    if @deepness == 2
      service = @value().split(" ")[0]
      kind = @value().split(" ")[1]

  value: ->

  baseName: ->
    baseName = @selectTarget.attributes['name'].value
    baseName.split("[").slice(0, -1).join("[")

  nameFor: (key) ->

  initial: (key) ->

  parametersHTML: (options = {}) ->, (key, spec) =>
      if options.initial
        value = @initial(key) || spec.default || ""
        value = spec.default || ""

      html = "<label><p>#{key}"
      html += "  <span class=\"form--hint\">#{spec.hint}</span>" if spec.hint
      html += "  <span class=\"form--hint\">"
      html += "     (#{u.toArray(spec.type).join(', ')})"
      html += "  </span>"
      html += "  </p><p>"
      html += "  <input list=\"parameters-#{key}\""
      html += "         name=\"#{@nameFor(key)}\""
      html += "         value=\"#{escape(value)}\""
      html += "         class=\"parameters--input\" />"
      html +  "</p></label>"

  escapeValues: ->
    @parametersTarget.querySelectorAll('.parameters--input').forEach (input) ->
      input.value = unescape(input.value)

window.application.register 'parameters', window.Parameters

(not using webpack/npm, I prefer the assets pipeline)

1 Like
Github repo : (mirror of
Link to demo app :
Is it a project in production? : Yes
Comments: A material design & modern admin for Django
Owner: jpic
1 Like

Name: Hacker News Progressive Web App
Link to demo app:
Is it a project in production?: Yes!
Comments: Written up here -
Owner: Me, but MIT Licensed. Enjoy!

  1. Partial page rendering with CakePHP
  2. GitHub repo:
  3. Link to Live app:
  4. Is it a project in production? : It’s an example :smirk:
  5. Comments: See repo README.
  6. Owner: Me. MIT Licensed.
1 Like

Not really a “project”, just a gist that shows how I was able to get the HelloController example working in my Sinatra app without a build system but with a Babel transpilation step.



name: Stimulus.js Demo
Githugb repo:
Link to live:
Production: no
Comments: This is a simple multi page demo application (MPA) with pre-rendered HTML using Stimulus.js.

Hope it helps!

1 Like