X-Pkg
A (non-existent) package manager for X-Plane
X-Pkg was intended to be a package manager and a store for third-party X-Plane plugins and modifications. However, Laminar Research (the creators of X-Plane) announced in Feburary of 2024, that they were bringing their own third-party store to X-Plane. Therefore, this project was never completed. It was inspired by both CKAN and the ZIBO Updater.
This was a passion project I have been working on since late 2022, and is without a doubt my biggest undertaking. I created the Sakura Programming Language for this project specifically. It consists of an installed client written in Java, as well as backend support with TypeScript, Express, and MongoDB, hosted on Oracle Cloud. The backend support included a web-based developer portal, as well as a custom-implemented OAuth2 identity platform. Ignoring comments and whitespace, and excluding Sakura, at the time of archival, the project spanned about 16-thousand lines of code. Event though I didn’t get to see this project through to production, I did learn a lot from the development process.
One of the biggest issues that I ran into with the project was just the scope of it. My original intention for the project was to just include a package distribution protocol, with a cloud-based option. However, I kept having the thought of “How do I get people to switch to the platform?” The project grew in scope to use a central identity system, with a developer portal and a store for users to purchase their packages. I also wanted to, in the future, add a forum and a full analytics platform. My main pushing factor was that I had to “hit the ground running,” since there were already several major stores for X-Plane. I should have kept my scope small, and expanded later.
Scope wasn’t my only issue with project management. One of the big things I did with this project was to just code whatever I felt like, moving from service to service, implementing whatever feature I wanted, rather than having a specific goal in mind and working towards it. In future projects, having goals and project boards would greatly help figure out what I needed to work on.
The project was always intended to be open-sourced and collabrative, and I did want “competitors” to create their own compatible repositories and tools, but my approach to open-source was flawed. I had a minimum-viable-product (working developer-portal + client) in the summer of 2023, and I did show it to a member of a popular X-Plane package, but I never brought it out to the public. I was scared of two things, the public not liking it, in which case all of the code I wrote would have been useless (which it is now anyways). Alternatively, on the flipside, I was scared of if the public pressuring me to complete this project, which was already progressing slowly due to college work and life events. However, for an open-source project, I should have opened sourced it from the beginning, I would have gotten valuable feedback instead of mindlessly coding on my own.
I did learn more than just the project-managment side of programming, I also go to learn about modern technology like React.Js and Bun. I enjoyed learning about protocols like OAuth2 and educating myself on better security practices. I also loved developing my own versioning system and dependency-resolution algorithm. Through Sakura, I also explored compiler theory, and there were countless other programming techniques and tools I picked up along the way.
It is a sad thing to see my pet project be made obsolete, before it even came to fruition, but no third-party tool will ever beat a native integration, and I think Laminar Research will do great with their store platform. Although the code ended up being useless, and I do wish I approached the whole project differently, I don’t regret having tried to develop such a large project. But instead of letting the code rot in a private repository, I have decided to publicly archive all of the code. The web-based portion (frontends and services) are available here, and the client is available here. The code used to generate the logo can also be seen here.