Hey everyone,
Unfortunately, Beta 5 will not be launching today.
I’ve been hard at work on the refactor announced both here and on my response on Beta 3 Hye Ararat Beta 3 is now available - #4 by Hye-Dev . This included both a complete re-write of the Incus communication / caching layer (again!), and a transition of the entire stack from Next.js to Vite. These are fundamental structural changes, so these are much more carefully thought out, with much less AI involvement (next to none). This has been a much larger than originally anticipated endeavor, and in the process I have discovered a lot of technical debt that I feel the need to address (some of which arguably contributed by the aforementioned AI involvement, thinking we need some sort of policy on this, would love to talk about that). As a result, I am going to have to ask for your understanding in a divergence from our regular beta release cadence. I could absolutely just push through new features and primitives like the storage pools I have continuously promised (so sorry!) on the current foundation, however, the quality of the user experience comes first. To put it plainly, Ararat should have a foundation that lives up to its namesake, even if it comes at cost of velocity.
I am deeply sorry for establishing such unrealistic expectations in relation to Ararat’s velocity. It was my genuine belief and intention to deliver on the roadmap I outlined. The responsibility of establishing & communicating a realistic roadmap with the community lies with me. I can’t make any promises as to when Beta 5 will release, or what will be present within it. That being said, I can provide an update on where things stand.
Some technical details as to where progress as stands:
Things are on my local machine for now. This is just going to be several giant commits when done (e.g. movement to Vite + Data fetching is going to be one). I can’t really push incrementally on this one because it’s basically a re-write using the same components, everything has to be moved to work, and many shared areas have behavioral changes as a result of the new data fetching system. This is why the GitHub has been quiet.
Data Fetching
The new data fetching system is pretty much done. It’s now essentially a replica of the Incus database living in your browser, populated into memory for fast access with a write-back cache, automatically handling relations and intelligently inferring resource existence through any hints dropped by events or metadata (e.g., a used_by on a project fetch would immediately inform Ararat that those resources existed if it didn’t know). Beta 3’s was already extremely good at this sort of thing, but this new system knocks it out of the park. Sometimes, even the first load of a resource won’t even have a loading screen because of this smart inference! Feels like sorcery, not even exaggerating there.
Migration
The Vite migration is still in progress (the above is in Vite already!). Most of the technical debt discovered lies in the larger re-used individual components, like the general configurator. This work is almost complete. I am exploring whether or not I should PR some normalization now into Incus on some of the endpoints we use and write for those new structures, or keep the methods we currently use (which in some cases even resorts to hilariously clever description parsing) before finalizing. I think this will depend on how much of a pain this becomes when implementing future primitives. Community collaboration on that would yield really positive results. Migration of the base primitives themselves (e.g. projects, instances) has started, but is very early.
I’ve been having a little bit of a battle with, of all things, getting the view transitions to work properly. Next.js used React canary, so I could use the experimental view transitions API. I instinctively thought it better to use React stable, so I’ve been making my own lightweight view transitions adapter to handle this. Moving to React canary would make this a lot easier. I’m 50/50 on this decision. Would love community input.
In terms of migration, anything I didn’t mention has been a breeze to move, so wasn’t notable.
New Primitives/Features
There is no progress on new features or new primitives such as storage pools. All my efforts are focused on the foundation.
Establishing Future Expectations:
Some may question why all of the delay and turbulence in the development process for an “Incus UI”, seems pretty straightforward, right? That’s understandable on a surface level, but this generalization is exactly what Ararat seeks to challenge. Ararat is actually much more complex than meets the eye. As stated in its introduction post, I specifically designed it not to be a simple representation of the Incus API in Web UI form, but rather a fully fledged first class interface, feeling just as native to the browser as the CLI does to the terminal, for any user of any experience level to feel comfortable in. Ararat’s development process is not directly comparable to something like incus-ui-canonical, there’s a lot more engineering to it. You can see this already in the past few updates, building a SPICE client from scratch, bringing you graphical performance faster than you even thought was possible in the browser. Our normalized caching / data fetching system which keeps network traffic to your Incus host minimal, while also eliminating almost all loading screens & making the interface update live as changes happen on the server. Ararat even went as far as featuring automated binary file detection in the browser, just to make editing a little easier. Almost every single little detail I add, is implemented to this degree of thought in relation to the user experience, regardless of the level of effort or how small it seems. This is the reason why Ararat exists in the first place. I fell into the trap of planning deadlines & our roadmap around the velocity of building something with an API-wrapper degree of simplicity, when Ararat is uniquely “API-native” (if that’s a term). Going forwards I will be much better about this.
As for the original July 24th target for stable release with all primitives, I believe that this is still in the cards, provided there are no further surprise technical debt situations. I actually intentionally set that date with a 1 month buffer from what I anticipated.
I hope y’all will continue to provide feedback! This entire refactor started from one message from a single community member. I hope that makes it clear without a doubt, that your voice has huge impact.