Show HN: A data oriented TodoMVC using Replicant

github.com

7 points by cospaia 13 hours ago

Data oriented. It's been a theme throughout my rather long career. Especially the last five or so years, when I've been using Clojure in anger. But even with Clojure there are a lot of not fully data oriented ways of doing things. Building frontends (which I do for a living) has been particularly tricky to keep as data oriented as I wish. Enter Replicant https://github.com/cjohansen/replicant

Replicant is one of those libraries which make you say “I can't believe this is not React”. But it really isn't React. It brings 90% of the benefits of React, without bringing in that whole world of churn and not-so-data-oriented ways of doing things. Replicant has zero dependencies. It is created by Christian Johansen, a developer as data oriented as they come. To get where Replicant, and this TodoMVC example, comes from, have a watch at Christians JavaZone Oslo 2023 talk, Stateless Data-driven UIs https://2023.javazone.no/program/85f23370-440f-42b5-bf50-4cb...

As Replicant is a library, and not a framework, there are as many ways to use it to build TodoMVC as there are developers. This example takes inspiration from my previous favorite UI libraries, Reagent and re-frame, from which I use what I think are their best ideas. The example implements a tiny (less than 50 loc) framework and then leverages that to create perhaps the most data oriented TodoMVC ever (I am expecting to be shown a lot of examples that are as, or more, data oriented). The unit tests in the example take advantage of this and test things that you normally need to bring in browser drivers to test. The example is finished, but the tests are work in progress (about 30% done, I think).

I've tried to make the example super easy to clone and play with. And I've tried to make the README be clear and useful to understand the example and what's unique with it. Please give it a spin and tell me what you think! If you want to help with test coverage, that would be awesome too.