Michal C

when the batteries start dying we just press the buttons harder

I do not like webpage interfaces for actual, loud, real world machines

I’m trying to write a client for Klipper, well more precisly Moonraker, which is Klipper’s web server. I really like Klipper project. It adds some complexity over the traditional Marlin setup, which is fully contained on the printer side, but it enables controlling your printer over network. That however is where the complexity kicks in:

Klipper
  ↑↓
---------- ↑ 3D printer side
---------- ↓ PC side
  ↑↓
Klippy
  ↑↓
Moonraker
  ↑↓
Mainsail

This above would be the typical chain of all the necessary parts to control your printer over network. That’s a lot. Mainsail is a a webpage, with all of the benefits coming with that but also with all the drawbacks. One time my Mainsail tab was using 3GB of RAM. I do not like the clunkiness of controlling an actual machine through a laggy interface of a webpage. This problem absolutely doesn’t need a web development to be involved. I know it’s not fun to support multiple platforms but as of writing this post, Microsoft is so disfunctional that supporting Windows isn’t even something I want to do. So while projects like Mainsail can serve the Windows users, I won’t.

I’m trying to write my own client, basically replacing Mainsail in the chain pictured above.

I’m trying to use Nuklear GUI, an immediate GUI library. Before I get to do that I need to wrap up the actual library that communicates with Moonraker via a websocket. I’m writing all this using C and it’s not as bad as one would expect, but in a significant part thanks to projects like https://github.com/ryanfleury/metadesk and https://github.com/rxi/sj.h.

I hope to soon write more about how I use these projects to quickly implement Moonraker’s API communication.