Skip to content
CAI
Software that uses CAICheck a score

guoming/Hummingbird

40.4

Weak · 21 September 2026

14.5k

lines of production code

C#

primary language

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

Hummingbird is a .NET development framework that provides a comprehensive set of extensions for building distributed, cloud-native applications. It offers standardized abstractions and implementations for critical infrastructure concerns, including service discovery, event-driven messaging, and distributed coordination. The framework simplifies integration with popular technologies such as Redis, Kafka, RabbitMQ, Consul, and Nacos, while also providing utilities for caching, background job scheduling, and observability.

How it got here

2018–2020 — Initial framework and infrastructure expansion

21 changes.

This period marks the initial release and rapid expansion of the Hummingbird framework, establishing a comprehensive suite of distributed infrastructure components. The work focused on implementing core capabilities such as service discovery, distributed locking, event bus integration with Kafka and RabbitMQ, and observability tools like OpenTracing and metrics collection. The codebase grew to include specialized extensions for caching, ID generation, and database logging, laying the foundation for a modular, microservices-ready architecture.

2021–2024 — Distributed infrastructure and configuration integrations

9 changes.

This period focused on expanding the framework's ecosystem by adding support for external distributed systems, including Nacos, Apollo, and Jaeger for configuration and tracing. It also introduced providers for background job scheduling, file storage, and caching, while adding comprehensive unit tests to verify the new components.

Features

Add Consul dynamic route integration via dependency injection

Users can now register Consul-based service discovery and dynamic routing in their applications by calling the new \AddConsulDynamicRoute\ extension methods. This adds the necessary services to the DI container, including a configured \IConsulClient\ and a \ConsulServiceLocator\, enabling automatic service registration and discovery for both ASP.NET Core and ASP.NET Framework environments.

src/Hummingbird.Extensions.DynamicRoute.Consul/Extersions · high confidence

Add Consul-based distributed work ID generation strategy

A new implementation for generating distributed work IDs using Consul as the coordination backend. This includes a configuration class (ConsulConfig) for registry address, port, token, and region settings, along with a ConsulWorkIdCreateStrategy that uses Consul sessions and key-value locks to allocate unique worker IDs across instances. A dependency injection extension is also provided to register the Consul client and strategy in the service container.

src/Hummingbird.Extensions.UidGenerator.ConsulWorkIdStrategy · medium confidence

Add Consul-based service discovery and multi-datacenter support

The Hummingbird DynamicRoute module now includes a Consul implementation for service discovery. This adds the ability to register services with Consul, including support for multiple ports and health checks. The service locator can now query services across multiple datacenters, aggregating results from all available Consul clusters. Configuration for the Consul registry (address, port, token, region, and health check settings) is handled via the new ConsulConfig class.

src/Hummingbird.Extensions.DynamicRoute.Consul · high confidence

Add Jaeger tracing integration to Hummingbird

Added new files to integrate Jaeger distributed tracing into the Hummingbird framework. The \TracingConfiguration\ class defines settings for the tracer, including service name, endpoint, sampler type, and flush interval. The \DependencyInjectionExtersion\ class registers the Jaeger tracer with the service collection, configuring the sender, sampler, and reporter based on the provided configuration. This allows users to easily enable OpenTracing support with Jaeger in their applications.

src/Hummingbird.Extensions.OpenTracing.Jaeger · high confidence

Add Kafka health check support

Users can now verify the health of a Kafka broker by adding a dedicated health check. The new \AddKafkaCheck\ extension methods on \HealthCheckBuilder\ allow you to configure a check that produces a test message to a specified Kafka topic and confirms persistence, returning a healthy or unhealthy status based on the result.

src/Hummingbird.Extensions.HealthChecks.Kafka · high confidence

Add MySQL and SQL Server logging providers for the event bus

Users can now persist event bus logs to MySQL or SQL Server databases. This change introduces new \MySqlLogging\ and \SqlServerLogging\ extensions that register database connection factories, configuration options (connection string, timeout, table prefix), and \IEventLogger\ implementations. The providers support saving event logs, marking events as published or failed, and querying for un-published messages, with database schemas and SQL scripts included for both backends.

src/Hummingbird.Extensions.EventBus.MySqlLogging, src/Hummingbird.Extensions.EventBus.SqlServerLogging · high confidence

Add Nacos configuration support

The Hummingbird.Extensions.Configuration.Nacos package now provides extension methods to integrate Nacos as a configuration source. Developers can register Nacos configuration providers via the standard IConfigurationBuilder.AddNacosConfiguration() overloads, which map local configuration options to the underlying Nacos V2 SDK settings.

src/Hummingbird.Extensions.Configuration.Nacos · high confidence

Add Nacos service registration and discovery support

The Hummingbird framework now supports dynamic routing via Nacos. This change introduces a new Nacos extension that registers a service locator to discover and filter healthy service instances from Nacos, with optional in-memory caching of service endpoints.

src/Hummingbird.Extensions.DynamicRoute.Nacos · medium confidence

Add OSS and Physical file system providers

Users can now store and serve files using Alibaba Cloud OSS or local physical storage. The change introduces configuration classes and dependency injection extensions for both providers, including an \OssFileProvider\ with local caching and metadata caching, and a \PhysicalFileSystemBucket\ for local disk operations.

src/Hummingbird.Extensions.FileSystem, src/Hummingbird.Extensions.FileSystem.Oss, src/Hummingbird.Extensions.FileSystem.Physical · high confidence

Add OpenTracing integration for Hummingbird

The Hummingbird.Extensions.OpenTracing package now provides OpenTracing support. This includes a new Tracer class that wraps the OpenTracing API to manage spans, log requests and responses, and handle exceptions. A builder interface (IHummingbirdOpenTracingBuilder) and its implementation (HummingbirdOpenTracingBuilder) are added to configure tracing options. An extension method (AddOpenTracing) is provided on IHummingbirdHostBuilder to register the tracing services with the dependency injection container.

src/Hummingbird.Extensions.OpenTracing · high confidence

Add Quartz-based background job scheduling

The Hummingbird framework now supports scheduling background jobs using the Quartz library. Users can configure cron-based triggers via the new \CornJobConfiguration\ settings, which are wired into the dependency injection container and registered as a hosted service (\CornJobSchedulerHostedService\) that initializes the Quartz scheduler at application startup.

src/Hummingbird.Extensions.Quartz · high confidence

Add RabbitMQ health check and Snowflake ID generator extensions

The Hummingbird framework now includes built-in support for monitoring RabbitMQ status and generating unique IDs. Developers can use the new \AddRabbitMQCheck\ extension to configure health checks for RabbitMQ connections, specifying endpoints, authentication, and virtual hosts. Additionally, the \Hummingbird.Extensions.UidGenerator\ module introduces a Snowflake-based ID generator, allowing services to register and resolve unique ID generators via dependency injection, with configurable work ID creation strategies (static or hostname-based).

src/Hummingbird.Extensions.UidGenerator · high confidence

Add Redis caching and request limiting middleware

Introduces a new caching extension (\Hummingbird.Extensions.Cache\) that provides a generic \IHummingbirdCache\<T\>\ interface and dependency injection registration for both in-memory and Redis-backed caches. Additionally, a new request limiting extension (\Hummingbird.Extensions.RequestLimit\) is added, providing middleware for configuring request rate limits and timeouts via \RequestRateLimitConfiguration\ and \RequestTimeoutConfiguration\.

src/Hummingbird.Extensions.Cacheing · high confidence

Add Redis-based distributed lock implementation

The Hummingbird framework now supports distributed locking via Redis. This change introduces a new \IDistributedLock\ interface and a \RedisDistributedLock\ implementation that manages lock acquisition, renewal, and release using a Redis cache manager. Users can configure the Redis connection (servers, password, SSL, database number, key prefix) and register the lock service via \AddRedisDistributedLock\ in the dependency injection container.

src/Hummingbird.Extensions.DistributedLock.Consul, src/Hummingbird.Extensions.DistributedLock.Redis · high confidence

Add health check capabilities for ASP.NET, ASP.NET Core, and various data stores

This change introduces a new health check subsystem across the codebase. For ASP.NET Core, it adds a \HealthCheckMiddleware\ and \HealthCheckStartupFilter\ to expose health status via HTTP, along with \IWebHostBuilder\ extension methods (\UseHealthChecks\) to configure the check via URL path or port. For ASP.NET (classic), it provides a \HealthCheckHandler\ for similar HTTP exposure. The core \CachedHealthCheck\ implementation adds caching to health checks to avoid repeated calls. Additionally, it adds specific health check implementations for MongoDB, MySQL, Redis, and SQL Server, each providing an \AddCheck\ extension to register a corresponding health probe.

(repo-wide) · high confidence

Add resilient HTTP client with retry, circuit-breaker, and file upload support

The Hummingbird framework now provides a configurable, resilient HTTP client that automatically applies retry and circuit-breaker policies (via Polly) to HTTP requests. This new feature allows developers to register a resilient client through the DI container, which supports GET, POST, PUT, and DELETE operations, as well as file uploads. The client includes URL resolution for service discovery, automatic header propagation, and logging. A standard, non-resilient client is also provided for simpler use cases.

src/Hummingbird.Extensions.Resilience.Http · high confidence

Added Apollo configuration support via DI extension

Users can now integrate the Apollo configuration center into their applications by using the new AddApolloConfiguration extension method. This method allows for the registration of multiple configuration namespaces with their respective file formats, enabling centralized configuration management through the Humingbird.Extensions.Configuration.Apollo library.

src/Hummingbird.Extensions.Configuration.Apollo · high confidence

Added Canal integration to support real-time data change capture

Introduced a new \Hummingbird.Extensions.Canal\ module that enables the application to subscribe to and process data change events from a Canal server. The update adds configuration models (\CanalConfig\), a background hosted service (\CanalClientHostedService\) to manage the connection lifecycle, and interfaces for connectors and formatters. It includes a default \ConsoleConnector\ for debugging and formatters for \CanalJson\ and \MaxwellJson\ output formats, allowing users to easily integrate Canal-based CDC (Change Data Capture) into their Hummingbird applications.

src/Hummingbird.Extensions.Canal · high confidence

Added Consul service registration and heartbeat background service

A new hosted service, ConsulServiceRegisterHostedService, has been introduced to manage the lifecycle of a Consul service registration. The service registers the instance upon application start, performs periodic heartbeats using a timer, and handles deregistration when the application stops.

src/Hummingbird.Extensions.DynamicRoute.Consul/HostedService · high confidence

Added metrics collection and reporting for InfluxDB and Prometheus

A new extension class was added to the AspNetCore.Metrics module, providing dependency injection setup and web host builder extensions. This enables the application to collect metrics and report them to InfluxDB (with configurable address, database, credentials, and retry policies) as well as expose Prometheus-compatible endpoints.

src/Hummingbird.AspNetCore.Metrics · high confidence

Adds timestamp, retry, and delay helpers for RabbitMQ event bus

New extension methods are added to the Hummingbird RabbitMQ event bus to support distributed tracing and message reliability. A new DateTimeExtersions class provides timestamp conversion utilities. The EventExtersions class introduces methods to attach trace IDs, configure retry strategies with configurable delays, and handle dead-letter queues for failed or timed-out messages. Additionally, the DependencyInjectionExtersion class provides a fluent API for configuring RabbitMQ connection pools, authentication, and exchange settings.

src/Hummingbird.Extensions.EventBus.RabbitMQ/Extersions · medium confidence

Example app adds distributed locking, caching, and event bus integration

The Hummingbird.Example application now includes controllers and configuration for distributed locks (Redis), caching (Redis), and event bus (Kafka/RabbitMQ). It also supports configuration via Apollo and Nacos, and integrates with OSS for file storage. The example app demonstrates usage of these features through new controllers (DistributedLockController, CacheingController, MQController, etc.) and corresponding configuration files (appsettings-local.json, bootstrap.json).

example · high confidence

Initial release of Hummingbird framework

The Hummingbird framework is introduced as a development scaffold providing distributed locks (Redis, Consul), caching, ID generation, health checks, message buses (RabbitMQ, Kafka), and more. This initial commit establishes the project structure, solution file, and documentation.

(repo-wide) · high confidence

Introduce Hummingbird EventBus abstraction and DI integration

The Hummingbird.Extensions.EventBus package now provides a foundational event bus architecture, including the IEventBus, IEventHandler, IEventBatchHandler, and IEventLogger interfaces, alongside the EventLogEntry and EventResponse models. This adds support for publishing and subscribing to events, with dependency injection extensions to automatically register all IEventHandler and IEventBatchHandler implementations and wire up subscriber handlers during application startup.

src/Hummingbird.Extensions.EventBus · high confidence

Introduce Kafka-based event bus implementation

Added new \DefaultKafkaPersisterConnection\ and \EventBusKafka\ classes to provide a Kafka-backed implementation of the event bus. The \EventBusKafka\ class manages producer and consumer connections with configurable retry and timeout policies, while \DefaultKafkaPersisterConnection\ handles the underlying Kafka client lifecycle and resource disposal.

src/Hummingbird.Extensions.EventBus.Kafka/Implements · high confidence

Kafka integration: new extension methods for batching, DI, and event handling

The Kafka event bus extension now provides a complete integration layer. Dependency injection is configured via \AddKafka\, allowing users to set up producer and consumer configurations with options for retry attempts, timeouts, and load balancing. New extension methods enable batch consumption (\ConsumeBatch\) and batch production (\ProduceBatch\) for improved throughput, while \EventLogEntry\ extensions add support for timestamps, trace IDs, retry strategies, and delayed/dedicated dead-letter queue routing.

src/Hummingbird.Extensions.EventBus.Kafka/Extersions · high confidence

New Kafka persistence connection abstractions

Added new interface definitions for Kafka event bus infrastructure: IKafkaPersistentConnection (providing GetProducer and GetConsumer methods), IKafkaPersisterConnectionLoadBalancer (leasing connections), and IKafkaPersisterConnectionLoadBalancerFactory (creating load balancers). These abstractions support the Kafka extension's connection management and load balancing capabilities.

src/Hummingbird.Extensions.EventBus.Kafka/Abstractions · high confidence

RabbitMQ event bus implementation added

The RabbitMQ-based implementation of the event bus has been added, introducing the \EventBusRabbitMQ\ class and its supporting \DefaultRabbitMQPersistentConnection\ class. This change enables the application to publish and subscribe to events via RabbitMQ, featuring connection pooling, automatic retry policies for network failures, and configurable timeout and parallelism settings for both producers and consumers.

src/Hummingbird.Extensions.EventBus.RabbitMQ/Implements · medium confidence

Test coverage

Added unit tests for caching, distributed locks, and UID generation

Added new unit tests for the caching module (CacheManager), distributed lock implementations for Consul and Redis, the Consul service locator, and the MacAddressProcessIdWorkId UID generation strategy. These tests verify core functionality such as concurrent cache operations, lock acquisition and release, service discovery lookups, and unique ID generation logic.

test · high confidence

Dependencies

Update .NET project files with new dependencies and framework targets

The Hummingbird library's .csproj files have been updated to include new dependencies and target frameworks. Key additions include Quartz for job scheduling, App.Metrics for metrics collection, and various client libraries for Kafka, Redis, Consul, Nacos, Apollo, and OSS. The project files also specify target frameworks such as netstandard2.0, netcoreapp3.1, and net5.0, ensuring compatibility across different .NET versions.

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Score

  • CAI 41 → 40 (-0.3)
  • Rubric changed (rubric-2026.08.18 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 50 → 49 (-0.7)
  • Architecture 85 → 85 (-0.0)
  • Maturity 55 → 51 (-3.4)
  • Readiness 23 → 24 (+0.8)
  • Security 71 → 70 (-0.3)
  • Performance 63 → 63 (+0.0)

Resolved (50)

  • Bounded contexts not declared
  • Duplicated block (11 lines × 2) (src/Hummingbird.Extensions.DynamicRoute.Consul/ConsulServiceLocator.cs)
  • Duplicated block (6 lines × 2) (src/Hummingbird.Extensions.EventBus.RabbitMQ/Implements/EventBusRabbitMQ.cs)
  • Duplicated block (6 lines × 2) (src/Hummingbird.Extensions.EventBus.RabbitMQ/Implements/EventBusRabbitMQ.cs)
  • Duplicated block (8 lines × 2) (src/Hummingbird.Extensions.DynamicRoute.Consul/ConsulServiceDiscoveryProvider.cs)
  • Duplicated block (9 lines × 2) (src/Hummingbird.Extensions.HealthChecks/Checks/NumericChecks.cs)
  • Further orphaned files (smaller)
  • High CVE: Microsoft.NETCore.App 2.1.0
  • High CVE: Microsoft.NETCore.App 2.1.0
  • High CVE: Microsoft.NETCore.App 2.1.0
  • High CVE: Microsoft.NETCore.App 2.1.0
  • High CVE: Microsoft.NETCore.App 2.2.0
  • High CVE: Microsoft.NETCore.App 2.2.0
  • High CVE: System.Net.Http.WinHttpHandler 4.0.0
  • High CVE: System.Net.Http.WinHttpHandler 4.0.0
  • High CVE: System.Net.Security 4.0.0
  • High CVE: System.Net.Security 4.0.0
  • High CVE: System.Net.Security 4.3.0
  • High CVE: System.Net.Security 4.3.0
  • High CVE: System.Text.Encodings.Web 4.0.0
  • …and 30 more

New (105)

  • Documentation: no architecture or design documentation (README.md)
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)
  • Dormant codebase
  • Duplicated block (10 lines × 2) (src/Hummingbird.Extensions.Resilience.Http/Extersions/DependencyInjectionExtersion.cs)
  • Duplicated block (10 lines × 2) (src/Hummingbird.Extensions.Resilience.Http/Implements/ResilientHttpClient.cs)
  • Duplicated block (10 lines × 2) (src/Hummingbird.Extensions.UidGenerator.ConsulWorkIdStrategy/DependencyInjectionExtersion.cs)
  • Duplicated block (11–13 lines × 2) (src/Hummingbird.Extensions.DynamicRoute.Consul/ConsulServiceLocator.cs)
  • Duplicated block (12 lines × 2) (src/Hummingbird.Extensions.EventBus/Extersions/DependencyInjectionExtersion.cs)
  • Duplicated block (14 lines × 2) (src/Hummingbird.Extensions.Cacheing/StackExchange/RedisCacheManage.cs)
  • Duplicated block (14 lines × 2) (src/Hummingbird.Extensions.DistributedLock.Consul/Extersions/DependencyInjectionExtersion.cs)
  • Duplicated block (14 lines × 2) (src/Hummingbird.Extensions.Resilience.Http/Extersions/DependencyInjectionExtersion.cs)
  • Duplicated block (17 lines × 2) (src/Hummingbird.Extensions.HealthChecks.MySql/HealthCheckBuilderMySqExtensions.cs)
  • Duplicated block (17–18 lines × 2) (src/Hummingbird.Extensions.EventBus.Kafka/Implements/EventBusKafka.cs)
  • Duplicated block (17–21 lines × 2) (src/Hummingbird.Extensions.EventBus.Kafka/Implements/EventBusKafka.cs)
  • Duplicated block (183 lines × 2) (src/Hummingbird.Extensions.EventBus.Kafka/Extersions/EventExtersions.cs)
  • Duplicated block (19–21 lines × 2) (src/Hummingbird.Extensions.EventBus.Kafka/Implements/EventBusKafka.cs)
  • Duplicated block (20–21 lines × 4) (src/Hummingbird.Extensions.EventBus.MySqlLogging/Implements/MySqlEventLogger.cs)
  • Duplicated block (21 lines × 2) (src/Hummingbird.Extensions.Configuration.Nacos/Extersions/DependencyInjectionExtersion.cs)
  • Duplicated block (21 lines × 2) (src/Hummingbird.Extensions.EventBus.Kafka/Extersions/DateTimeExtersions.cs)
  • …and 85 more

API surface

  • Unchanged — 7 HTTP endpoints

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

guoming/Hummingbird was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 21 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 9c52b270f9aee39294309685fa6a1fe695788bf4 — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-28e75b8e3254.