How do you ship desktop apps in #lisp ? Web views are an easy way nowadays: I present Electron, WebUI, Webview.h through CLOG Frame.
https://lisp-journey.gitlab.io/blog/three-web-views-for-common-lisp--cross-platform-guis/
@vindarel A meta comment...
The font you're using for your blog is so thin it is rather difficult for my old eyes. Also a lot of really low-contrast text. Just kind of an FYI I guess, if you care about such things.
@vindarel Thanks for that overview!
So the options are:
1. Electron: add a modified browser to your project.
2. WebUI, CLOG: Use an external Web browser for your UI.
3. Webview/CLOGFrame: use a WebView library for your platform.
Question: What's the advantage of WebUI compared to CLOG for a Lisp-only project?
@khinsen You mean WebUI compared to Webview / CLOG Frame? One difference is the renderer. Webview = WebKit on Gtk and Cocoa, Edge WebView2 on Window$. WebUI: we can choose a browser (or default to any existing one).
The devil is in the details so I'll bet there are many more differences. Experience will tell.
I see an open issue about which it is not possible to have multiple windows with Webview. It's possible with WebUI.
@vindarel Not CLOG Frame, CLOG. My impression is that WebUI does in C (or C++?) what CLOG does in Lisp: setting up a websocket connection to a browser.
@khinsen Oh indeed WebUI seems to be doing what CLOG does. So we can ignore this feature set from it IMO and only use its capacity to open a browser window, and use it with CLOG, or any other classical web stack. With CLOG: websocket interactive stuff. Without it: clicking links and adding bits of JS.
BTW CLOG's open-browser is just "xdg-open URL:PORT". CLOG Frame would open it in webview.h, and we can open it with WebUI:
(webui-show w "http://127.0.0.1:8080")
Tell us when you test more!
@vindarel Thanks for confirming that I understood all that correctly!
It's nice to have several options for this. Not that I like Web-based UIs, but it's the most pragmatic option nowadays.
Yet another option would be Nyxt (https://nyxt.atlas.engineer/), which already combines WebKit and Lisp in one executable. But you'd have to package your app as an extension for Nyxt, which feels weird.