It's been two months since I last talked about this project. To me, this feels like an eternity where I've gotten absolutely nothing done, but that's not actually true. Though I have fallen short of my expected deadlines, it is because there is a lot of unexpected complexity in my projects (both personal and work-related). It feels like I've slowed down, but really, I've just been taking my time to make sure that I'm doing it right.
With that out of the way, let's talk about what has happened since my initial announcment:
The official documentation site is live! I spent several weeks writing about my ideas for Tsukurou!, and I've published them all on GitLab Pages. I'm not entirely sure if I'm going to stick with Sphinx as my engine, but at least the writing is all there. As I've been going forward with the project and developing new parts, I've been documenting their significant features on that website, but I've left out things like library documentation since those are automatically generated.
The core crate has had its first (unstable) release! The tsukurou crate contains the core parts of the Tsukurou! framework, providing the utilities that many official programs will be using while also remaining generic and reusable for any unofficial programs that may pop up. As of right now, this includes a
Propertiestype (a set of named, dynamically typed values), the
Worlddata structure, and the generic
An official package manager is in development! Those who have already read the recent documentation updates may know that I've been busy designing and developing the official package manager, Soko, for the project. I realized that, sooner or later, one of the biggest challenges I was going to face was synchronizing packages between the frontend and backend. My solution is to create Soko. It comes in both CLI and library form and implements the standards for packages and repositories (collections of packages stored together). It is not only designed to be a great package manager, but also a package provider, making it easy for developers to publish their packages with a built-in HTTP server that eliminates the need for a central package server.
To refer to specific packages, there also needs to be a package ID that tells us exactly where it came from. URLs would be perfect for this situation. A URL is always (or should always be) guaranteed to point to the same resource on the Internet, and it is also guaranteed to be different if accessing a different resource. Moreover, since a URL precisely says how to reach a specific resource, programs will know exactly where and how to download a package if it isn't available locally. This is one important stepping stone toward proper package synchronization; other verification methods like checksums can also be useful but are not currently implemented.
My crate names have been reserved, and they're uniquely awesome! If you search for "tsukurou" in crates.io, you can see all of the libraries and runtimes I currently have planned to make this thing work. Once I finish Soko and implement the engine and network utilities, I can finally start working on the official client and server runtimes. I still have a long way to go before this is end-user ready, but I feel like the prior design decisions I have made will make the whole process much easier in the long run.
A lot has been happening, but there's still a lot left to do! The one thing that will probably take a long time is the graphical client. I don't have much practical experience developing real applications with 3D graphics; what little experience I have with LWJGL is hardly applicable to newer libraries, especially the ones being developed for Rust. However, in my opinion, one of the most important parts of this project is the learning experience, including the development of a complete graphical program and UI framework. That will be extremely valuable, not only as part of my resume, but also for giving this project a nice look and feel with a friendly interface for unfamiliar users.
Thanks for checking in on the project, now let's get back to building and make this dream happen!