codedge-llc/pigeon
72.1
Strong · 3 October 2026
3k
lines of production code
Elixir
primary language
2
measurements over time
What this system is
Pigeon is an Elixir library that provides a unified interface for sending push notifications to iOS (APNS), Android (FCM), and Amazon (ADM) devices. It manages connection pooling and HTTP/2 multiplexing through a pluggable adapter architecture, allowing developers to configure credentials and dispatch messages synchronously or asynchronously. The system handles provider-specific details such as token management, error parsing, and payload formatting while supporting sandbox environments for testing.
Features
APNS configuration and connection handling restructured
The APNS module now uses dedicated \Config\ and \JWTConfig\ structs to manage certificate-based and JWT-based connections respectively, replacing the previous flat configuration approach. A new \ConfigParser\ automatically selects the correct configuration type based on the presence of certificate or JWT credentials, and validates that required fields (such as \team\_id\ and \key\_identifier\ for JWT, or valid certificates for PEM) are present before connecting. The underlying HTTP/2 client has been switched from Kadabra to Mint, and JWT token generation is now handled by a dedicated \Token\ module that caches tokens in an Agent, using a unique storage key derived from the key identifier, team ID, and URI to prevent collisions across different configurations.
lib/pigeon/apns · high confidence
Initial project scaffolding and v2.1.0 release notes
This change establishes the foundational structure for the Pigeon Elixir library, introducing configuration files for code formatting (.formatter.exs), environment exclusions (.gitignore, .prettierignore), and tool versioning (.tool-versions). It also adds the initial CHANGELOG.md documenting the v2.1.0 release, which highlights a switch to the Mint HTTP client, automatic dispatcher reconnection, and support for Firebase Installation IDs, while removing the legacy Pigeon module and updating the license copyright year.
(repo-wide) · high confidence
Introduction of Pigeon module for push notification dispatching
The library now exposes a central \Pigeon\ module that serves as the primary entry point for sending push notifications to iOS (APNS), Android (FCM), and Amazon (ADM). This module provides a unified \push/3\ API that supports both synchronous and asynchronous delivery modes, configurable via options such as \:on\_response\ callbacks and \:timeout\. It also exposes configuration accessors for the default dispatcher pool size and the JSON encoding library (defaulting to Jason), allowing users to customize connection pooling and serialization behavior directly from the main interface.
lib · high confidence
Behavioural changes
Add environment-specific configuration files for Pigeon
The application now includes explicit configuration files for development (dev.exs) and test (test.exs) environments, replacing or supplementing the previous setup. These files define settings for ADM, APNS (both certificate and JWT modes), FCM, and a new Sandbox adapter, allowing users to configure credentials via environment variables and select specific adapters for testing and development workflows.
config · high confidence
Introduce structured ADM configuration, notification, and result parsing
Amazon ADM support is refactored to use dedicated structs and modules for better reliability and clarity. A new \Pigeon.ADM.Config\ module validates client credentials and raises \Pigeon.ConfigError\ on invalid boot configurations. \Pigeon.ADM.Notification\ defines the notification struct with automatic MD5 calculation and payload handling. \Pigeon.ADM.ResultParser\ explicitly maps ADM API error strings (e.g., \InvalidRegistrationId\) to specific atoms, and \Pigeon.ADM.Token\ handles access token expiration logic.
lib/pigeon/adm · high confidence
Introduces a new adapter architecture for push notification workers
The library has been restructured to use a pluggable \Pigeon.Adapter\ behaviour, replacing the previous monolithic implementation. This change introduces a \Pigeon.Dispatcher\ supervisor that manages pools of \DispatcherWorker\ processes, each delegating push logic to a specific adapter module. New adapter implementations are provided for Firebase Cloud Messaging (\Pigeon.FCM\), Apple Push Notification Service (\Pigeon.APNS\), and Amazon Device Messaging (\Pigeon.ADM\), along with a \Pigeon.Sandbox\ adapter for testing. The HTTP connection layer is now abstracted into \Pigeon.HTTP.Connection\, which handles HTTP/2 multiplexing, keepalive pings, and request queuing, allowing adapters to focus solely on notification formatting and provider-specific API calls.
lib/pigeon · high confidence
New FCM v1 implementation with structured config, notification, and error handling
The library now supports the FCM v1 API, introducing dedicated modules for configuration (\Pigeon.FCM.Config\), notifications (\Pigeon.FCM.Notification\), and error parsing (\Pigeon.FCM.Error\). Users can now configure connections using a \Pigeon.FCM.Config\ struct that validates required fields like \:auth\ and \:project\_id\ at startup, raising \Pigeon.ConfigError\ if invalid. Notifications are built via \Pigeon.FCM.Notification.new/3\ and support targets including tokens, Firebase Installation IDs (FIDs), topics, and conditions. Error responses from the FCM server are now parsed into specific atoms (e.g., \:permission\_denied\, \:unauthenticated\) by inspecting both the \errorCode\ in details and the \status\ field, providing more precise feedback on push failures.
lib/pigeon/fcm · high confidence
Test coverage
Added comprehensive test coverage for ADM, APNS, FCM, and HTTP infrastructure; Added initial test suite for Pigeon core and sandbox adapter; Added test support infrastructure for APNS and ADM dispatchers.
Dependencies
Pigeon 2.1.0 release with updated Elixir and dependency requirements
This entry covers the new \mix.exs\ and \mix.lock\ files for Pigeon version 2.1.0. The project now requires Elixir \~\> 1.16 and updates its core dependencies to \goth \~\> 1.4.3\, \jason \~\> 1.0\, \joken \~\> 2.1\, and \mint \~\> 1.0\. Development dependencies are also updated, including \credo \~\> 1.0\, \dialyxir \~\> 1.0\, and \excoveralls \~\> 0.5\. The lockfile reflects specific resolved versions such as \goth 1.4.5\, \jason 1.4.5\, \joken 2.7.0\, and \mint 1.10.0\.
(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 71 → 72 (+1.1)
- Rubric changed (rubric-2026.09.15 → rubric-2026.10.1) — scores are not directly comparable.
Lenses
- Code Health 100 → 100 (-0.1)
- Architecture 84 → 88 (+4.0)
- Maturity 58 → 58 (+0.0)
- Readiness 75 → 77 (+1.7)
- Security 94 → 94 (+0.9)
Resolved (2)
- Documentation: no licence statement (README.md)
- Off-boarding risk: anonymized user #1
New (5)
- Documentation: no installation or build instructions (README.md)
- Duplicated block (11 lines × 2) (lib/pigeon/apns/config.ex)
- Medium CVE: EEF-[CVE redacted] (mix.lock)
- Off-boarding risk: anonymized user #1
- Outdated: mint
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
codedge-llc/pigeon 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 3 October 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit e22aae74ff97060284884baedc94b69b54d69dcd — the exact code this score is about.
- Scored under rubric-2026.10.1 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-8fe32cd45d00.