I do have one very surface level concern about the design and some disorganized thoughts about your comment here, so I guess I'll just dump all those at once for you.
Looking at "Actions and Commands" left me wondering "why?". The docs say:
Code execution is organized into two types of operations:
- Actions: client-side operations that run in the browser
- Commands: server-side operations for tasks like database access
Both can be triggered by user interactions, and they can trigger each other.
If they're both operations that can be triggered by user interaction and can freely trigger each other, and the only difference is where they run, why are they distinct framework concepts with distinct terms? Why aren't there just server actions and client actions? I know this is sorta just nitpicking at naming, but these decisions can't be easily changed later and they do affect how users approach and work with the model. I'm mostly expecting that they're actually more different than they seem at first and that justifies the strongly distinct categorizing and naming. Is that the case?> While it requires Phoenix to run
I wasn't weirded out by it requiring Phoenix until you mentioned it here. Why "while"? This seems like it's competing in the liveview space and bringing isomorphism as its weapon, right? I wouldn't normally expect you to be replacing all of phoenix any more than I'd expect someone to supply their own fully in-house http client implementation. Are you mentioning it as a drawback here because there's something I'm missing that would make me concerned about phoenix being involved?
> we don't have 100% Elixir syntax coverage yet
Where is the boundary where I need to care about this? Can my entire app not use syntax that Hologram doesn't cover? Just the modules that `use` it? Just the parts that are transpiled to client-side JS like Actions (I had to go look up which term was the client-side one, by the way)? Even once you have full syntax coverage, I fear that I'm always going to need to be aware of when I'm actually writing "Hologram's pseudo-Elixir that has all the same syntax" so I can make decisions about rare in-the-weeds code that interacts with compiler stages or NIFs, or situations involving upgrading to a new version of Elixir that has new syntax that Hologram hasn't added yet. It's always going to leak a little.
> Bundle sizes are currently larger than they'll eventually be
> Compilation is taking its time because everything recompiles on any change. We had incremental compilation before, but I temporarily removed it
I'm glad you mentioned these. If I had tried out Hologram and found either of them without warning, I probably would have stopped paying attention to the project until someone explicitly came to me later and said "hey, you should try out Hologram again, it has reasonable bundle sizes and incremental comp now." But knowing that they're just temporarily missing in early releases and not fundamental drawbacks means I'm willing to invest time in learning it while those things get addressed.
Anyway, much congrats. Very cool looking project and I hope it takes off.