Coursier + Bloop = Another Build Tool?

Just out of curiosity, since these two both have plugins of sbt, why not just ditch sbt and combine these two to create a tool just like rust-lang’s cargo to get away from all the quirks that sbt has and provide a more easy-to-use experience to the newcomers. I know backward compatibility is important, but scala3 is already a giant leap and why not leverage that and promote a new build tool?

PS: I am not trying to blame sbt and ignore the work of sbt contributers but I have to say sbt doesn’t meet my expectation in many ways.

Just for reference: Coursier + Bloop = Another Build Tool? - Question - Scala Users

What you explain is pretty much exactly seed.

I’ve actually thought about this some as at times I really want a very simple way to go from a declarative build definition to Bloop files. Ironically in Metals we have something called QuickBuild that we use for testing that sort of does this. That’s what originally made me interested in exploring this. As coursier continues to expand, gain more functionality and become even more of a main stream tool for Scala developers, I can see how this comes into mind.

With that being said, even after playing around with this myself, I always come back to the same thing: For simple projects, especially for newcomers, sbt is actually pretty simple. From my experience most of the time when you hit on crazy stuff in sbt it’s because you’re doing crazy things. Not always, but more often than not. I think sbt is a good example of “make easy things easy and hard things possible”.

but I have to say sbt doesn’t meet my expectation in many ways.

I’d be curious to know in what ways sbt doesn’t meet your needs that you think a TOML file would be able to meet?

3 Likes

In fact, I’m doing the basic stuff: code, add dependency, compile and run. It’s just I don’t have any good user experience with sbt. This is a very subjective opinion and I’m not trying to condemn sbt. All I want to say is now that editors are using bloop underneath and coursier does a good job to manage fetch artifact, why bother to use their sbt plugins just to use them instead of using them directly.

To support what @ckipp01 said about seed, here is a quote from its readme:

Seed achieves its simplicity by delegating much of the heavy lifting to external tools and libraries, notably Bloop and Coursier. The decision of using TOML for configuration and the build schema are influenced by Cargo.

This sounds exactly like what OP is suggesting, I think.

I’m not sure about current status of seed’s maintenance though…

3 Likes