Default Erlang distribution comes with Erlang bindings to WxWidgets (this is used by Wings3D - 3D modeller written in Erlang by @bjorng), this is what is used for example by observer application, so you can use this instead of launching full fledged HTTP server to mock the GUI application. Alternatively you can check out Scenic.
I think for most use cases you can consider spawnfest/bakeware which packs a single executable which contains a launcher and an embedded archive.
I’ve indeed been toying with the idea of building an entirely independent Mac app bundle that is compatible with Sandboxing etc and around the existing Elixir releases concept. Since I don’t know how to write applications well for Linux / Windows I’ve focused on Macs. A particular concern that came up pretty quickly was handling of dynamically linked libraries, which I have had to manually relocate and then rewrite the entries in shared libraries within the release via a build script. So far the solution works for OpenSSL and I am sure will work with most libraries, but it has been quite an ugly experience so more thinking and studying is required to simplify it.
I have tried this approach with a Phoenix app and a Scenic app and more or less things work and I could put the app bundle on another machine and it works properly. (Usually Erlang is installed on top of OpenSSL installed via Homebrew on Macs so a simple Elixir release won’t work on other Macs without Homebrew / OpenSSL.)
For Windows, the same technique which was used to build portable apps could probably be used. I’ve not studied how though.
I’ve been tempted to do exactly that. It’s what I use for IoT devices essentially. LiveView makes it much saner, but it’d be way cooler if you could use react-native somehow. As in LiveView modding vdom and re-using react native bindings.
haha, alas no. I should’ve been clearer. I use LiveView with a browser in kiosk mode. Though, I do think it would be awesome to use react-native with LiveView. I think it may be possible to hook up, but not sure… it depends if the JSX calls are translated to a vdom that LiveView’s mdom library could modify.
According to this SO answer it looks like react-native does create a vdom. However that vdom has a bunch of shadow nodes specific to react-native. It wouldn’t be impossible to use, but it may require a lot of effort copying react-native JSX functions. Though someone could write a macro that’d parse a JSX view into a LiveView template (it’d probably not be too hard to convert 90% of JS expressions into Elixir equivalents probably, then hand tuning to fix the rest). That post links to https://www.youtube.com/watch?v=8va9prUqjnA as a more detailed source on the internals of react-native.
So if one were to do it it’d probably require:
Get Nodejs setup with websocket to phoenix
Configure mdom to work on the vdom instead of a real DOM (might have to override some document.querySelector(…) calls)
Setup LiveView templates to create the appropriate vdom to match react-native outputs from JSX
Ensure react-native starts but doesn’t actually modify the vdom, so get the reference to it’s root vdom (somehow)
Then who knows if it’d break on every react-native update or not.
There is this little comment in the documentation (on the very bottom, the last code snippet) https://hexdocs.pm/phoenix_live_view/js-interop.html#client-hooks that explains how to interface with existing JS (in that case AlpineJS). I found that bit of code somehow cryptic but I used it as is and it’s working… If someone has more links about that dom: and window.___.clone part I definitely want to learn more about that…
@ityonemo@elcritch I don’t have much experience with Front-end frameworks but I played a little with Vue and more recently with Svelte.
But I guess that it might be easier to do this (attaching liveview with some front end code) with Svelte… Because there is no VDOM or complex runtime code.
Also, Svelte for example has some option to do server-side hydration, so I guess that it could be possible to use liveview to update not only some data but even the views of Svelte components.
Again I’m not that expert in Front-ends but I’ll definitely try some experience soon… Already tried SS hydration with regular SSR Phoenix…
Anyway, I’m interested in that topic and waiting to read more from you guys!