@rtfeldman -- I think your response is a bit disingenuous since only yesterday you wrote, in response to a question about cursor state, this:<p>&quot;I wouldn&#x27;t maintain cursor state in the model; I&#x27;d just implement the port like this: <a href="http:&#x2F;&#x2F;stackoverflow.com&#x2F;a&#x2F;14508837&#x2F;2334666" rel="nofollow">http:&#x2F;&#x2F;stackoverflow.com&#x2F;a&#x2F;14508837&#x2F;2334666</a><p>In other words, you never use the value attribute on the input; rather, you give it a unique key and don&#x27;t touch it directly. Whenever you want to change its value, just send the desired new value to that port and let the JS snippet do the &quot;stash cursor position, set the new value, restore cursor position&quot; bit.<p>If you need to do this for multiple elements, send a DOM query string to the port and call document.querySelectorAll (or the like) with it to apply the logic to the correct element.&quot;<p>(See <a href="https:&#x2F;&#x2F;groups.google.com&#x2F;forum&#x2F;#!topic&#x2F;elm-discuss&#x2F;I2JleY8bD7c" rel="nofollow">https:&#x2F;&#x2F;groups.google.com&#x2F;forum&#x2F;#!topic&#x2F;elm-discuss&#x2F;I2JleY8b...</a>)<p>Clearly, you don&#x27;t even believe that all component local state belongs in the atom.  And kicking the issue to JS-land is just hiding the problem.<p>Almost everything should be unidirectional, but @boubiyeah has a valid point.  Not everything belongs in a single state atom.  (I say this having written a 4000 LOC Elm app, which I&#x27;m porting Clojurescript&#x2F;Re-frame due to precisely this issue.)  Even Haskell uses mutable references for this stuff.