Disclaimer: I’m the CEO of Dagger.
You’re right that we offer SDKs for popular languages, which happen to be imperative. But Dagger remains a declarative system, so what you liked about the earlier versions is still there. The trick is that we moved the declarative layer from static CUE configurations to dynamic GraphQL queries. Then we generated client libraries in various languages from the GraphQL schema. So not only can you still declaratively construct your DAG like before, you can do it in whatever language you prefer. You can even run a DAG directly in pure GraphQL: see https://play.dagger.cloud which lets you do this straight from the browser.
A useful analogy is SQL: it’s a declarative language that is commonly combined with another, often imperative, language.
I hope you find this message useful and consider giving Dagger another chance.