For me its all about the inner design which i find, is excellent. Has great potential. I think, Andre was heavily inspired by that blog post here:
http://hookrace.net/blog/introduction-to-metaprogramming-in-nim/
These ideas reflect in here: https://github.com/treeform/fidget
Nim IMHO is best choice for such kind of architecture, since it finally creates ultra fast C binaries. In his video he talks about his Figma Web GUI Builder, which throws out Nim structures which then must be filled with Nim code snippets to implement real server side (Ajax, database, mail, ...) functionality.
Most convincing: Neither backend programmers nor frontend designers see any Javascript or Typescript code. Andre has completely abstracted that away. You should have a look at his GUI design tool, it's free!
https://www.figma.com/ui-design-tool/
Since it all is server side (Nim) it's pretty easy to create PWA (Progressive Web Apllications) that run in Browsers on Desktop, Android, iOS. That already works fine.
I see Andre's concept as kind of "Low Code" (or RAD) development and direct competitor to OutSystems. Low Code is on the rise almost everywhere.
Fidget is not a web framework, it's a UI library.
"Low Code" systems have been a re-occurring theme in software development for decades now, so I'm not sure how it is "on the rise almost everywhere".
What do you mean it's all server side? Figma isn't Andre's GUI design tool...
Your post is full of inaccuracies and I'm not sure what the point of it is. Also, to my knowledge, Fidget isn't used any projects yet in production, so it might be a bit early to start claiming it's one of the best web frameworks ever designed (again it's not a web framework).
I'm glad you find the project appealing and are impressed by Andre's work (a lot of the Nim community is), but this post is misleading and is very clickbaity for whatever reason...
You might watch this video before?
https://youtube.com/watch?v=IB8Yt2dqZbo&t=5m52s
Andre has written a plugin for Figma from where you can export these GUI objects to kinda structure, that you then can fill with server side Nim code, establishing the invisible connection between Figma UX Web objects and their corresponding server side "Fidget objects" via Ajax:
https://figmaelements.com/ui-designer-portofolio/
The export module for Figma:
https://github.com/treeform/fidget/blob/master/figma_plugin/code.ts
Fill with Nim code:
https://github.com/treeform/fidget/blob/master/examples/demo/demo.nim
And here's the result:
https://github.com/treeform/fidget/blob/master/docs/uiExampleIce.png
The description, how all that works together for creating (for the moment) primarily Web Applications:
https://github.com/treeform/fidget
Native Android/iOS Apps and Windows/MacOS desktop left behind, but planned.
That initial idea came from Ethan Gliechtenstein with Jasonette:
Yes, Figma is awesome project, watched talk, lots of smart ideas.
Andre has written a plugin for Figma from where you can export these GUI objects to kinda structure, that you then can fill with server side Nim code, establishing the invisible connection between Figma UX Web objects and their corresponding server side "Fidget objects" via Ajax:
That's interesting, didn't knew Fidget could work that way, I thought it's only Client-Side UI Framework. That's how the Elixir Phoenix LiveView works.
My gripe with fidget as a web framework is that, it dismisses ideas like semantic web and accessibility.
For big companies, the framework doesn't matter much, they going to continue to use whatever they use, probably Java/C# and JS/Node. For small startups, "semantic web and accessibility" not going to make a dent in the success. You need to have web app / iphone app / android app, possibly desktop app and also other channels of distribution like video promotion, social network integration etc.. What's important is to deliver great UI experience. Making it accessible and semantic, is a minor, secondary goal.
Also, I feel like "semantic web" is heavily promoted by Google, because Google needs a way to parse your data to make money.
Sure, most people see Fidget as pure client side library. But since Nim code runs client and server side, all you need is a simple Ajax bridge between browser DOM objects and same Nim server objects.
You mentioned Phoenix Live framework. That even works with deactivated JavaScript in browser. Means: Pure HTML5 and CSS3, all rendered server side with Elixir. Moving functionality back into browser then reduces server load. Btw. Erlang Beam Engine got ASMJIT support, which also speeds up Elixir framework. Many web frameworks allow moving functionality between client and server. Especially with Nim it's a no-brainer.
Hey, the fidget creator here. I will answer and comment on all your questions.
Thank you for liking my ideas and following my project. I have been sitting on them for a long time. I am currently working on Fidget 2 - the complete rewrite of Fidget 1 that supports everything that Figma (the UI/UX editor) can draw. It’s a much larger task than anticipated.
I had the Fidget idea before I knew nim and is actually a port of my earlier CoffeeScript project: https://github.com/treeform/onecup . Nim is much better than CoffeeScript though.
The big idea is to leverage tools designers already love and to eliminate programmers' busy work of moving pixels around. All pixels related things such as fonts, layout, positions, shadows, line widths etc… should be in the realm of the Designer not the Programmer. Right now the Programmer has to “rebuild” the design a 2nd time in but in code. And probably worse. This is the kind of busy work I want to eliminate. It’s just not fun work.
Another big idea is that everything is turning into JS/Electron and PWA. I want to move back to the world where programmers are just normal programs. They interface directly with the OS and GPU not with Chrome/JS. I don’t want layers. I don’t want the UI stacks. That is why I implemented the OpenGL backend as well as the HTML5 backend. I want the ability of my apps to run anywhere Mac, Linux, Windows, Android or iOS. I don’t want to do that by writing them in JavaScript, I want to do this by writing the most low level performant code I can.
I don’t know if I think of my idea as "Low Code" (or RAD). I want my fidget apps to be as complex as regular apps. I just want to eliminate the busy UI work. The millions or hours of wanted effort. I want code to be straightforward and not some Architectural Astronaut monster of 100 files. I just want better code.
@b3liever About Karax, I think karax is trying to HTML good. I am trying to transcend the HTML. I don’t think Karax plans to have an native OpenGL - HTML free mode. That’s not what karax is about. But we do compete because we both allow UIs to be made in HTML. My project is just a different paradigm and way more ambitious.
@dom96 I have only shipped Fidget-web to production so far. Fidget is mostly used as a web framework right now. Most Fidget screens render HTML. I code daily on the app that uses Fidget to deliver real value to my customers. In a way Karax and Fidget are more alike than most people realise. Fidget is a web framework that wants to be much more.
@OneStepGuy thank you for the links, I think you forgot to link the Fidget plugin itself. You can add it to figma and use it to produce nim code in seconds: https://www.figma.com/community/plugin/945866846468157120/Fidget-Export
@alexeypetrushin Fidget is a client side framework. It does not do any Ajax-server side objects. I prefer websockets over ajax anyways. It does neat things on the client side such as returns an ajax call stand-in that will load next time the frame is drawn. That makes error handling and progress state easier to draw in a UI? Maybe that is where the confusion comes from.
@b3liever All though I get where the semantic web ideas come from. I think they are great, but I also feel like the time for them has passed. No one wants to do semantic web. The web has moved to walled gardens and mobile Apps. I don’t think semantic web UI has any advantages at this moment in time. And yeah Fidget is a polar opposite of what semantic web is. Fidget is all about pixel perfect designer first UI. Eventually getting from your code to GPU in the most efficient way possible.
@alexeypetrushin Exactly what will make startups successful is not spending $$$ rebuilding their app from the design mocs to code in the 3 web/ios/android ways. One design, one responsive app that runs web/ios/android and maybe windows/linux/mac with your company (not Google or Apple’s) branding. That’s what I feel will make startups successful - cheaper app production.
@OneStepGuy I see Fidget as a pure client side library. For my Fidget-based apps I compile with nim js on the client side and nim c the server side. Server just sends simple JSON messages over my websocket library. Server-side code never imports the fidget ui library. I don’t have a server side Fidget. I don’t pre-render server side HTML. I treat HTML as draw commands, just like I treat openGL. I do have experiments using WASM with webGL on the web, but I have not shipped that to production yet. Even less HTML and Ajax then.
I want to free the world from having to redo UI work over and over and I want to free the world from slow HTML. Easy?
Thank you for taking an interest in my project. It means a lot to me.
@treeform Perhaps you find that inspiring:
http://adriancooney.ie/voyeur.js/
With that and only slight modifications you can move (to your understanding client-) Fidget code into (server side-) backend.
And <JSON over Websockets> nowerdays is called AJAX. In former times it was XMLHttpRequest.
Ever seen Exel in 50 lines of JS? http://jsfiddle.net/ondras/hYfN3/
Hope you find that (in combination) inspirational.
Best ...
About Karax, I think karax is trying to HTML good. I am trying to transcend the HTML. I don’t think Karax plans to have an native OpenGL - HTML free mode. That’s not what karax is about. But we do compete because we both allow UIs to be made in HTML. My project is just a different paradigm and way more ambitious.
I completely agree, Karax and Fidget are not really competing. Since I don't like the web stack, my rule is: Use Karax if you have to, use Fidget if you can.
Aim of Fidget is to run everywhere. The idea is that everything is build from ground up using pixels so it should be very portable.
I had prototypes run on Windows, Mac, Linux, Web (JS HTML) and (WASM + webGL), iOS and Android.
I am currently focusing on Pixie the vector graphics library at the moment.