koin 0.15.0-nullsafety.0 copy "koin: ^0.15.0-nullsafety.0" to clipboard
koin: ^0.15.0-nullsafety.0 copied to clipboard

A pragmatic lightweight dependency injection framework for Dart projects.

Koin.dart #


build codecov Star on Github style: effective dart

An pragmatic and flexible lightweight dependency injection library. This is a port of Koin for Dart projects.

Written in pure Dart, using functional resolution only: no code generation, no reflection.

Package Pub
koin pub package
koin_test pub package
koin_flutter pub package
koin_bloc pub package
koin_devtools pub package

Why should I use Koin? #

  • Allows to dispose your objects at the moment that you are no longer using them.

  • It does not depend on the Flutter.

    • The core does not depend on Flutter, so it is possible to use it with any Dart application.
  • Define in which scope a variable can be accessed.

    • The koin scope allows you to define in which part of the widget tree a variable will be accessible
  • Integration by default for Bloc library, but it can be easily used with any state management.

  • Koin DevTools to inspect the state of your objects.

    • Inspect the internal state of each object at any time on a Flutter page.
  • Dependencies are instances only when needed.

    • Its class is instant when used for the first time.
  • It is not invasive.

    • Insert Koin in your project without changing the structure of your widgets.
  • Facilitates dependency injection by constructor

    • Using dependency injection by constructor you decrease the coupling and make the test easier.
    • Makes it easy to know the dependencies of your components. Just look at your class's constructor to identify how dependencies it uses.

Features #

  • Modules
  • Scopes
  • Singleton provider(definition)
  • Factory provider(definition)
  • Scoped provider(definition)
  • Support to multiple bindings
  • Support to named provider(definition)
  • Easy testing
  • Lazy inject
  • Logging
  • Support to parameter injection
  • Integration by default for Bloc library
  • DevTools for state inspection

What Koin.dart is not? #

It is not a state manager. Koin does not have any type of state management, use koin with any state manager.

Table Of Contents #

Roadmap #

  • Improve documentation
  • Add more examples
    • Example of use with Redux, Mobx and RxDart.
  • Create an external DevTools
  • Add logger plugin for logger

Quick Start #

Basic Setup #

Dart #

  koin: ^[version]

Flutter #

  koin: ^[version]
  koin_flutter: ^[version]

Declare a Koin module #

// Given some classes 
class Bloc {
  final Repository service;


  get state => "Hello";

class Repository {}

// just declare your providers(definitions)
final myModule = Module()
  // Declare a single provider(definition) for Bloc class
  ..single((s) => Bloc(s.get()))
  // Declare a single provider(definition) for Repository class
  ..single((s) => Repository());

Starting Koin #

Use the startKoin() function to start Koin in your application.

In a Dart app:

void main(List<String> args) {

In an Flutter app:

void main() {
  startKoin((app) {

Injecting dependencies #

class MyHomePage extends StatelessWidget {
  Widget build(BuildContext context) {

    // Get a dependency
    final bloc = get<Bloc>();
    return Container(
      child: Text("${bloc.state()}"),

Setup #

Dart #

koin: ^[version]
# Koin for Unit tests
koin_test: ^[version]

Flutter #

  koin: ^[version]
  koin_flutter: ^[version]

# Koin for Unit tests
  koin_test: ^[version]

Flutter + Bloc #

  koin: ^[version]
  koin_flutter: ^[version]
  koin_bloc: ^[version]

# Koin for Unit tests
  koin_test: ^[version]

Examples #

Basic #

An simple example in Flutter. Code: Repository

Counter #

A more elaborate example using Bloc library as a state management. Code: Repository

Real World #

A application to demonstrate the Koin in a real world application.


  • Log in
  • Sign up
  • Loggout
  • Password reset

Code: Repository

DevTools #

Koin DevTools allows you to inspect the internal state of the objects created by the providers(definitions).

Usage #

Just insert the KoinDevTools Widget somewhere in your application or use showDevTools.

class Page extends StatefulWidget {
  _PageState createState() => _PageState();

class _PageState extends State<Page> {
  Widget build(BuildContext context) {
    return Scaffold(
     /// Just insert the KoinDevTools
      endDrawer: KoinDevTools(),
      body: IconButton(icon: Text('Shod DevTools'), onPressed: () {
        // Or use this

Ask a Question? #

Reporting issues #

Found a bug on a specific feature? Open an issue on Github issues

Contribute #

Want to help or share a proposal about Koin? problem on a specific feature?

  • Open an issue to explain the issue you want to solve Open an issue
  • After discussion to validate your ideas, you can open a PR or even a draft PR if the contribution is a big one Current PRs

Maintainers #

Credits #

Dependencies #

pub points


unverified uploader

A pragmatic lightweight dependency injection framework for Dart projects.

Repository (GitHub)
View/report issues


API reference


Apache-2.0 (license)


kt_dart, meta


Packages that depend on koin