# Dependency Injection

Published articles for Dependency Injection.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## How to Implement LEGO Architecture in Flutter \[Full Handbook\]

DevFeed: [How to Implement LEGO Architecture in Flutter \[Full Handbook\]](<https://devfeed.tech/articles/how-to-implement-lego-architecture-in-flutter-full-handbook-4338.md>)

Original publisher: [Read original article](<https://www.freecodecamp.org/news/how-to-implement-lego-architecture-in-flutter-handbook/>)

Author: Atuoha Anthony

Published: 2026-09-11T15:08:19Z

Content type: tutorial

Language: en

Sources: [freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More](<https://devfeed.tech/sources/freecodecamp-programming-tutorials-python-javascript-git-more.md>)

Topics: [Code](<https://devfeed.tech/topics/code.md>), [Dart](<https://devfeed.tech/topics/dart.md>), [App](<https://devfeed.tech/topics/app.md>)

Tags: [architecture](<https://devfeed.tech/tags/architecture.md>), [dart](<https://devfeed.tech/tags/dart.md>), [dependency-injection](<https://devfeed.tech/tags/dependency-injection.md>), [flutter](<https://devfeed.tech/tags/flutter.md>), [flutter-aware](<https://devfeed.tech/tags/flutter-aware.md>), [handbook](<https://devfeed.tech/tags/handbook.md>), [how-to](<https://devfeed.tech/tags/how-to.md>)

### AI overview

A Flutter handbook that introduces LEGO Architecture: building code from independently connected pieces. It also relates this approach to Clean Architecture and covers Dart contracts and dependency injection.

### Source excerpt

Almost everyone has snapped two LEGO bricks together at some point, even without owning a single set as an adult. You press one brick down onto another, feel it click, and it holds. You likely never o

## SymfonyCon Warsaw 2026: Calling the Symfony Container from Legacy Code

DevFeed: [SymfonyCon Warsaw 2026: Calling the Symfony Container from Legacy Code](<https://devfeed.tech/articles/symfonycon-warsaw-2026-calling-the-symfony-container-from-legacy-code-8582.md>)

Original publisher: [Read original article](<https://symfony.com/blog/symfonycon-warsaw-2026-calling-the-symfony-container-from-legacy-code>)

Author: Eloïse Charrier

Published: 2026-09-11T08:00:00Z

Content type: news

Language: en

Sources: [Symfony Blog](<https://devfeed.tech/sources/symfony-blog.md>)

Topics: [migration](<https://devfeed.tech/topics/migration.md>), [PHP](<https://devfeed.tech/topics/php.md>)

Tags: [announcement](<https://devfeed.tech/tags/announcement.md>), [conference](<https://devfeed.tech/tags/conference.md>), [dependency-injection](<https://devfeed.tech/tags/dependency-injection.md>), [events](<https://devfeed.tech/tags/events.md>), [migration](<https://devfeed.tech/tags/migration.md>), [php](<https://devfeed.tech/tags/php.md>), [symfony](<https://devfeed.tech/tags/symfony.md>)

### AI overview

Announcement for SymfonyCon Warsaw 2026, including a talk on booting the Symfony container from legacy PHP code to support dependency injection during migration.

### Source excerpt

Save the date for SymfonyCon Warsaw 2026 on November 26-27 in Warsaw, Poland! Experience two days of learning and networking with 3 parallel tracks and exciting community events. 🎤 Speaker announcement Next up in Warsaw: Rachelle Scheijen, Owner...

## Koin Compiler 1.2: Compile-Time Safety for ALL Koin DSL

DevFeed: [Koin Compiler 1.2: Compile-Time Safety for ALL Koin DSL](<https://devfeed.tech/articles/koin-compiler-1-2-compile-time-safety-for-all-koin-dsl-22973.md>)

Original publisher: [Read original article](<https://blog.insert-koin.io/koin-compiler-1-2-compile-time-safety-for-all-koin-dsl-4603787b9921?source=rss----925561f2ecdf---4>)

Author: Arnaud Giuliani

Published: 2026-09-10T12:01:01Z

Content type: release

Language: en

Sources: [Koin developers - Medium](<https://devfeed.tech/sources/koin-developers-medium.md>)

Topics: [Compiler](<https://devfeed.tech/topics/compiler.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Gradle](<https://devfeed.tech/topics/gradle.md>)

Tags: [compiler](<https://devfeed.tech/tags/compiler.md>), [dependencies](<https://devfeed.tech/tags/dependencies.md>), [dependency-injection](<https://devfeed.tech/tags/dependency-injection.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [implementation](<https://devfeed.tech/tags/implementation.md>), [koin](<https://devfeed.tech/tags/koin.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-multiplatform](<https://devfeed.tech/tags/kotlin-multiplatform.md>)

### AI overview

Koin Compiler Plugin 1.2, with 1.2.1 as the latest patch, extends compile-time validation to Koin's reified, constructor, and classic lambda DSLs. It also adds visibility across Gradle modules, supports additional entry points, and provides one artifact for Kotlin 2.3.20 through 2.4.20 without requiring a DSL migration.

### Source excerpt

Hello, dear Koin community 👋 I'm happy to share that Koin Compiler Plugin 1.2 is out, with 1.2.1 already available as the latest patch. Developer mascott unboxing new Koin Features!TL;DR Compile-time validation now works on the Koin application you already have, where before 1.2 it only covered code written specifically for the compiler plugin. Koin DSL -- All now covered! All Koin DSL: the plugin's reified DSL, Koin's constructor DSL (singleOf(::T)), and the classic lambda DSL (single { Foo(get()) }). Across Gradle modules: definitions are now visible two or more implementation hops away. More entry points: Ktor's install(Koin) and KoinApplication.withConfiguration<T>(). One artifact for Kotlin 2.3.20 through 2.4.20. You get there with no migration to a new DSL, and nothing to rewrite. Let's go through what shipped. Covering now all Koin DSL Until now, compile-time safety only covered the plugin's own reified DSL, which means the two DSL styles you have most likely already written were invisible to it. val appModule = module { single<UserService>() // checked singleOf(::UserRepository) // not checked before 1.2 single { AnalyticsHelper(get()) } // not checked before 1.2 } Three ways to declare a definition, and only the first was validated. If your UserRepository needed a Database that no module provided, your build passed and Koin threw at runtime. In 1.2, all three are validated. The two DSL styles get there differently. For the constructor DSL, the referenced constructor's parameters become real requirements, exactly like single<T>(), and any named() qualifier you put on the registration is matched against the consumers that ask for it. The classic lambda DSL works differently. The plugin doesn't try to work out dependencies from free-form lambda code. What it validates instead are the get() calls you wrote inside the lambda, treated as ordinary resolution call sites. Before 1.2 those calls were skipped on purpose, because a hand-written get() is difficult to dis

## A Multi-Module Android Template with Kotlin Convention Plugins, Lint Rules, and Design System Tokens

DevFeed: [A Multi-Module Android Template with Kotlin Convention Plugins, Lint Rules, and Design System Tokens](<https://devfeed.tech/articles/forget-the-setup-tax-a-production-ready-multi-module-android-template-22945.md>)

Original publisher: [Read original article](<https://proandroiddev.com/forget-the-setup-tax-a-production-ready-multi-module-android-template-f4c879c97205?source=rss----c72404660798---4>)

Author: Shamil Gulmetov

Published: 2026-09-09T01:34:18Z

Content type: tutorial

Language: en

Sources: [ProAndroidDev - Medium](<https://devfeed.tech/sources/proandroiddev-medium.md>)

Topics: [Template](<https://devfeed.tech/topics/template.md>), [Android](<https://devfeed.tech/topics/android.md>), [Architecture & Design](<https://devfeed.tech/topics/architecture-design.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Gradle](<https://devfeed.tech/topics/gradle.md>), [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [Dependency injection](<https://devfeed.tech/topics/dependency-injection.md>), [Automation](<https://devfeed.tech/topics/automation.md>), [Refactoring](<https://devfeed.tech/topics/refactoring.md>), [now-in-android](<https://devfeed.tech/topics/now-in-android.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-app-development](<https://devfeed.tech/tags/android-app-development.md>), [android-architecture](<https://devfeed.tech/tags/android-architecture.md>), [android-studio](<https://devfeed.tech/tags/android-studio.md>), [architecture](<https://devfeed.tech/tags/architecture.md>), [automation](<https://devfeed.tech/tags/automation.md>), [best-practices](<https://devfeed.tech/tags/best-practices.md>), [build](<https://devfeed.tech/tags/build.md>), [compose](<https://devfeed.tech/tags/compose.md>), [dependency-injection](<https://devfeed.tech/tags/dependency-injection.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [now-in-android](<https://devfeed.tech/tags/now-in-android.md>), [refactoring](<https://devfeed.tech/tags/refactoring.md>)

### AI overview

This tutorial presents an Android Architecture Template based on patterns from Google's Now in Android repository. It describes a multi-module structure with Gradle Version Catalogs, Kotlin Convention Plugins, Jetpack Compose design tokens and dark-theme support, dependency injection, custom Lint rules, and a terminal-based renaming tool.

### Source excerpt

How to streamline your development workflow with pre-configured Kotlin Convention Plugins, custom Lint rules, and unified design system tokens. Creating a new Android application from scratch in modern engineering is rarely as simple as clicking File -> New -> New Project in Android Studio. Before writing a single line of business logic, developers face hours -- or even days -- of repetitive infrastructure setup: Configuring a scalable multi-module architecture. Setting up Gradle Version Catalogs and writing custom Kotlin Convention Plugins to eliminate build script duplication. Standardizing design tokens and dark theme support in Jetpack Compose. Wiring up Hilt Dependency Injection for Coroutine Dispatchers, network, and Application Scopes. Enforcing architectural boundaries and team coding standards using custom static analysis (Lint) rules. Google's official Now in Android (NiA) repository is the recognized gold standard for modern Android engineering. However, because NiA is a full-featured showcase app with domain logic (news feeds, authors, bookmarks, offline sync), using it as a starter kit is cumbersome: developers must strip out existing features while risking breaking build pipelines. This Android Architecture Template bridges that gap: a clean, production-ready starter kit that extracts NiA's best architectural patterns into an isolated foundation. To make it enterprise-ready with zero room for error, it includes a standalone automation tool. Instead of manual refactoring, run a single terminal command to rename and brand the entire architecture in seconds. Acknowledgments & Credits Core architectural decisions, build-logic convention plugins, and static analysis infrastructure in this template are directly inspired by Google's official Now in Android (NiA) repository. Rather than reinventing the wheel, this template focuses on developer ergonomics--making Google's best practices instantly usable out of the box. 1. Modular Project Architecture The repository

## AI Made Code Generation Cheaper, but Developer Judgment Still Depends on Context

DevFeed: [AI Made Code Generation Cheaper, but Developer Judgment Still Depends on Context](<https://devfeed.tech/articles/code-became-cheap-did-developer-knowledge-too-37464.md>)

Original publisher: [Read original article](<https://www.angularspace.com/code-became-cheap-did-developer-knowledge-too/>)

Author: Paweł Ostromecki

Published: 2026-08-24T15:52:12Z

Content type: opinion

Language: en

Sources: [Daniel Glejzner](<https://devfeed.tech/sources/daniel-glejzner.md>)

Topics: [Code](<https://devfeed.tech/topics/code.md>), [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [Angular](<https://devfeed.tech/topics/angular.md>), [Maintainers](<https://devfeed.tech/topics/maintainers.md>), [Dependency injection](<https://devfeed.tech/topics/dependency-injection.md>), [Testing](<https://devfeed.tech/topics/testing.md>)

Tags: [agent](<https://devfeed.tech/tags/agent.md>), [ai](<https://devfeed.tech/tags/ai.md>), [angular](<https://devfeed.tech/tags/angular.md>), [code](<https://devfeed.tech/tags/code.md>), [dependency-injection](<https://devfeed.tech/tags/dependency-injection.md>), [developer](<https://devfeed.tech/tags/developer.md>), [maintainers](<https://devfeed.tech/tags/maintainers.md>), [testing](<https://devfeed.tech/tags/testing.md>)

### AI overview

This opinion article argues that AI has made code generation, syntax recall, and familiar implementations less scarce, but has not eliminated the value of developer knowledge. The author emphasizes that evaluating solutions for a real system still depends on product, codebase, team, failure costs, and future changes. It also notes that productivity findings vary by AI tool, developer experience, and task, citing differing METR results.

### Source excerpt

When implementation becomes abundant, selection becomes the work. For roughly eight years, I had a simple model of becoming a better developer. Read the documentation. Learn Angular properly. Understand RxJS, dependency injection, change detection, testing, state management, architecture. Look at how other people solve problems. Make enough mistakes to understand

## Add the dependency graph to a Kotlin K2 migration checklist

DevFeed: [Add the dependency graph to a Kotlin K2 migration checklist](<https://devfeed.tech/articles/add-the-dependency-graph-to-a-kotlin-k2-migration-checklist-23961.md>)

Original publisher: [Read original article](<https://cloud-inject.io/notes/k2-migration-injection-graphs/>)

Published: 2026-08-18T00:00:00Z

Content type: tutorial

Language: en

Sources: [Koin - Cloud-Inject.io -Kotzilla](<https://devfeed.tech/sources/koin-cloud-inject-io-kotzilla.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [migration](<https://devfeed.tech/topics/migration.md>), [Dependency injection](<https://devfeed.tech/topics/dependency-injection.md>), [Graphs](<https://devfeed.tech/topics/graphs.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>), [toolchain](<https://devfeed.tech/topics/toolchain.md>), [Android Gradle Plugin](<https://devfeed.tech/topics/android-gradle-plugin.md>), [Compose](<https://devfeed.tech/topics/compose.md>)

Tags: [android-gradle-plugin](<https://devfeed.tech/tags/android-gradle-plugin.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [compose](<https://devfeed.tech/tags/compose.md>), [dependency-injection](<https://devfeed.tech/tags/dependency-injection.md>), [graph](<https://devfeed.tech/tags/graph.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [migration](<https://devfeed.tech/tags/migration.md>), [rollback](<https://devfeed.tech/tags/rollback.md>), [toolchain](<https://devfeed.tech/tags/toolchain.md>), [verification](<https://devfeed.tech/tags/verification.md>)

### AI overview

A practical checklist for Kotlin K2 migrations in projects that generate or validate dependency wiring. It recommends mapping the compiler and build toolchain, upgrading from a known compatibility matrix, cleaning and inspecting generated output, verifying dependency graphs across flavors and targets, testing runtime slices, and keeping rollback changes coherent.

### Source excerpt

A K2 migration is usually planned around source compatibility and compiler diagnostics. Projects that generate or validate dependency wiring need another checklist: compiler plugin versions, generated sources, metadata compatibility, and graph verification on every target. Map the toolchain first Record the Kotlin plugin, Compose compiler plugin, KSP or annotation tooling, dependency-injection compiler plugin, Android Gradle plugin, and target libraries. Upgrade from a known matrix instead of selecting each latest version independently.

## Review a Koin upgrade as a graph change, not a version bump

DevFeed: [Review a Koin upgrade as a graph change, not a version bump](<https://devfeed.tech/articles/review-a-koin-upgrade-as-a-graph-change-not-a-version-bump-23963.md>)

Original publisher: [Read original article](<https://cloud-inject.io/notes/koin-version-upgrade-review/>)

Published: 2026-08-18T00:00:00Z

Content type: tutorial

Language: en

Sources: [Koin - Cloud-Inject.io -Kotzilla](<https://devfeed.tech/sources/koin-cloud-inject-io-kotzilla.md>)

Topics: [Dependency injection](<https://devfeed.tech/topics/dependency-injection.md>), [upgrade](<https://devfeed.tech/topics/upgrade.md>), [modules](<https://devfeed.tech/topics/modules.md>), [test](<https://devfeed.tech/topics/test.md>), [Compose](<https://devfeed.tech/topics/compose.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [compose](<https://devfeed.tech/tags/compose.md>), [dependency-injection](<https://devfeed.tech/tags/dependency-injection.md>), [modules](<https://devfeed.tech/tags/modules.md>), [test](<https://devfeed.tech/tags/test.md>), [upgrade](<https://devfeed.tech/tags/upgrade.md>)

### AI overview

This tutorial explains how to review a Koin dependency-injection upgrade as an architecture change rather than a simple version bump. It recommends recording the existing dependency graph, modules, warnings, startup results, and verification output; upgrading mechanisms separately; checking all startup variants; and maintaining tested rollback procedures.

### Source excerpt

Dependency-injection upgrades can change more than API names. Verification behavior, annotation processing, Compose packages, compiler integration, and deprecations can all alter how the graph is built. Treat the upgrade as an architecture change with a defined before-and-after record. Freeze the current graph Before changing versions, save the dependency lock or resolved graph, the list of DI modules, startup smoke-test results, and verification-test output. Record warnings that already exist so a new warning is not confused with old noise.

## Find technical debt at dependency-injection boundaries

DevFeed: [Find technical debt at dependency-injection boundaries](<https://devfeed.tech/articles/find-technical-debt-at-dependency-injection-boundaries-23960.md>)

Original publisher: [Read original article](<https://cloud-inject.io/notes/dependency-injection-technical-debt/>)

Published: 2026-08-18T00:00:00Z

Content type: article

Language: en

Sources: [Koin - Cloud-Inject.io -Kotzilla](<https://devfeed.tech/sources/koin-cloud-inject-io-kotzilla.md>)

Topics: [Dependency injection](<https://devfeed.tech/topics/dependency-injection.md>), [Framework](<https://devfeed.tech/topics/framework.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [architecture](<https://devfeed.tech/tags/architecture.md>), [defects](<https://devfeed.tech/tags/defects.md>), [dependency-injection](<https://devfeed.tech/tags/dependency-injection.md>), [errors](<https://devfeed.tech/tags/errors.md>), [review](<https://devfeed.tech/tags/review.md>), [structure](<https://devfeed.tech/tags/structure.md>), [technical](<https://devfeed.tech/tags/technical.md>), [test](<https://devfeed.tech/tags/test.md>), [tests](<https://devfeed.tech/tags/tests.md>)

### AI overview

This article explains how dependency-injection code can expose architectural debt. It identifies signals such as oversized modules, string qualifiers, lifetime inversion, construction that starts work, broad production-container tests, and definitions spread across UI locations. It recommends paying down debt at product-slice boundaries, separating construction from behavior, adding focused graph and behavior tests, and measuring ownership, verification, startup, and test setup.

### Source excerpt

Dependency-injection code is often treated as plumbing. It is also a compact map of architecture decisions. Review it for debt signals before adding another binding. Signals worth investigating An oversized application module usually means feature boundaries are not explicit. String qualifiers can hide a missing type. Definitions that open databases or start jobs during graph creation mix construction with behavior. A process-scoped object that accepts a screen-owned dependency indicates lifetime inversion.

## Make scalable routing system for your Flutter Apps

DevFeed: [Make scalable routing system for your Flutter Apps](<https://devfeed.tech/articles/make-scalable-routing-system-for-your-flutter-apps-23053.md>)

Original publisher: [Read original article](<https://medium.com/flutter-community/make-scalable-routing-system-for-your-flutter-apps-73510bf3d602?source=rss----86fb29d7cc6a---4>)

Author: Kanan Yusubov

Published: 2026-07-29T15:25:43Z

Content type: tutorial

Language: en

Sources: [Flutter Community - Medium](<https://devfeed.tech/sources/flutter-community-medium.md>)

Topics: [Flutter](<https://devfeed.tech/topics/flutter.md>), [Routing (disambiguation)](<https://devfeed.tech/topics/routing.md>), [navigation](<https://devfeed.tech/topics/navigation.md>), [modules](<https://devfeed.tech/topics/modules.md>), [Dependency injection](<https://devfeed.tech/topics/dependency-injection.md>), [Usability](<https://devfeed.tech/topics/usability.md>)

Tags: [clean-architecture](<https://devfeed.tech/tags/clean-architecture.md>), [dependency-injection](<https://devfeed.tech/tags/dependency-injection.md>), [flutter](<https://devfeed.tech/tags/flutter.md>), [go-router](<https://devfeed.tech/tags/go-router.md>), [modular-router](<https://devfeed.tech/tags/modular-router.md>), [modules](<https://devfeed.tech/tags/modules.md>), [navigation](<https://devfeed.tech/tags/navigation.md>), [router](<https://devfeed.tech/tags/router.md>), [routing](<https://devfeed.tech/tags/routing.md>), [routing-system](<https://devfeed.tech/tags/routing-system.md>), [usability](<https://devfeed.tech/tags/usability.md>)

### AI overview

This tutorial describes a scalable, decoupled routing system for Flutter apps. It explains a wrapper built on go_router that adds typed route arguments, native and path parameters, cross-module modularization, nested routes, presentation modes, and type-safe route guards.

### Source excerpt

Recently, I've been working on migrating our app's routing system. We previously used auto_route, but eventually realized its tightly coupled nature made it incredibly difficult to scale across independent modules. Furthermore, its heavy reliance on code generation became a bottleneck for our workflow. To resolve this, we decided to architect a clean, scalable, and highly decoupled routing system. Our new solution is a powerful wrapper built on top of go_router. It abstracts away the raw string navigation and supercharges the router with custom features to maximize usability and type safety. In this blog post, I will walk you through the core benefits of this new routing system, covering the following key topics: Unified Routing Protocol (AppRouteInfo) Strictly Typed Route Arguments Native & Path Parameters Support Cross-Module Modularization (AppModuleRouter) Hierarchical Back stack & Sub-Routes (Nested Route Definitions, Decoupled Cross-Module Navigation) Dynamic Presentation Modes (e.g., Native, ModalSheet, NoTransition) Guard Interceptor Mechanism (Type-Safe Redirects, Global Interceptors) Note: This blog will show the general usage and problems it solved. For more detailed code, you can check the following link: https://github.com/thisisyusub/scalable-routing-system-demoArchitectural Structure of Routing System Here is how the demo application is structured to achieve a fully decoupled, scalable routing system: scalable_routing_system_demo (main app): The entry point of the application responsible for wiring up all services, dependency injection, and global route configurations. app_routes: Houses all route definitions, parameters, routing protocols, and models to ensure fully type-safe navigation. This is decoupled from the core routing package to separate app-specific business needs from generic routing mechanics. routing_system (core router): A generic, domain-agnostic router package that has zero knowledge of the app's specific routes. It exclusively provid

## Starlette vs FastAPI: what FastAPI actually adds

DevFeed: [Starlette vs FastAPI: what FastAPI actually adds](<https://devfeed.tech/articles/starlette-vs-fastapi-what-fastapi-actually-adds-20058.md>)

Original publisher: [Read original article](<https://www.honeybadger.io/blog/starlette-vs-fastapi/>)

Author: Farhan Hasin Chowdhury

Published: 2026-07-20T07:00:00Z

Content type: comparison

Language: en

Sources: [Honeybadger](<https://devfeed.tech/sources/honeybadger.md>)

Topics: [FastAPI](<https://devfeed.tech/topics/fastapi.md>), [Pydantic](<https://devfeed.tech/topics/pydantic.md>), [ASGI](<https://devfeed.tech/topics/asgi.md>), [OpenAPI Specification](<https://devfeed.tech/topics/openapi.md>), [Dependency injection](<https://devfeed.tech/topics/dependency-injection.md>), [Python](<https://devfeed.tech/topics/python.md>), [WebSocket](<https://devfeed.tech/topics/websocket.md>), [Cross-origin resource sharing (CORS)](<https://devfeed.tech/topics/cors.md>)

Tags: [cors](<https://devfeed.tech/tags/cors.md>), [data-validation](<https://devfeed.tech/tags/data-validation.md>), [dependency-injection](<https://devfeed.tech/tags/dependency-injection.md>), [fastapi](<https://devfeed.tech/tags/fastapi.md>), [frameworks](<https://devfeed.tech/tags/frameworks.md>), [openapi](<https://devfeed.tech/tags/openapi.md>), [python](<https://devfeed.tech/tags/python.md>), [python-articles](<https://devfeed.tech/tags/python-articles.md>), [starlette](<https://devfeed.tech/tags/starlette.md>), [websocket](<https://devfeed.tech/tags/websocket.md>)

### AI overview

This comparison explains how FastAPI builds on Starlette and Pydantic. Starlette provides the ASGI-based HTTP layer, while Pydantic handles typed data validation; FastAPI adds type-driven parameter parsing, dependency injection, and automatic OpenAPI documentation. It also discusses when using raw Starlette may be preferable.

### Source excerpt

FastAPI is built on Starlette, but most developers never look at what's underneath. Learn what FastAPI actually adds on top of Starlette and Pydantic, what comes straight from Starlette, and when dropping down to raw Starlette makes more sense than pulling in the full stack.

## Koin Annotations Make expect/actual Obsolete in KMP

DevFeed: [Koin Annotations Make expect/actual Obsolete in KMP](<https://devfeed.tech/articles/koin-annotations-make-expect-actual-obsolete-in-kmp-22971.md>)

Original publisher: [Read original article](<https://blog.insert-koin.io/koin-annotations-make-expect-actual-obsolete-in-kmp-5f1445e2055e?source=rss----925561f2ecdf---4>)

Author: Tezov

Published: 2026-06-11T08:48:59Z

Content type: tutorial

Language: en

Sources: [Koin developers - Medium](<https://devfeed.tech/sources/koin-developers-medium.md>)

Topics: [Kotlin Multiplatform](<https://devfeed.tech/topics/kotlin-multiplatform.md>), [compose-multiplatform](<https://devfeed.tech/topics/compose-multiplatform.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>), [cross-platform](<https://devfeed.tech/topics/cross-platform.md>), [interfaces](<https://devfeed.tech/topics/interfaces.md>)

Tags: [compiler](<https://devfeed.tech/tags/compiler.md>), [compose-multiplatform](<https://devfeed.tech/tags/compose-multiplatform.md>), [cross-platform](<https://devfeed.tech/tags/cross-platform.md>), [dependency-injection](<https://devfeed.tech/tags/dependency-injection.md>), [development](<https://devfeed.tech/tags/development.md>), [interface](<https://devfeed.tech/tags/interface.md>), [kmp](<https://devfeed.tech/tags/kmp.md>), [koin](<https://devfeed.tech/tags/koin.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlinmultiplatformmobile](<https://devfeed.tech/tags/kotlinmultiplatformmobile.md>)

### AI overview

A tutorial showing how Koin annotations and the Koin compiler can replace expect/actual declarations in Kotlin Multiplatform projects. It defines shared interfaces in commonMain, provides Android and iOS implementations through dependency injection, and uses Compose Multiplatform to resolve the platform-specific behavior.

### Source excerpt

Source code available at the end of the article In Kotlin Multiplatform (KMP) projects, expect/actual is traditionally used to handle platform-specific implementations. In a previous story, I showed how to reduce expect/actual to only one per module using Koin DSL. Today, we can go further. With Koin annotations and the Koin compiler, you can completely bypass expect/actual. This method works seamlessly with Compose Multiplatform and lets you maintain a clean architecture while keeping platform-specific logic where it belongs. Previous Story Mastering Koin Annotations with the Koin Compiler Through Unit Tests -> link Next Story I don't know yet-> coming soon Setting the Stage Inside commonMain, Koin is initialized like this: @Module @ComponentScan( "com.tezov.store.shared.di", "com.tezov.store.shared.data", "com.tezov.store.shared.domain", "com.tezov.store.shared.presentation" ) class SharedModule @KoinApplication(modules = [SharedModule::class]) class SharedApplication val koinConfiguration = koinConfiguration<SharedApplication> { /* nothing here for the demo */ } I'm using: koinCompiler = "0.6.2" koinCompose = "4.2.1-RC1" koinComposeAnnotation = "4.2.1-RC1" The important part here is the @ComponentScan. Koin doesn't just scan commonMain. It also scans the platform modules: androidMain and iosMain. That detail is key because it lets Koin find all implementations without any manual wiring. Defining Contracts in commonMain Instead of expect, we define interfaces for domain and presentation layers. Domainpackage com.tezov.store.shared.domain interface PlatformDomainProtocol { fun description(): String }Presentationpackage com.tezov.store.shared.presentation import androidx.compose.runtime.Composable interface PlatformPresentationProtocol { @Composable fun ComposableFromPlatform() } Yes, you can even include a @Composable in an interface. This is powerful: your shared code can remain clean while delegating platform-specific behavior entirely to the DI container. When usi

## Koin Compiler 1.0: DSL and Annotations, Koin now Compile-Safe

DevFeed: [Koin Compiler 1.0: DSL and Annotations, Koin now Compile-Safe](<https://devfeed.tech/articles/koin-compiler-1-0-dsl-and-annotations-koin-now-compile-safe-22972.md>)

Original publisher: [Read original article](<https://blog.insert-koin.io/koin-compiler-1-0-dsl-and-annotations-koin-now-compile-safe-06905a2b04ad?source=rss----925561f2ecdf---4>)

Author: Arnaud Giuliani

Published: 2026-06-03T12:01:01Z

Content type: release

Language: en

Sources: [Koin developers - Medium](<https://devfeed.tech/sources/koin-developers-medium.md>)

Topics: [Compiler](<https://devfeed.tech/topics/compiler.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Kotlin Multiplatform](<https://devfeed.tech/topics/kotlin-multiplatform.md>), [Gradle](<https://devfeed.tech/topics/gradle.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [build](<https://devfeed.tech/tags/build.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [dependency](<https://devfeed.tech/tags/dependency.md>), [dependency-injection](<https://devfeed.tech/tags/dependency-injection.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [koin](<https://devfeed.tech/tags/koin.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-compiler](<https://devfeed.tech/tags/kotlin-compiler.md>), [kotlin-multiplatform](<https://devfeed.tech/tags/kotlin-multiplatform.md>), [plugin](<https://devfeed.tech/tags/plugin.md>)

### AI overview

Koin Compiler 1.0 introduces a native Kotlin compiler plugin that verifies Koin dependency graphs at build time. The release supports both DSL and annotation-based wiring, requires no KSP or generated files, and supports Kotlin Multiplatform.

### Source excerpt

Koin Compiler 1.0: DSL and Annotations, Now Compile-Safe Hello, dear Koin Community 👋 Koin Compiler 1.0 is out. Koin's DSL and annotations now sit on a native Kotlin compiler plugin that verifies your dependency graph at build time: the missing-definition error that used to wait for a get<T>() call no longer makes it past gradlew build: e: [Koin] Missing dependency: UserRepository (required by UserService) No KSP, no generated files, full Kotlin Multiplatform support out of the box. It's the biggest ergonomic shift we've made in Koin's nine-year history. Koin Logo with KotlinConf '26 LogoSetup 👀 If you use a Gradle version catalog (the modern default): [versions] koin = "4.2.1" koin-plugin = "1.0.0" [libraries] koin-core = { module = "io.insert-koin:koin-core", version.ref = "koin" } koin-annotations = { module = "io.insert-koin:koin-annotations", version.ref = "koin" } [plugins] koin-compiler = { id = "io.insert-koin.compiler.plugin", version.ref = "koin-plugin" } Or the equivalent inline in build.gradle.kts: plugins { id("io.insert-koin.compiler.plugin") version "1.0.0" } dependencies { implementation("io.insert-koin:koin-core:4.2.1") implementation("io.insert-koin:koin-annotations:4.2.1") } koin-annotations is only needed if you use the annotations on your classes for the constructor, or use the annotations flow. On the DSL flow, the plugin works against koin-core alone. The DSL flow -- Safer DSL ✨ Take two classes: class MyDatabase() class MyRepository(val db: MyDatabase) Wiring them up with Koin has progressively required less typing: // 1. Manual -- the wiring is explicit module { single { MyDatabase() } single { MyRepository(get()) } } // 2. Reflection-free constructor binding module { singleOf(::MyDatabase) singleOf(::MyRepository) } // 3. Compiler-intercepted - same DSL, new mechanism module { single<MyDatabase>() single<MyRepository>() } The third form looks like nothing is happening. That's the point: the compiler plugin sees single<MyDatabase>(), walks the

## How to use Jest mocks

DevFeed: [How to use Jest mocks](<https://devfeed.tech/articles/how-to-use-jest-mocks-38398.md>)

Original publisher: [Read original article](<https://blog.danlew.net/2026/05/28/how-to-use-jest-mocks/>)

Author: Dan Lew

Published: 2026-05-28T13:10:16Z

Content type: tutorial

Language: en

Sources: [Dan Lew Blog](<https://devfeed.tech/sources/dan-lew-blog.md>)

Topics: [Jest](<https://devfeed.tech/topics/jest.md>), [Mocking](<https://devfeed.tech/topics/mocking.md>), [JavaScript](<https://devfeed.tech/topics/javascript.md>), [Dependency injection](<https://devfeed.tech/topics/dependency-injection.md>)

Tags: [dependency-injection](<https://devfeed.tech/tags/dependency-injection.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [jest](<https://devfeed.tech/tags/jest.md>), [mocking](<https://devfeed.tech/tags/mocking.md>), [testing](<https://devfeed.tech/tags/testing.md>)

### AI overview

A practical introduction to Jest mocks covering module mocking, mock hoisting, automock behavior, and configuring mocked return values. It also notes limitations in the documentation and discusses considerations for TypeScript users.

### Source excerpt

For better or worse, my life has become infested by Jest mocks. I come from the land of dependency injection (I even gave a talk once!), but whenever I talk about dependency injection to JavaScript developers I get this reaction: Instead, mocking is king. Unfortunately, I've found Jests&

## Incremental Maintenance

DevFeed: [Incremental Maintenance](<https://devfeed.tech/articles/incremental-maintenance-30611.md>)

Original publisher: [Read original article](<https://ryanharter.com/blog/2026/05/incremental-maintenance/>)

Published: 2026-05-14T01:53:09Z

Content type: opinion

Language: en

Sources: [Blogs on Ryan Harter](<https://devfeed.tech/sources/blogs-on-ryan-harter.md>)

Topics: [maintenance](<https://devfeed.tech/topics/maintenance.md>), [Dependency injection](<https://devfeed.tech/topics/dependency-injection.md>), [implementation](<https://devfeed.tech/topics/implementation.md>), [screen](<https://devfeed.tech/topics/screen.md>), [App](<https://devfeed.tech/topics/app.md>)

Tags: [core](<https://devfeed.tech/tags/core.md>), [dependencies](<https://devfeed.tech/tags/dependencies.md>), [dependency-injection](<https://devfeed.tech/tags/dependency-injection.md>), [incremental](<https://devfeed.tech/tags/incremental.md>), [maintenance](<https://devfeed.tech/tags/maintenance.md>), [patterns](<https://devfeed.tech/tags/patterns.md>), [product](<https://devfeed.tech/tags/product.md>), [screen](<https://devfeed.tech/tags/screen.md>)

### AI overview

An opinion article about incremental maintenance in a large, aging application. It argues that small refactoring choices can reduce entrenched patterns, using dependency injection to keep feature-gating details out of a monolithic tab-host screen.

### Source excerpt

I recently reviewed some code at work that made me pause. The change affected a part of the codebase that we affectionately call "The Monolith", which is some of the oldest code in our 16 year old app. While there are reasonable arguments that it's hard to tease apart this older hairball of code, there are often small choices that can either move you closer to the decoupled promised land, or further entrench you in bad patterns.

## Metro 1.0.0 Is Stable as a Kotlin Multiplatform Compile-Time Dependency Injection Framework

DevFeed: [Metro 1.0.0 Is Stable as a Kotlin Multiplatform Compile-Time Dependency Injection Framework](<https://devfeed.tech/articles/metro-is-stable-39040.md>)

Original publisher: [Read original article](<https://www.zacsweers.dev/metro-is-stable/>)

Author: Zac Sweers

Published: 2026-04-27T21:07:22Z

Content type: release

Language: en

Sources: [Zac Sweers](<https://devfeed.tech/sources/zac-sweers.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Dependency injection](<https://devfeed.tech/topics/dependency-injection.md>), [multiplatform](<https://devfeed.tech/topics/multiplatform.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>), [Framework](<https://devfeed.tech/topics/framework.md>), [gradle-plugin](<https://devfeed.tech/topics/gradle-plugin.md>)

Tags: [build-performance](<https://devfeed.tech/tags/build-performance.md>), [build-times](<https://devfeed.tech/tags/build-times.md>), [compilation](<https://devfeed.tech/tags/compilation.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [dependency-injection](<https://devfeed.tech/tags/dependency-injection.md>), [experimental](<https://devfeed.tech/tags/experimental.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [gradle-plugin](<https://devfeed.tech/tags/gradle-plugin.md>), [incremental](<https://devfeed.tech/tags/incremental.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [metro](<https://devfeed.tech/tags/metro.md>), [multiplatform](<https://devfeed.tech/tags/multiplatform.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [perfetto](<https://devfeed.tech/tags/perfetto.md>), [stable](<https://devfeed.tech/tags/stable.md>)

### AI overview

Metro 1.0.0 is now stable. The Kotlin multiplatform compile-time dependency injection framework uses a compiler plugin and provides API-stable runtime APIs, MetroX artifacts, and a Gradle plugin unless marked experimental. The article also describes build-performance improvements and compile-time validation features.

### Source excerpt

New here? Metro is a multiplatform, compile-time dependency injection framework for Kotlin implemented as a compiler plugin. Metro 1.0.0 is out now and stable. This means that its runtime APIs (runtime, MetroX artifacts, Gradle plugin, etc.) are now API-stable unless annotated with an experimental annotation. This

## Managing Multi Table Inserts With Room

DevFeed: [Managing Multi Table Inserts With Room](<https://devfeed.tech/articles/managing-multi-table-inserts-with-room-22825.md>)

Original publisher: [Read original article](<http://androidessence.com/multi-table-inserts/>)

Author: Adam McNeilly

Published: 2026-04-25T00:00:00Z

Content type: article

Language: en

Sources: [Android Essence](<https://devfeed.tech/sources/android-essence.md>)

Topics: [Database](<https://devfeed.tech/topics/database.md>), [Object-oriented programming (OOP)](<https://devfeed.tech/topics/oop.md>), [Polymorphism](<https://devfeed.tech/topics/polymorphism.md>), [interfaces](<https://devfeed.tech/topics/interfaces.md>), [Dependency injection](<https://devfeed.tech/topics/dependency-injection.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [database](<https://devfeed.tech/tags/database.md>), [dependency-injection](<https://devfeed.tech/tags/dependency-injection.md>), [inheritance](<https://devfeed.tech/tags/inheritance.md>), [interfaces](<https://devfeed.tech/tags/interfaces.md>), [oop](<https://devfeed.tech/tags/oop.md>)

### AI overview

This article explains how to handle multi-table inserts in Room when entities have nested dependencies. It first considers separate DAO interfaces and a wrapper class, then shows how interface inheritance can centralize insertion logic and let dependent DAOs reuse it.

### Source excerpt

A properly relational database may have a type that appears referenced multiple times. In my SpaceNerd playground app, that is the Country object. An Agency has a country, and an Agency is a dependency of a Launch, of a Space Station, and likely more types to come. How do I enforce that any time I insert an Agency, I also insert the Countries associated with it? That's what this blog post sets out to explore, and the answer is much simpler than I thought when I started.

## Introducing the Koin Migration Skills

DevFeed: [Introducing the Koin Migration Skills](<https://devfeed.tech/articles/introducing-the-koin-migration-skills-22970.md>)

Original publisher: [Read original article](<https://blog.insert-koin.io/introducing-the-koin-migration-skills-0b4be9c819cc?source=rss----925561f2ecdf---4>)

Author: Arnaud Giuliani

Published: 2026-04-22T13:23:59Z

Content type: article

Language: en

Sources: [Koin developers - Medium](<https://devfeed.tech/sources/koin-developers-medium.md>)

Topics: [migration](<https://devfeed.tech/topics/migration.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Claude Code](<https://devfeed.tech/topics/claude-code.md>), [Android](<https://devfeed.tech/topics/android.md>), [Dagger](<https://devfeed.tech/topics/dagger.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [claude-code](<https://devfeed.tech/tags/claude-code.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [dagger](<https://devfeed.tech/tags/dagger.md>), [dagger-hilt](<https://devfeed.tech/tags/dagger-hilt.md>), [dependency-injection](<https://devfeed.tech/tags/dependency-injection.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [koin](<https://devfeed.tech/tags/koin.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [migration](<https://devfeed.tech/tags/migration.md>), [module](<https://devfeed.tech/tags/module.md>), [verification](<https://devfeed.tech/tags/verification.md>)

### AI overview

The article introduces the Koin Migration Skill, a Claude Code plugin for migrating Kotlin and Android projects from Hilt, Dagger, Toothpick, Kodein, or older Koin versions to Koin 4.x and the Koin Compiler Plugin. It describes module-by-module inventory, ranked migration planning, compile-time verification, and human checkpoints.

### Source excerpt

Hello all 👋 Migrating a Kotlin or Android project between DI frameworks (Hilt, Dagger, Toothpick, Kodein, or older Koin versions) is one of those strategic refactors that every team puts off. It touches every module, the call sites are everywhere, and the migration plan never quite survives contact with the real codebase. We wanted to take the pain out of it. So we built the Koin Migration Skill: a Claude Code plugin that automates DI migrations to Koin 4.x and the Koin Compiler Plugin, module by module, with compile-time verification and a human-in-the-loop at every step. Koin Migration Project -- 1.0.0What it covers Initially, this project is intended to help Koin developers to migrate to use the new Koin Compiler Plugin. The skill supports every realistic migration path into modern Koin, with Koin Compiler if possible. This uses either annotations or the safe DSL: Hilt -> Koin (with koin-android-dagger bridging during migration) Dagger -> Koin Toothpick -> Koin Kodein -> Koin Koin 3.x -> Koin 4.x upgrade Classic Koin DSL -> Safe DSL Koin KSP Annotations -> Koin Compiler Plugin All paths converge on the same target: Koin 4.x with Annotations or Safe DSL, powered by the Koin Compiler Plugin for compile-time DI graph verification. How it works Project documentation is available: https://github.com/InsertKoinIO/koin-migration. Point Claude at your project and describe what you want to migrate. /plugin marketplace add InsertKoinIO/koin-migration /plugin install koin-migration@koin-migrationAdding Skill in current project The skill opens with a full inventory of your DI setup: every module, binding, qualifier, and scope. It immediately produces a ranked migration table. The NowInAndroid project below has 35 DI files across core, feature, app, and sync layers. The skill maps each one: bindings count, downstream dependants, complexity rating, and a recommended order. Modules inventory, DI features usage and mapping You can't go "big-bang" in that kind of approach. You need to st

## Unlocking Koin Compile Safety -- Koin Compiler Plugin 1.0.0-RC1

DevFeed: [Unlocking Koin Compile Safety -- Koin Compiler Plugin 1.0.0-RC1](<https://devfeed.tech/articles/unlocking-koin-compile-safety-koin-compiler-plugin-1-0-0-rc1-22977.md>)

Original publisher: [Read original article](<https://blog.insert-koin.io/unlocking-koin-compile-safety-6278840ab171?source=rss----925561f2ecdf---4>)

Author: Arnaud Giuliani

Published: 2026-04-14T08:08:36Z

Content type: release

Language: en

Sources: [Koin developers - Medium](<https://devfeed.tech/sources/koin-developers-medium.md>)

Topics: [koin](<https://devfeed.tech/topics/koin.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>), [Dependency injection](<https://devfeed.tech/topics/dependency-injection.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Code generation](<https://devfeed.tech/topics/code-generation.md>)

Tags: [compilation](<https://devfeed.tech/tags/compilation.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [dependency](<https://devfeed.tech/tags/dependency.md>), [dependency-injection](<https://devfeed.tech/tags/dependency-injection.md>), [generation](<https://devfeed.tech/tags/generation.md>), [koin](<https://devfeed.tech/tags/koin.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-multiplatform](<https://devfeed.tech/tags/kotlin-multiplatform.md>), [plugin](<https://devfeed.tech/tags/plugin.md>), [release](<https://devfeed.tech/tags/release.md>), [safety](<https://devfeed.tech/tags/safety.md>)

### AI overview

Koin announces Compiler Plugin 1.0.0-RC1 for Kotlin and KMP. The release candidate validates dependency graphs during compilation and adds constructor auto-wiring across DSL and annotations.

### Source excerpt

Koin Compiler Plugin 1.0.0-RC1 -- Unlocking Compile-Safe Dependency Injection for Kotlin & KMP Hello Koin Community 👋 Compile-time safety has been one of the most requested features by the community. For years, verifying your Koin dependency graph required runtime tools with checkModules()and verify()in your test suite. They run after compilation. If something is missing, you find out in test results, not at build time. It's now time for new generation of tools for Koin. My Linkedin post for AndroidMakers Last week at Android Makers (Paris, France), we announced Koin Compiler Plugin 1.0.0-RC1! This release candidate brings compile-time safety, constructor auto-wiring, and a unified developer experience for both DSL and Annotations, all powered by a native Kotlin Compiler Plugin. Aligned with Koin 4.2.1 and Kotlin 2.3.20. Check out the roadmap and documentation to get started. Dependency graph validation is done in the Koin Compiler Plugin itself: your graph is verified as part of the build (no need to run tests). DSL, annotations, and even individual call sites are checked. The Kotlin compiler plugin ecosystem has matured, and new DI approaches are emerging. Koin's answer is straightforward: lighter Compiler codegen, an existing runtime container, and validation by design of the compilation. Koin Compiler Plugin -- 1.0.0-RC1Check the online Koin documentation for further information: https://insert-koin.io/docs/intro/koin-compiler-plugin We are also gathering some "playground apps" to showcase different scenarios of Koin Compiler Usages (https://github.com/InsertKoinIO/playground-apps) Koin Compiler Plugin Setup 🔎 Below, you will find the minimum versions of Koin & Koin Compiler Plugin that are allowed to enable compile safety (note that you need Kotlin 2.3.20): [versions] kotlin = "2.3.20" koin = "4.2.1" koin-plugin = "1.0.0-RC1" [libraries] koin-core = { module = "io.insert-koin:koin-core", version.ref = "koin" } # if using annotations koin-annotations = { module =

## Re: Dependency Injection vs. Service Locators

DevFeed: [Re: Dependency Injection vs. Service Locators](<https://devfeed.tech/articles/re-dependency-injection-vs-service-locators-39043.md>)

Original publisher: [Read original article](<https://www.zacsweers.dev/re-dependency-injection-vs-service-locators/>)

Author: Zac Sweers

Published: 2026-02-20T05:10:16Z

Content type: opinion

Language: en

Sources: [Zac Sweers](<https://devfeed.tech/sources/zac-sweers.md>)

Topics: [Dependency injection](<https://devfeed.tech/topics/dependency-injection.md>), [Dagger](<https://devfeed.tech/topics/dagger.md>), [koin](<https://devfeed.tech/topics/koin.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [service](<https://devfeed.tech/topics/service.md>), [multiplatform](<https://devfeed.tech/topics/multiplatform.md>)

Tags: [dagger](<https://devfeed.tech/tags/dagger.md>), [dependency-injection](<https://devfeed.tech/tags/dependency-injection.md>), [koin](<https://devfeed.tech/tags/koin.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [metro](<https://devfeed.tech/tags/metro.md>), [service](<https://devfeed.tech/tags/service.md>)

### AI overview

The article compares dependency injection frameworks with service locators, focusing on compile-time validation, testing, isolation, generated performance, and the tradeoff of requiring more explicit code. It discusses Metro, Dagger, Hilt, Anvil, kotlin-inject, Koin, and manual dependency injection.

### Source excerpt

This is a port of a write-up I did in the Kotlin Lang slack here in response to the question "Dagger vs. Hilt vs. Koin vs. Metro vs. <what comes next>. Serious question: Are there any compelling reasons to switch from Koin to Metro in a

## From Dagger to Metro

DevFeed: [From Dagger to Metro](<https://devfeed.tech/articles/from-dagger-to-metro-20445.md>)

Original publisher: [Read original article](<https://vinted.engineering//2026/02/12/from-dagger-to-metro/>)

Author: Andrius Semionovas

Published: 2026-02-12T00:00:00Z

Content type: article

Language: en

Sources: [Vinted](<https://devfeed.tech/sources/vinted.md>)

Topics: [Dependency injection](<https://devfeed.tech/topics/dependency-injection.md>), [Android](<https://devfeed.tech/topics/android.md>), [migration](<https://devfeed.tech/topics/migration.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Dagger](<https://devfeed.tech/topics/dagger.md>), [interoperability](<https://devfeed.tech/topics/interoperability.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>), [modules](<https://devfeed.tech/topics/modules.md>), [Gradle](<https://devfeed.tech/topics/gradle.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [compatibility](<https://devfeed.tech/tags/compatibility.md>), [compilation](<https://devfeed.tech/tags/compilation.md>), [dagger](<https://devfeed.tech/tags/dagger.md>), [dependency-injection](<https://devfeed.tech/tags/dependency-injection.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [interoperability](<https://devfeed.tech/tags/interoperability.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [migration](<https://devfeed.tech/tags/migration.md>), [modules](<https://devfeed.tech/tags/modules.md>)

### AI overview

Vinted's Android developers describe their migration from Dagger and related dependency-injection tools to Metro. The article covers their large, modular codebase, Anvil's maintenance status and K2 migration pressure, and Metro's interoperability with Dagger, Anvil, and kotlin-inject.

### Source excerpt

Metro - modern and kotlin injection framework created by Zac Sweers. And we, Android developers at Vinted, officially and fully migrated to it! It was quite a bumpy ride for our huge codebase. Our story begins...

## Flattening my Dependency Graph

DevFeed: [Flattening my Dependency Graph](<https://devfeed.tech/articles/flattening-my-dependency-graph-32249.md>)

Original publisher: [Read original article](<https://publicobject.com/2026/02/03/flattening-my-dependency-graph/>)

Author: Jesse Wilson

Published: 2026-02-03T05:28:50Z

Content type: opinion

Language: en

Sources: [Public Object](<https://devfeed.tech/sources/public-object.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Persistence](<https://devfeed.tech/topics/persistence.md>), [Dependency injection](<https://devfeed.tech/topics/dependency-injection.md>), [PostgreSQL](<https://devfeed.tech/topics/postgresql.md>), [Ktor](<https://devfeed.tech/topics/ktor.md>)

Tags: [dependency-injection](<https://devfeed.tech/tags/dependency-injection.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [ktor](<https://devfeed.tech/tags/ktor.md>), [modules](<https://devfeed.tech/tags/modules.md>), [persistence](<https://devfeed.tech/tags/persistence.md>), [postgresql](<https://devfeed.tech/tags/postgresql.md>)

### AI overview

The author describes structuring a Kotlin server's dependency graph using a three-module pattern for each feature: public API, implementation, and dependency-injection wiring. The approach aims to support parallel builds, reduce unnecessary rebuilds, and keep dependencies manageable.

### Source excerpt

Rounds has a Kotlin server that integrates a few things: PostgreSQL persistence via SQLDelight (hosted on PlanetScale!) WebAuthn4J for Passkeys kotlinx.html for dynamic web pages Ktor for HTTP binding The service uses six database tables. The business domain tables are Game and GameEvent. Support for auth, sessions, and collaborative

## Why I'm Seeking Sponsors for Metro, a Kotlin Dependency Injection Compiler

DevFeed: [Why I'm Seeking Sponsors for Metro, a Kotlin Dependency Injection Compiler](<https://devfeed.tech/articles/sponsoring-metro-39044.md>)

Original publisher: [Read original article](<https://www.zacsweers.dev/sponsoring-metro/>)

Author: Zac Sweers

Published: 2026-01-29T15:56:29Z

Content type: opinion

Language: en

Sources: [Zac Sweers](<https://devfeed.tech/sources/zac-sweers.md>)

Topics: [Compiler](<https://devfeed.tech/topics/compiler.md>), [Dependency injection](<https://devfeed.tech/topics/dependency-injection.md>), [build performance](<https://devfeed.tech/topics/build-performance.md>), [build times](<https://devfeed.tech/topics/build-times.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Mobile](<https://devfeed.tech/topics/mobile.md>), [monorepo](<https://devfeed.tech/topics/monorepo.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [build-performance](<https://devfeed.tech/tags/build-performance.md>), [build-times](<https://devfeed.tech/tags/build-times.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [dependency-injection](<https://devfeed.tech/tags/dependency-injection.md>), [developer-productivity](<https://devfeed.tech/tags/developer-productivity.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [metro](<https://devfeed.tech/tags/metro.md>), [monorepo](<https://devfeed.tech/tags/monorepo.md>), [open-source](<https://devfeed.tech/tags/open-source.md>)

### AI overview

The author discusses opening GitHub sponsorship for Metro, a Kotlin dependency injection project. They report build-performance gains, benchmark results against Dagger, compatibility across Kotlin and IDE versions, and adoption by several engineering teams.

### Source excerpt

Metro is the proudest work of my career. Ever since starting it on vacation in November 2024, building it has been an incredible journey and the community reception has been nothing short of wonderful. It sits at the intersection of several fields I've come to specialize in, ranging

## Cash Android Moves to Metro

DevFeed: [Cash Android Moves to Metro](<https://devfeed.tech/articles/cash-android-moves-to-metro-29007.md>)

Original publisher: [Read original article](<https://code.cash.app/cash-android-moves-to-metro>)

Author: Egor Andreevich

Published: 2025-11-18T00:00:00Z

Content type: article

Language: en

Sources: [Cash App Code Blog](<https://devfeed.tech/sources/cash-app-code-blog.md>)

Topics: [migration](<https://devfeed.tech/topics/migration.md>), [Android](<https://devfeed.tech/topics/android.md>), [Dependency injection](<https://devfeed.tech/topics/dependency-injection.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Dagger](<https://devfeed.tech/topics/dagger.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [dagger](<https://devfeed.tech/tags/dagger.md>), [dependency-injection](<https://devfeed.tech/tags/dependency-injection.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [migration](<https://devfeed.tech/tags/migration.md>)

### AI overview

The Cash Android team completed a migration from Dagger and Anvil to Metro, a compile-time dependency injection framework. The move was driven by the Kotlin-heavy codebase, the complexity of Dagger's Java-based build pipeline, and Anvil's lack of K2 support.

### Source excerpt

The Cash Android team have completed the migration to Metro.

## Design Patterns Are Everywhere in Laravel. The Artisan of the Day Is Mary Perry.

DevFeed: [Design Patterns Are Everywhere in Laravel. The Artisan of the Day Is Mary Perry.](<https://devfeed.tech/articles/design-patterns-are-everywhere-in-laravel-the-artisan-of-the-day-is-mary-perry-3621.md>)

Original publisher: [Read original article](<https://laravel.com/blog/design-patterns-are-everywhere-in-laravel-the-artisan-of-the-day-is-mary-perry>)

Author: Ana Tavares

Published: 2025-08-07T12:49:56Z

Content type: article

Language: en

Sources: [Laravel Blog](<https://devfeed.tech/sources/laravel-blog.md>)

Topics: [Laravel](<https://devfeed.tech/topics/laravel.md>), [Code](<https://devfeed.tech/topics/code.md>), [Dependency injection](<https://devfeed.tech/topics/dependency-injection.md>), [Databases](<https://devfeed.tech/topics/databases.md>)

Tags: [architecture](<https://devfeed.tech/tags/architecture.md>), [code](<https://devfeed.tech/tags/code.md>), [community](<https://devfeed.tech/tags/community.md>), [database](<https://devfeed.tech/tags/database.md>), [dependency-injection](<https://devfeed.tech/tags/dependency-injection.md>), [design-patterns](<https://devfeed.tech/tags/design-patterns.md>), [developer](<https://devfeed.tech/tags/developer.md>), [ecosystem](<https://devfeed.tech/tags/ecosystem.md>), [framework](<https://devfeed.tech/tags/framework.md>), [laravel](<https://devfeed.tech/tags/laravel.md>)

### AI overview

This Laravel article profiles Mary Perry and her Laracon talk about the design patterns embedded in Laravel's architecture. It describes singleton and factory patterns, facades as encapsulation, dependency injection through the service container, and the builder pattern in the middleware pipeline.

### Source excerpt

When it comes to finding the poetry hidden in Laravel's architecture, Mary Perry sees what others miss.

[Next page](<https://devfeed.tech/tags/dependency-injection.md?cursor=WyIyMDI1LTA4LTA3VDEyOjQ5OjU2KzAwOjAwIiwgImVhNzk1OTkwLWNlNjctNDZlYi05OWQ2LTk1ODE0ZWE4YzY5NSJd>)