TLDR; Yes, it will be appropriate for any kind of web apps.
In terms of architecture there are 3 layers and they go from lower level/more flexible to higher level/less flexible.
Lowest level is Genie which implements a full HTML API. It’s the least smart but most flexible. If we want to create a table, we have to manually write every part, something like
table(class="table") do
tr() do [
td("Foo")
td("Bar")
]
end
end
Or we can use the HTML based templating language to write HTML with interpolated Julia which would generate the above code internally.
The big advantage of using Genie as the foundation is that we can use everything it has or will have, like session/cookie management, MVC structure, generators, caching, authentication, routing, etc. And this is key for writing generic web applications.
Mid layer are Stipple elements, which are higher-level, like for example there is a table(df::DataFrames.DataFrame; args...)
which renders a DataFrame. So one doesn’t have to manually build a table, but is harder to customize or control every little thing in how the table is rendered. This outputs a static HTML table in a line of code.
Last layer are the Stipple components which are reactive but they require web sockets and they need Vue.js among other things. They provide a lot of features out of the box, but already one needs to opt-in to using Vue.js, Twitter Bootstrap, and other libraries which are bundled.
For everything except plots we’re using the Quasar UI components library (the Vue components: https://quasar.dev). The focus at this point is on the Stipple/Quasar/Vue components and for the first release we want to have reactive tables, plots, forms plus layouts (also optionally reactive as in show/hide parts of the page depending on the state) and typography (so H1-6, paragraphs, etc).
One can mix and match APIs from all these layers (Genie is a package, Stipple is a different package which has Genie as a dependency, StippleQuasar is yet another package which has Stipple as a dependency, and so on).
In phase 2 we will add wrappers for the rest of the Quasar components, as I’m sure any non-trivial app will need things like alerts, tabs, lists, images, popups, trees, avatars, etc. But I architected this to be easily extendable so hopefully other developers will contribute. There are thousands of Vue.js free components out there and ultimately we’d like to see this as a thriving ecosystem which would include both free and commercial high quality user contributed packages, themes, plugins, etc (from UI components to hosting, monitoring, scaling, pushing notifications, analytics, and what not).
We’re currently discussing with some startup incubators to help us realise this vision as obviously we’ll need a larger team to go beyond the first, maybe 2nd phase of the project. If anybody has experience, tips or recommendations in regards to funding such projects, that’d be very appreciated.