Readit News logoReadit News
davidkpiano · 7 years ago
Hey! I made XState and just discovered it hit Hacker News (...great)

To clarify, the new tag-line is "State machines and statecharts for the modern web." Some of you are nitpicking the word "stateless" which describes the actual machine `.transition()` implementation (not the interpreter implementation), which returns the next state (+ actions, etc.) given the current state and event, but does not mutate or remember any state (hence, stateless).

Please don't focus on the word "stateless." I'd appreciate any other valuable feedback, though!

seanmcdirmid · 7 years ago
Rather than say stateless, you can say no hidden imperative state or something a bit more accurate. It immediately popped out at me when I read the title just now, it’s like talking about dry water :)
carapace · 7 years ago
I remember the first time I encountered "Fat-free Half-and-half" in the grocery store. I must have stood there for a full minute, resisting the urge to stop passers-by and ask them, "But isn't that just milk?"

;-D

Deleted Comment

ArtWomb · 7 years ago
Thanks for building! Just got turned onto XState through a recent Chrome Dev summit talk where it's used to demo a simple stopwatch

https://www.youtube.com/watch?v=Vg60lf92EkM

Curious what web frontend frameworks you are currently into. Or if you plan to use XState as the basis for something new. Looking at Gatsby, Apollo and other GraphQL based libraries. Appears to be a trend toward human-readable or even visual programming environments. XState could certainly be a powerful statechart management engine for this ;)

davidkpiano · 7 years ago
I appreciate the thanks :) I'm currently into React, but in a very light way -- I'm going to continue experimenting with how statecharts can (semi-)universally define the behavior of complex components in a way that can be integrated into any framework, or no framework at all.

I've also managed to avoid frameworks for some UIs and just use XState + RxJS. For example: https://codepen.io/davidkpiano/pen/zWrRye

Deleted Comment

markc · 7 years ago
Nice.

Reminds me of a post describing implementation of a React login page FSM using some simple ClojureScript to describe and run the state transitions:

https://github.com/jebberjeb/reframe-fsm/blob/master/doc/HOW...

I found it unusually clear, useful, and easy to follow.

For anyone going down the ClojureScript path that wants more sophisticated FSMs, there a few nice libraries dedicated to that:

https://github.com/ztellman/automat , https://github.com/cdorrat/reduce-fsm , https://github.com/jedahu/spaghetti

brianzelip · 7 years ago
Here’s a recent Shop Talk Show podcast with XState author that explores how state machines relate to user interfaces, https://shoptalkshow.com/episodes/327-working-state-machines....
allenu · 7 years ago
This is really cool and just up my alley since I'm always drawing state machines. However, I'd love to find a tool for drawing these state machine diagrams either with a UI or just a yaml file that's processed with a command-line tool.

Does anyone have suggestions for these things?

good-idea · 7 years ago
If you're just looking for a tool that you can use to define (and play with) a state machine, take a look at https://sketch.systems - it's not a 'drawing' tool but you could export an XState object and put that in another tool
serindu · 7 years ago
Depending on what you're trying to accomplish, you can use Graphviz (http://www.graphviz.org/) which accepts DOT input to produce graphs.

You may also be interested in a GUI-based DFA/NFA/PDA simulator I built, available here: http://automatonsimulator.com/. The target audience is CS students and was built based on notation found in Michael Sipser's "Introduction to the Theory of Computation." It allows you to: graphically define state machines, test against input strings, step-by-step debug, and export/import using a text format.

allenu · 7 years ago
Thanks for the suggestions. I've used Graphviz before and found it super useful for automated graph generation for sure.

The tool you built also looks like it's close to what I'm looking for. I guess what I'm really looking for is a super slick and simple graph generator app, sort of like what https://mindnode.com/ is for mind maps/outlines. If I had more time, it's something I would like to build.

davidkpiano · 7 years ago
I'm actually working on such a tool! I'll have a beta out in early 2019.

For now, you can use this visualizer: https://statecharts.github.io/xstate-viz

antonkm · 7 years ago
Hi, it looks sweet and easy to read, but what are actual use cases? For example, how would this pair with a React app? Is this supposed to be used as a a stand alone lib?

I have not really grasped why state machines are a big deal. (If it is)

Thanks and congrats for hitting the first page!

davidkpiano · 7 years ago
IMO, state machines are becoming a "big deal" because front-end developers are finally realizing that there is a name (and strict formalism) for the patterns that they've been using to manage complex UI behavior. Not only is this standardized (SCXML), it's been heavily researched for the last 30+ years and has numerous applications in many different areas of tech.

I'm working on articles for using XState in various frameworks, such as React, Vue, Angular, etc. It's already being used in production in places like vaultproject.io, tipe.io, serviceworkies.com, and more.

You can use the interpreter or create your own. An XState machine instance has a pure .transition() method that takes the current state and event, and returns the next state (+ actions, etc.). This can be used anywhere you would determine the next state of your application (or any of your app's constituent parts).

christophilus · 7 years ago
Meh. I’m mostly a frontender today. I learned about state machines in uny 20 years ago. I wrote a sophisticated state machine in C# 15 years ago (a back end) that drove all logic for everything happening from highway to the stacks at a major shipping terminal. Assuming that frontenders are only “just discovering” anything is quite an assumption, and comes off as ignorant and condescending.
swaggyBoatswain · 7 years ago
Would xstate potentially eliminate the need for redux for state management in react?

If so, how would the implementation differ from store and reducers?

nine_k · 7 years ago
A typical GUI is a state machine (though not always a finite state machine).

Much of what a typical React + Redux app does is implementing a state machine.

bandrami · 7 years ago
I'm missing what value the word "stateless" adds to this description, and the article didn't help
jbeard4 · 7 years ago
It means state is passed in as a parameter to the state machine interpreter - as opposed to being contained in the interpreter object. This is helpful when building pure functional systems, where state is passed in from some external data store, like in Redux reducers.
davidkpiano · 7 years ago
Thank you - this is correct (the interpreter is impure). It also makes it possible to create your own custom interpreters.

Also, your work has been a huge influence on XState, and I can't thank you enough for SCION!

jmakeig · 7 years ago
This took me a while to figure out, but it’s incredibly powerful once you get it. As others have suggested, I was working on a Redux-based interpreter.
maxxxxx · 7 years ago
I would call it "external state". Instead of having the state tightly coupled to the state machine it can be persisted somewhere else.
bradwoods · 7 years ago
Hey pplz. For those asking about pairing Xstate with React, I made a library using renderProps approach. https://github.com/bradwoods/react-xstate-js
mpweiher · 7 years ago
Parts look interesting, but hard to take it seriously/invest the time investigating further when the slug says "stateless ... state machines".

Or at least might want to include an explanation somewhere prominent that explains how you define these terms in order for this not to be nonsense (and yes, I did search the rest of the pages).

There is a comment in the GitHub Readme, but that's not really illuminating.

Dead Comment