Let me quickly explain what really is my problem with VibeCustomMain. There are two conflicting goals which were not conflicting when only rdmd was used:

  1. The whole static this {} thing for vibe.d is meant foremost for small projects and also especially for developers coming from scripting languages. They frequently seem to think that not having an explicit main loop or main function is some serious advantage and this basically was the answer to that. It also helps to hide a small design problem that still exists WRT vibedist, but that's a different topic.

    So in this scenario, using static this instead of main() should mean that absolutely no configuration is necessary, because it is especially intended for small projects and beginners.

  2. Now that vibe.d is just another library in the DUB context, point 1 suddenly forces everyone who wants to use it merely as a library to put a -version=CustomMain in the project. Care must be taken to not put that version in a "library" configuration, as it is applied to all projects that depend on this project, too, and if those actually want to use only static this it would fail to link with no main() defined. (That's also the reason why the ddox projects manually defines its configurations).

In essence, it would be nice if both cases would work without configuration, like they used to in the pure rdmd days by importing either vibe.d or vibe.vibe. Preferably this should work without looking at the source file, especially without compiling it to look for dependencies, and without introducing something more or less hard-coded for vibe.d.