Toothpick alternatives and similar packages
Based on the "Dependency Injection" category.
Alternatively, view Toothpick alternatives based on common mentions on social networks and blogs.
-
Guice
Guice (pronounced 'juice') is a lightweight dependency injection framework for Java 11 and above, brought to you by Google. -
ActivityStarter
Simple Android Library, that provides easy way to start the Activities with arguments.
InfluxDB high-performance time series database

* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of Toothpick or a related project?
README
Toothpick (a.k.a T.P. like a teepee)
Visit TP wiki !
What is Toothpick ?
Toothpick is a scope tree based Dependency Injection (DI) library for Java.
It is a full-featured, runtime based, but reflection free, implementation of JSR 330.
What does Toothpick offer ?
//a typical Toothpick scope tree during the execution of an Android app.
@ApplicationScope
/ | \
/ | \
/ | \
@ViewModelScope | Service 2
/ |
/ Service 1
/
@Activity1Scope
/
/
Activity 1
/ \
/ Fragment 2
/
Fragment 1
Scopes offer to compartmentalize memory during the runtime of an app and prevent memory leaks. All dependencies created via Toothpick, and available for injections, will be fully garbage collected when this scope is closed. To learn more about scopes, read TP wiki.
Toothpick is :
- pure java (Android support is provided: "Smoothie", Kotlin support is provided by "KTP")
- fast, it doesn't use reflection but annotation processing
- TP supports incremental annotation processing (isolating).
- simple, flexible, extensible & powerful, robust & tested
- thread safe
- documented & Open Source
- scope safe : it enforces leak free apps
- test oriented : it makes tests easier
- is a candidate of choice for Android or any other context based framework (such as web containers)
Examples
This is the example:
Setup
The latest version of TP is provided by a badge at the top of this page.
For Android :
#android setup using gradle 5.5.1
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.4.x'
}
}
...
#for java
dependencies {
implementation 'com.github.stephanenicolas.toothpick:toothpick-runtime:3.x'
// and for android -> implementation 'com.github.stephanenicolas.toothpick:smoothie-androidx:3.x'
annotationProcessor 'com.github.stephanenicolas.toothpick:toothpick-compiler:3.x'
//highly recommended
testImplementation 'com.github.stephanenicolas.toothpick:toothpick-testing-junit5:3.x'
testImplementation 'mockito or easymock'
}
#for kotlin
dependencies {
implementation 'com.github.stephanenicolas.toothpick:ktp:3.x'
kapt 'com.github.stephanenicolas.toothpick:toothpick-compiler:3.x'
//highly recommended
testImplementation 'com.github.stephanenicolas.toothpick:toothpick-testing-junit5:3.x'
testImplementation 'mockito or easymock'
}
For java:
<!--java setup with maven -->
<dependencies>
<dependency>
<groupId>com.github.stephanenicolas.toothpick</groupId>
<artifactId>toothpick-compiler</artifactId>
<version>3.x</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.github.stephanenicolas.toothpick</groupId>
<artifactId>toothpick-runtime</artifactId>
<version>3.x</version>
<scope>compile</scope>
</dependency>
<!-- highly recommended-->
<dependency>
<groupId>com.github.stephanenicolas.toothpick</groupId>
<artifactId>toothpick-testing</artifactId>
<version>3.x</version>
<scope>test</scope>
</dependency>
<dependency>
<easymock or mockito>
</dependency>
</dependencies>
Support
TP is actively maintained and we provide support to questions via the Toothpick-di tag on Stack Over Flow.
Ask questions on Stack Over Flow while keeping the GitHub issue board for real issues. Thx in advance !
Talks & Articles
- A Dependency Injection Showdown - Pro Android Dev article
- Toothpick 3 — a hidden gem in the DI world - Medium article
- How I learned to love unit testing with Toothpick - Groupon's medium blog article
- Droidcon, Boston 2017 - Slides & Video
- Migrating off RoboGuice 3 (to Toothpick) - Part 1 & Part 2
- Mobius, Saint Petersburg 2017 - Slides
- Mobius, Saint Petersburg 2017 - DI frameworks & Internals Slides
- Android Makers, Paris 2017 - Slides & Video
- DroidCon, Kaigi 2017 - Slides
- Andevcon, San Francisco 2016 - Slides
- DroidCon, Krakow 2016 - TP Vs Dagger 2 Talk from Danny Preussler slides
- Mobile Era, Oslo 2016 - Slides
- Droidcon, Berlin 2016 - Slides - Sketch notes
- Android Leaks 2016 - podcast in French
- DevFest Belgium 2016 - video in French
- DevFest Siberia 2017 - video in Russian
- DevFest North 2017 - video in Russian
- Toothpick: a simple DI for Android development (Russian)
Wanna know more ?
Visit Toothpick's wiki !
Alternative Dependency Injection (DI) engines for Android
RoboGuice(deprecated)Dagger 1(deprecated)- Dagger 2
- transfuse
- lightsaber
tiger(deprecated)- feather
- proton
- koin
- Kodein-DI
Libs / Apps using TP 2
- Okuki is a simple, hierarchical navigation bus and back stack for Android, with optional Rx bindings, and Toothpick DI integration.
- KotlinWeather is a simple example of using ToothPick with Kotlin and gradle integration using kapt.
Credits
TP 1 & 3 have been developped by Stephane Nicolas and Daniel Molinero Reguera. Most of the effort on version 2 has been actively supported by Groupon. Thanks for this awesome OSS commitment !
*Note that all licence references and agreements mentioned in the Toothpick README section above
are relevant to that project's source code only.