TypeScript Inversion of Control container for Dependency Injection.
It supports Functions and Classes, Scoped Containers, Transient and Singleton Strategies, and Cyclic Dependency Detection.
- 🪶 0.9KB minified
- 🧩 Zero dependencies
- 📦 TypeScript and ESM
- 🧪 100% Test Coverage
- 🌐 Runtime Agnostic (Browser, Node, Deno, Bun, AWS, Vercel, Cloudflare, ..)
import { createContainer } from 'conteneur'
const container = createContainer()
container.register({
dataService: [createDataService],
reportService: [createReportService],
})
const reportService = container.resolve('reportService')
reportService.getReport() // Report: data from DataServiceFull TypeScript example with resolution, injection, scoping: docs/typescript-example.md
Creates a new container.
createContainer(options?: ContainerOptions): Containeroptions.defaultStrategy : transient (default) - singleton
Registers multiple resolvers within the container.
container.register(entries: ResolverEntries): voidoptions.strategy : transient (default) - singleton
Injects a function or a class registered in the container with its dependencies and returns the result.
container.resolve<Key extends keyof Container>(key: Key): Container[Key]Injects a function or a class not registered in the container with its dependencies and returns the result.
container.inject<T>(target: FunctionFactory<T>): TCreates a new scope within the container.
container.createScope(): void| ConteneurJS | InversifyJS | TSyringe | TypeDI | Awilix | |
|---|---|---|---|---|---|
| TS + ESM + Tests | ✅ | ✅ | ✅ | ✅ | ✅ |
| Dependency Count | 🥇 0 | 🥈 1 | 🥈 1 | 🥇 0 | 🥉 2 |
| Runtime Agnostic | ✅ | ❌ | ❌ | ❌ | ❌ |
| Function Support | ✅ | ❌ | ❌ | ❌ | ✅ |
| Class Support | ✅ | ✅ | ✅ | ✅ | ✅ |
| Value Support | ✅ | ❌ | ❌ | ❌ | ✅ |
| Decorator Free | ✅ | ❌ | ❌ | ❌ | ✅ |
| Lifetime Management | ✅ | ✅ | ✅ | ✅ | ✅ |
| Scoped Container | ✅ | ✅ | ✅ | ❌ | ✅ |
| Size (min) | 🥇 1.1kb | ➖ 49.9kb | ➖ 15.6kb | 🥈 9.5kb | 🥉 12.5kb |
| Size (min + gzip) | 🥇 0.6kb | ➖ 11.1kb | ➖ 4.7kb | 🥈 2.7kb | 🥉 4.6kb |
This project was inspired by jeffijoe/awilix and builds upon its core concepts.