ddi
Made in the European Union
About

A small library,
maintained for over a decade.

DDI – Dynamic Dependency Injection – is a focused, nano-sized library that hands the wiring decision back to your application code. It is built and maintained by one engineer, independently, in the European Union, under EUPL 1.2.

Sven Ruppert — author and maintainer of DDI
Sven Ruppert
Author & maintainer

Who maintains this

Hi, I'm Sven Ruppert. DDI started over a decade ago, originally as part of the org.rapidpm project family, because I kept rebuilding the same pattern across projects: a ClassResolver that decides at runtime which implementation to inject — based on the user, the tenant, the plan, the feature flag. Spring and Guice forced me to express that decision in their lifecycle. DDI was my answer: keep DI tiny, hand the decision back to plain Java.

I've been writing Java in production for over 20 years, across enterprise platforms, regulated industries, and a long stint at JFrog as a Developer Advocate before going independent. Today I split my time between this library, its sister project functional-reactive, jSentinel (a Core-Java security library that pairs beautifully with DDI's resolvers), consulting engagements, and a YouTube channel.

I believe in tools that respect the user: small surface area, no magic, no surprise behaviour, and licences that don't pivot. That's why DDI ships under EUPL 1.2, keeps its public API to five core classes, and stays compatible with current LTS Java.

Principles

What the library tries to be

Decision belongs in your code

The resolver runs every time. Whatever rule picks the implementation lives in plain Java where you can read it, test it, and step through it with a debugger — not in an XML file or annotation table.

Small surface area

Five public classes in the core. You can read the entire library in an afternoon. If a feature doesn't earn its keep, it doesn't go in.

Mutation-proven

Over 90 % PIT mutation coverage. The library tests itself the way you should test yours — assertions on behaviour, not on bookkeeping.

License that stays

EUPL 1.2. Permanently. No source-available pivots, no rug-pulls. If sponsorship ends, the licence stays.

Elsewhere

Other projects & channels

Get in touch

Questions, ideas, problems?

For library-specific issues, open a ticket on GitHub. For consulting or sponsorship, drop me an email.