Skip to content
CAI
Software that uses CAICheck a score

raystack/raccoon

62.7

Adequate · 21 September 2026

5.1k

lines of production code

Go

with JavaScript, Java

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

Raccoon is an event ingestion service that collects, serializes, and routes events to various backend sinks such as Kafka, Kinesis, and Pub/Sub. It provides a structured Go-based architecture with a command-line interface and supports multiple transport protocols including gRPC, REST, and WebSocket. The system is designed for reliable, graceful lifecycle management and offers client libraries in Go, Java, Python, and JavaScript for sending events.

How it got here

2020 — Release tooling and lifecycle management

5 changes.

This period focused on establishing robust release tooling and modernizing the application's lifecycle management. The project introduced structured configuration, automated cross-platform builds, and replaced manual shutdown logic with Go's context-based patterns. Additionally, legacy HTTP endpoints and outdated dependencies were removed or updated across all client libraries.

2022–2023 — multi-language client libraries

4 changes.

This period focused on expanding the Raccoon ecosystem by releasing official client libraries for Go, Java, and JavaScript. Each release provided robust, configurable interfaces for sending events via REST, gRPC, and WebSocket transports, significantly broadening the service's accessibility across different programming environments.

2024 — core infrastructure and client SDKs

5 changes.

This period focused on establishing the core event processing pipeline, introducing a CLI interface, and releasing Python client libraries. It also expanded the system's capabilities by adding new event publishers for various backends and implementing integration tests to validate error handling across multiple protocols.

Features

Add JavaScript client for Raccoon

Introduced a new JavaScript client library for Raccoon, enabling users to send JSON and Protobuf encoded events to the Raccoon server. The client supports configurable serialization types (JSON or Protobuf) and wire types (JSON or Protobuf), with built-in retry mechanisms and configurable timeouts. The package includes a README with usage examples, ESLint and Prettier configurations, and comprehensive test coverage for the client's core functionality.

clients/js · high confidence

Add Python client for Raccoon

A new Python client library for Raccoon is now available, enabling users to send events via REST. The client supports both JSON and Protobuf serialization and wire formats, with configurable retry, timeout, and header settings. Example usage is provided in the \examples\ directory, and the package can be installed from PyPI or directly from the repository.

clients/python · high confidence

Add new event publishers for Kafka, Kinesis, Pub/Sub, and logging

The publisher module now includes implementations for four distinct event sinks: a Kafka publisher that handles message production and stats reporting, a Kinesis publisher supporting stream autocreation and mode configuration, a Google Cloud Pub/Sub publisher with topic caching and retention settings, and a Log publisher that writes events to the standard logger. Each publisher implements the standard interface with a Name() method, ProduceBulk() for sending events, and Close() for cleanup, enabling users to route events to these specific backends.

publisher · high confidence

Added Go client library for Raccoon with REST, gRPC, and WebSocket transports

Users can now interact with the Raccoon service using a new Go client library. The library provides three transport implementations—REST, gRPC, and WebSocket—each supporting configurable headers, serializers (JSON or Protocol Buffers), and retry policies. The client also includes a configurable logging interface and a shared \Client\ interface for sending events.

clients/go · high confidence

Generated Go code for Raccoon gRPC service

Added generated Go code for the Raccoon gRPC service, including the \EventService\ client and server interfaces, along with the \SendEvent\ RPC method and associated request/response types (\SendEventRequest\, \SendEventResponse\) and status enums (\Status\, \Code\).

proto · high confidence

Initial release of the Raccoon Java client

The Java client for Raccoon is now available, providing generated Protobuf and gRPC stubs for the \odpf.raccoon.v1beta1\ service. This release includes the \SendEvent\ RPC implementation, allowing Java applications to send events to Raccoon using the \io.odpf.proton.raccoon\ package. The client is built with Gradle and includes configuration for code style checking and proto generation via Buf.

clients/java · high confidence

Introduce Raccoon CLI and server command

Users can now interact with the Raccoon application via a new command-line interface. The \cmd/root.go\ file establishes the root 'raccoon' command, while \cmd/server.go\ introduces a 'server' subcommand that starts the Raccoon service, loading configuration and initializing logging and metrics.

cmd · high confidence

Introduce core event collection, serialization, and worker pool infrastructure

Added new packages and files to support event ingestion and processing: a \core/collector\ package defining the \Collector\ interface and a \ChannelCollector\ implementation that pushes \CollectRequest\s to a channel; a \core/worker\ package implementing a \Pool\ of goroutines that consume from that channel and dispatch events to a \Producer\; and \core/serde\ utilities for JSON and Protocol Buffers serialization/deserialization. Additionally, a \pkg/clock\ abstraction for time sources and a \pkg/metrics\ module with Prometheus and StatsD backends were introduced to support instrumentation of the new pipeline.

core, pkg, server · high confidence

Introduce structured configuration system with validation and defaults

The application now uses a structured configuration system that loads settings from environment variables and YAML files. This includes default values for server, publisher, worker, event, metric, and log components. The system validates required fields such as WebSocket connection headers, publisher credentials for PubSub and Kinesis, and Kafka bootstrap servers. It also supports dynamic parsing of Kafka client configurations and allows for flexible publisher types including Kafka, PubSub, Kinesis, and Log. Additionally, the configuration supports CORS headers, Prometheus metrics, and worker buffer settings.

config · high confidence

Release tooling and linting infrastructure for Raccoon

The Raccoon project now includes comprehensive tooling for building, releasing, and maintaining the codebase. A .golangci.yml file configures Go linting and static analysis, while a .goreleaser.yaml file automates the creation of cross-platform binaries, Docker images, and Linux/macOS packages. Additionally, the Makefile has been reorganized to support these new workflows, and the main entry point has been refactored to use a command-line interface structure.

(repo-wide) · high confidence

Behavioural changes

Refactor app startup and shutdown to use context-based lifecycle management

The app entry point (app/proc.go) and server initialization (app/server.go) were refactored to use Go's context-based lifecycle management. The previous manual signal handling and blocking shutdown logic were replaced with a structured StartServer function that initializes the HTTP services, publisher, and worker pool, while a dedicated shutdown handler ensures graceful termination by flushing the worker pool with a configurable timeout and closing the publisher. This change improves reliability by preventing data loss during shutdown and aligning the application's lifecycle with standard Go concurrency patterns.

app · medium confidence

Removed legacy HTTP ping endpoint and environment utilities

The legacy HTTP /ping endpoint and its associated test have been removed from the codebase. This change also eliminates the shared environment variable parsing utilities (AppPort, stringValOrDefault, etc.) that were previously used by the router and handler, as these components are no longer required for the new WebSocket-based communication.

env, handler, router · high confidence

Test coverage

Added integration tests for event processing endpoints

Added a new integration test suite in test/integration/integration\_test.go that validates error handling for invalid requests across WebSocket, gRPC, and HTTP/1.1 REST JSON endpoints, ensuring the system returns appropriate Bad Request responses for malformed or empty payloads.

test · high confidence

Dependencies

Updated client dependencies and build configurations across Go, Java, Python, and JavaScript clients

The project has updated dependency manifests and build configurations for its client libraries. The Go client (clients/go) now uses Go 1.21/1.22.4 with updated gRPC, protobuf, and linting dependencies. The Java client (clients/java) is configured with Gradle 5.0.0, Lombok, and updated gRPC/Protobuf dependencies. The Python client (clients/python) specifies Python 3.9+ with updated requests, protobuf, and google packages. The JavaScript client (clients/js) and its examples have been updated with axios, protobufjs, and uuid dependencies. The main Go module (go.mod) has been renamed to github.com/raystack/raccoon and upgraded to Go 1.22.4, adding numerous dependencies including AWS SDK, Kafka, Prometheus, Cobra, and gRPC.

(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 60 → 63 (+3.0)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 67 → 68 (+1.4)
  • Architecture 99 → 77 (-21.3)
  • Maturity 69 → 69 (+0.0)
  • Readiness 59 → 63 (+3.3)
  • Security 53 → 59 (+6.0)

Resolved (62)

  • Boundary-crossing change coupling: publisher.go ↔ client.go (config/publisher.go)
  • Change coupling: worker.go ↔ pinger.go (core/worker/worker.go)
  • Coverage not included — suite not readable by the collector
  • Critical CVE: [GHSA redacted] (go.mod)
  • Critical CVE: [GHSA redacted] (clients/js/package-lock.json)
  • Critical CVE: [GHSA redacted] (clients/js/package-lock.json)
  • Critical CVE: [GHSA redacted] (clients/js/package-lock.json)
  • Critical CVE: [GHSA redacted] (clients/go/go.mod)
  • Critical CVE: [GHSA redacted] (go.mod)
  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • Duplicated block (12 lines × 2) (clients/go/rest/rest.go)
  • Duplicated block (15 lines × 2) (clients/go/examples/grpc/main.go)
  • Duplicated block (19 lines × 2) (publisher/kinesis/kinesis.go)
  • Duplicated block (8 lines × 2) (clients/go/rest/rest.go)
  • High CVE: [GHSA redacted] (clients/js/package-lock.json)
  • High CVE: [GHSA redacted] (clients/js/package-lock.json)
  • High CVE: [GHSA redacted] (clients/js/package-lock.json)
  • High CVE: [GHSA redacted] (clients/js/package-lock.json)
  • High CVE: [GHSA redacted] (clients/js/package-lock.json)
  • High CVE: [GHSA redacted] (clients/js/package-lock.json)
  • …and 42 more

New (168)

  • Coverage not measured — JavaScript/TypeScript suite
  • Critical CVE: [GHSA redacted] (go.mod)
  • Critical CVE: [GHSA redacted] (clients/js/package-lock.json)
  • Critical CVE: [GHSA redacted] (clients/js/package-lock.json)
  • Critical CVE: [GHSA redacted] (clients/js/package-lock.json)
  • Critical CVE: [GHSA redacted] (clients/go/go.mod)
  • Critical CVE: [GHSA redacted] (go.mod)
  • Dependency pinned to a stale untagged commit: github.com/alecthomas/assert
  • Dependency pinned to a stale untagged commit: golang.org/x/lint
  • Deprecated module: cloud.google.com/go/pubsub
  • Documentation: no installation or build instructions (README.md)
  • Duplicated block (10 lines × 2) (clients/go/rest/rest.go)
  • Duplicated block (12 lines × 2) (clients/go/rest/rest.go)
  • Duplicated block (14–16 lines × 3) (clients/go/examples/grpc/main.go)
  • Duplicated block (18 lines × 2) (publisher/kinesis/kinesis.go)
  • Duplicated block (24 lines × 2) (clients/go/examples/grpc/main.go)
  • Duplicated block (5 lines × 2) (server/rest/handler.go)
  • Duplicated block (5 lines × 2) (server/rest/handler.go)
  • Duplicated block (7 lines × 2) (clients/go/serializer/serializer.go)
  • High CVE: [GHSA redacted] (clients/js/package-lock.json)
  • …and 148 more

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

Survey your own repository

raystack/raccoon 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 d6bf56fd21b82f545cbe25fae13c1d432247ecaa — 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-fa71c66cabd8.