The original disclaimer is still valid: this post is mostly to dump ideas from my mind and make the project goal more defined for me.
The Open RMM is a project I am working on. It is Open Source RMM (Remote Machine/Monitoring Management) solution, mostly intended for homelabs (my homelab).
Now I will stop with copypaste-ing the previous blogpost and will start with some new stuff since last update.
I am basing this on my commits so there may be some spaces in the timeline, because I don’t remember a thing. If you didn’t read the part one here is the link.
login
, computer
and system info
details. Also having issues with some weird bug that was spamming console with warnings about unsafe getUser()
usage. Even the official documentation has this issue. This two commits (ef9a592 and fb80fd6) were fixing the issue or at least suspending the warning.This is the year of migrations to newer versions. I am trying to stay on latest version during the development, which is not always easy.
onMount()
and also inside components and it just got to me that I can just load everything in the Load
functions, IDK why I didn’t do it that in the first place…Number of rewrites: 7
We will see what kind of updates the future brings.
As you can see, all the backend rewrites were initiated because of multiple issues I was having:
Those are main the reasons (at least I think) that are behind the backend rewrites. Well, the one is of course that I want to try the new tech stack: Express, Prisma, TRCP, fullstack SvelteKit, Rust /w Axum and now Supabase.
For the frontend, I stuck with Svelte
and SvelteKit
for all the time, I just switched how I do the backend in the Kit. The UI really needed rewrite, the colors were off, I did many weird hacks (at least I think) to do stuff in the UI, every page was big monolith with ton of weird type castings and that just wasn’t going to be working in the long run.
Now, it is not perfect, not even close. But the Shadcn is just nice guideline how to do stuff in the UI. Yes I need to “decrypt” how ot use the Shadcn components and sometimes I am using them that at least look (to me) incorrect but it is much nicer now, that before. Sometimes you just need to rewrite the thing to get it more right, that is just iteration. I just don’t have that much time for iteration, so, it is multi-year effort.
Well, I really liked the concept of the BaaS (Backend as a Service) all the boiler plate is done for you, all the big thinking, you “just” need to implement the business logic.
This is very common BaaS (maybe even the first? IDK the history) but I didn’t want to vendor lock myself in the Google ecosystem with no way out. Also it is not Open-Source and not self-hostable, so, this is big no-go for me.
Honestly I had to check the Appwrite webpage and Github to just remember more details about it. I also did check what was the state of project in 2024 and at least at that time the project was more focused as mobile app backend than the web. At least at the first sight I didn’t see any examples of using it with frameworks.
Now it looks like pretty decent platform, but it just looks less focused on the backend data (functions, db, storage) and it looks like solution for everything (website hosting, collab and everything in between). Also, I am not big fan of MySQL/MariaDB and it looks like the backend tech is less exposed than in the Supabase.
I was this 🤏 close to choose it. It uses Svelte as frontend so it has first class support for it and it is single package backend solution. But it is still, deep in development, so, the API will constantly change. And also, I am not big fan of SQLite, I had issues with it in the past, in the other projects that were using it. I had issues like: db corruption
and performance issues
.
It still might be the best self-hosting solution, it look pretty light weight with enough features. The supabase and (I guess) the Appwrite too, are pretty heavy on the resources with so many containers doing who-knows-what so they are not the greatest solutions for the simple self-hosting on lower end of the devices like RaspberryPi (this is something I will have to test in the future).
There are few reasons why:
Of course these are not only upsides of using Supabase. The weird bug showing error for the getUser()
function was super annoying (mentioned in 2024 year). Also, I started using Supabase during the transition between SDKs.
this is not the exhaustive list of packages in use
And thats it, the BaaS really reduces the amount of hand-rolling of backend services.
Now lets jump to the UI stuff.
I was looking into UI frameworks from the beginning but really, I didn’t have any clue what I was looking for and what I needed. There are many options depending on what you need.
There is no way I can explain or go over all the UI libraries as good as the Matia from Joy of Code Youtube channel, this video explains many options available.
I chose the Shadcn-svelte because it is ready to use, with great examples and incredible site with previews of all the components. You are really like in the candy store browsing all the beautifully crafted. The Shadcn-svelte is community project based on the Shadcn library for the React ecosystem. The Shadcn-svelte is created and maintained by the great Huntabyte (GH, YT), he is also creator of Bits UI, Melt UI, Formsnap, Mode Watcher, Runned and many more libraries in the Svelte ecosystem. What a monster, singlehandedly created half of the Svelte ecosystem. I probably overselling him, but whatever, still incredible person.
For now I have great experience with Shadcn, only minor issues not understating the inner workings of the library (again, skill issue) and some may say that the site look “same” as other projects using Shadcn but with my “programmer art”, this is the better option.
Today I made TODO document inside the Open-RMM documentation (yea I know, documentation, what is that? 😅). In the Todo, there are things that I want to add, and to finish in near and far future (probably more in far).
The agent I will probable rename to generic service
or daemon
as this is only intended to run as daemon and support some basic CLI operations (install, setup).
Later I would like to add support application for the systems running GUI to manage and install the daemon communicating over some IPC. This application will be probably build with Tauri. The project looks great with the 2.0 release and with the options to write many parts with both rust and typescriptm it is great way to write easy cross-platform app.
Regarding the tech stack I think this is more less stabilized (I hope), maybe with exception adding some in-memory cache like Redis/Valkey.
This paragraph just came to my mind and I am thinking a lot about mobile apps lately. For now I have zero features for the mobile as the dashboard in not practical at all for mobile form factor. The mobile device management (MDM) is totally out of the window, that is incredibly impossible far future, totally out of the scope.
But maybe just scanner for the inventory, it may be that little taste of mobile development, that may be nice starting point.
This will be all for this update. Lets hope next one will be in less than two years.