Skip to content

DiblobDependency Injection Framework

A modern DI framework where the proxy (blob) is the key

Quick Start ​

Installation ​

bash
npm install @speajus/diblob

Basic Usage ​

typescript
import { createBlob, createContainer } from '@speajus/diblob';

// Define your service interface
interface Logger {
  log(message: string): void;
}

// Create a blob (proxy) for the service
const logger = createBlob<Logger>('logger', {
  name: 'Console Logger',
  description: 'Logs messages to the console'
});

// Create a container
const container = createContainer();

// Register the implementation
class ConsoleLogger implements Logger {
  log(message: string) {
    console.log(message);
  }
}

container.register(logger, ConsoleLogger);

// Use the service
logger.log('Hello, Diblob!');

Packages ​

@speajus/diblob ​

The core dependency injection framework.

@speajus/diblob-mcp ​

Model Context Protocol server for diblob containers.

@speajus/diblob-connect ​

Connect-based gRPC server implementation for diblob containers.

@speajus/diblob-visualizer ​

Interactive visualization tool for your dependency graphs.

@speajus/diblob-telemetry ​

OpenTelemetry instrumentation for diblob containers.

Features ​

Proxy-Based Keys ​

Unlike traditional DI frameworks that use strings or symbols, Diblob uses JavaScript Proxies as keys. This provides type safety and eliminates naming conflicts.

Reactive Dependencies ​

When you re-register a service, all dependent services are automatically invalidated and re-resolved on next access.

Async Support ​

Full support for async factories and dependencies:

typescript
container.register(database, async () => {
  await connectToDatabase();
  return new DatabaseService();
});

Constructor Injection ​

Automatically inject dependencies via constructor default parameters:

typescript
class UserService {
  constructor(
    private logger = logger,
    private database = database
  ) {}
}

Metadata ​

Attach rich metadata to blobs and containers:

typescript
const userService = createBlob<UserService>('userService', {
  name: 'User Service',
  description: 'Manages user data',
  version: '1.0.0',
  tags: ['business', 'core']
});

License ​

MIT

Released under the MIT License.