Separating the IDE into "sub projects" #2685
Replies: 2 comments 2 replies
-
I think this is going on the borderline of over-engineering ;) The most obvious approach is that this would make it easier, as you explained, for third party tools to reuse things. It would be a good thing.
I think we sometimes go for complex tools because of the sake of "see it will be more flexible" and overlook all the risks/complexity that come with it.
We can already make folders inside subfolders :) And questions like "When do we need to create a package? What if I think that a component should be moved to one package to another? " are answered very simply with folders: drag'n'drop the files, let VS Code auto update the imports, done. 10 seconds. That's how we keep a very fast development speed.
Same, if you want this, you can just refactor the library to be imported as a module. It's already possible :) This being said, I know the current approach is not giving all the answers - it's hard for third party tools to integrate. But maybe we can:
For example:
We could do this, but then we have to maintain it. We have so much features and work to do on GDevelop, are we really ready to maintain a UI library, handle bugs in it, answer to feature requests, ensure we follow semver (and so constraining us?). Basically, I'm afraid we're lacking some focus here. Our focus is to make the greatest game engine that is something so easy to use, intuitive and well designed that it can be used by everyone. Tooling made around GDevelop is very welcome! But we won't publish a UI library for this. If we are Adobe or Microsoft, we can release a design system. But it is a full time job for at least 2 or 3 persons! That was a big rant :D But I wanted to give a clear explanation. I think we're really going in the over-engineering side of things in the current situation.
|
Beta Was this translation helpful? Give feedback.
-
@arthuro555 Quick additional note: In other words, we can agree on a public interface, even if not published on npm. |
Beta Was this translation helpful? Give feedback.
-
A currently trending repository architecture are monorepos with many small subpackages, constituting the main software when put together, like for example gatsby, pixi or CRA.
While looking into this, I had an idea: what if we split some parts of the IDE in separate packages?
I see GDevelop tools based on web technologies slowly popping up (GDInstaller, GDevelop-Project-Manager), it would be nice if we had the newIDE/app/src/UI folder published as a component library on npm, to allow them to use the same UI elements and be familiar to GDevelop users.
We could even split some more "high level" components like the events editor as a package too, to allow interesting tools to be created (for example, this could be used to make a "GDevelop git client", by rendering the diff with the events editor and allowing to fix conflicts using the events editor, or to make a "FSM maker", where you can have an FSM as flow graph and attach/edit some events for one specific node)...
The things I think we could split into npm packages:
import SemiControlledAutoComplete from '../../../../UI/SemiControlledAutoComplete';
->import { SemiControlledAutoComplete } from '@gdevelop/ui'
const gd: libGDevelop = global.gd; const project = new gd.Project()
->import { Project } from '@gdevelop/core'; const project = new Project();
This would also make the IDE code less intimidating, it is currently looking very scary with the 51 subfolders in newIDE/app/src 😱 . Having some separated packages like this allow adding more structure, making the project less intimidating and easier to navigate for new contributors.
If those are published on npm and used by the community, in addition to growing the GDevelop ecosystem, this would also:
All of this would therefore also allow providing a better development experience to everyone.
I hope to hear your opinion on this, because I think it could be a huge positive change.
Beta Was this translation helpful? Give feedback.
All reactions