DDI 06.01.01 — standalone documentation site
DDI now has its own home at ddi.svenruppert.com. Same library, same EUPL 1.2 license — just a place where the dynamic-resolution story can be told properly.
May 18, 2026
DDI has lived for over a decade inside the umbrella dependencies repository. That worked while the library was an internal helper. It stopped working once the dynamic-resolution story — the reason DDI exists — got buried under the parent project’s release notes for everything else.
So: this site.
What’s new in 06.01.01
This is primarily a documentation release. The library API did not change in a
breaking way; the source still lives in
[svenruppert/dependencies]({{ .Site.Params.github }}) as the
ddi module.
What did change:
- A dedicated home at ddi.svenruppert.com. Every public class, every resolution rule, every tutorial gets its own URL.
- Resolution rules, written out. The full decision table that lived in the README is now its own page with the rules grouped by what you injected.
- Tutorial scaffolding. The recipe-style tutorials — pricing-tier routing, quota-aware degradation, multi-tenant impl routing — are stubbed out. They’ll be filled in over the next few weeks, in roughly that order.
Why the documentation, why now
A library is only as useful as its docs. For ten years, the answer to “how does
DDI’s ClassResolver differ from a Spring qualifier?” was “read the tests in
junit/com/svenruppert/ddi/classresolver.” That’s a fine answer for me. It’s
not a fine answer for anyone else.
The dynamic-resolution mechanism — the resolver runs on every @Inject and
decides which class comes out — is what makes DDI useful for runtime-shaped
problems: pricing tiers, multi-tenancy, feature flags, canaries, runtime
mocking. None of that was discoverable from the old README. Now it is.
What’s next
- The five SaaS tutorials. DDI + jSentinel is the flagship story; that’s the first one I’ll write up end-to-end.
- A
module-info.javafor the JPMS folks. - Resolver tracing — when a resolver picks an impl, you should be able to ask why. That hooks into JFR cleanly.
Sponsorship moves these up the queue. Otherwise they ship when they ship.
If you find a doc page that’s confusing, a code snippet that doesn’t compile, or a rule in the resolution table that’s wrong — [open an issue]({{ .Site.Params.github }}/issues). The single best contribution right now is “I tried to do X and got stuck at Y.”