Mainframe-Archive/switchboard
53.2
Adequate · 23 September 2026
3.5k
lines of production code
Erlang
primary language
5
measurements over time
What this system is
Switchboard is an Erlang-based email management service that bridges IMAP and JMAP protocols to monitor mailboxes and process messages. It provides a WebSocket-based API for client interactions and includes a JavaScript client for browser-side communication. The system is designed for automated deployment via Ansible and features OAuth2 authentication for email providers like Google.
Features
Added Bootstrap v3.1.1 CSS framework
The site now includes the full Bootstrap v3.1.1 stylesheet, providing standard CSS classes for layout, typography, forms, and components. This introduces a new visual style and layout system to the site's appearance.
site/css · high confidence
Added Switchboard JavaScript client for WebSocket-based IMAP proxying
A new JavaScript client (switchboardclient.js) was added to the static assets, enabling browser-side communication with the Switchboard server via WebSockets. The client exposes methods to connect to the server, watch mailboxes, retrieve mailbox lists, and fetch message lists, effectively providing a client-side interface for the JMAP-to-IMAP proxy functionality.
priv/static · high confidence
Added Switchboard client example page
A new HTML page at priv/switchboardclient.html provides an interactive example for developers to test the Switchboard client and worker interfaces directly in the browser. The page demonstrates how to connect to the WebSocket endpoints for both workers and clients, including methods like watchMailboxes and getMailboxes, using a ConnSpec object for authentication.
priv · high confidence
Added Switchboard overview documentation
A new 'overview.edoc' file has been added to the 'doc' directory, providing a comprehensive guide to the Switchboard application. This documentation covers the high-level overview of the IMAP client management features, instructions for using the Erlang API (including subscribing to emails and managing accounts), steps for building the HTML documentation, connecting to the remote console, and running EUnit tests.
doc · high confidence
Added site template includes for header, footer, and navigation
The site now uses new Jekyll includes to render the page header, footer, and sidebar navigation. The footer displays the Spatch/ThusFresh Inc. copyright and BSD license info, while the header provides the main site navigation and links to GitHub. The sidebar includes a 'Join our community' link, and the head include integrates Google Analytics tracking.
_site/\includes · high confidence
Added switchboard header file with test configuration and BSD license
A new header file, include/switchboard.hrl, was added to the project. This file establishes the BSD license terms and defines several preprocessor macros for testing and debugging, including TEST, LIVE\_TEST, and DEBUG flags, as well as eunit library inclusion and specific dispatch configuration constants for Gmail.
include · high confidence
Initial documentation site generated via Jekyll
The site/doc directory now contains the complete set of EDoc-generated HTML documentation for the Switchboard application, including modules such as imap, reloader, rfc2822, switchboard, switchboard\_jmap, switchboard\_oauth, and switchboard\_workers, along with the necessary CSS and frame files to navigate the generated API reference.
site/doc · high confidence
Initial provisioning setup for Switchboard deployment
Added the core Ansible provisioning files to automate the deployment of the Switchboard application. This includes a hosts.example file defining the switchboard group with Git repository and OAuth client credentials, a playbook.yml to orchestrate the switchboard role, and supporting files such as .monitrc for process monitoring and known\_hosts for SSH verification.
provisioning · high confidence
Initial release of the Switchboard documentation site
The project now includes a dedicated site directory containing the full documentation, including installation guides, API interfaces, examples, and FAQ. The site is built using Jekyll and hosted on GitHub Pages, providing a structured way for users to learn about Switchboard's features, use cases, and setup.
site · high confidence
Introduce Switchboard email monitoring and JMAP/IMAP integration
The application has been restructured and rebranded as 'Switchboard' to manage email accounts via IMAP and JMAP protocols. This change introduces a new supervision tree for account management, including supervisors for active IMAP connections, mailbox idlers, and worker processes. The core logic now handles connecting to IMAP servers, monitoring mailboxes for new messages, and exposing functionality through a WebSocket-based JMAP interface. Additionally, OAuth2 support has been added to handle token refreshes for authentication, and the application now relies on external libraries like gproc, cowboy, and poolboy for process management and web handling.
src · high confidence
Switchboard application configuration and Erlang node settings
The Switchboard application is now configured via a new \app.config\ file, which defines the Cowboy HTTP port, IMAP pool sizing, and OAuth provider credentials (specifically Google). The configuration also includes logging setup using the Lager library. Additionally, \vm.args\ is introduced to define the Erlang node name and distributed node cookie.
files · high confidence
Behavioural changes
Added Erlang configuration file for standalone packaging
A new 'etc/sys.config' file has been added to the project. This file contains an Erlang-style configuration that includes 'etc/app.config', which is typically used by Erlang/OTP applications to load application-specific settings. This change supports the packaging of the switchboard as a standalone application, likely facilitating deployment or distribution.
etc · low confidence
Switchboard 0.4.1 release with improved build and configuration
The project has been renamed from 'imapswitchboard' to 'Switchboard' and updated to version 0.4.1. The build system has been upgraded to erlang.mk 1.2.0, and the release configuration now uses relx to generate a standalone release. A new switchboard.config.example file provides default configuration values for the application, including HTTP port, log directory, and IMAP pool settings.
(repo-wide) · high confidence
Switchboard service configuration and init script added
The provisioning templates for the Switchboard service have been updated to use a new configuration file named 'switchboard.config' instead of the previous 'vars.config'. The entry adds a new Jinja2 template for the Switchboard configuration, defining Erlang-style settings for the host, cookie, HTTP port, log directory, and Google OAuth credentials. Additionally, a new init script template is introduced to manage the Switchboard Erlang BEAM daemon, supporting start, stop, restart, reload, and status operations.
provisioning/roles/switchboard/templates · medium confidence
Test coverage
Added EUnit tests for IMAP parsing and Switchboard account/idler components
Added new EUnit test suites for the IMAP protocol handling and Switchboard account management. The \imap\_tests\ module covers IMAP message parsing, tokenization, and address cleaning. The \switchboard\_accounts\_tests\ and \switchboard\_idler\_tests\ modules verify the registration and behavior of the Switchboard account and idler processes.
src/test · high confidence
Dependencies
Add Elixir project configuration for Switchboard
Added a mix.exs file that defines the Switchboard Elixir project, specifying version 0.3.2 and declaring dependencies on libraries such as lager, poolboy, cowboy, gproc, jsx, and ranch.
(dependencies) · medium 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
This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.
Score
- CAI 47 → 53 (+6.1)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 86 → 93 (+6.8)
- Architecture 100 → 100 (+0.0)
- Maturity 24 → 43 (+18.5)
- Readiness 44 → 44 (+0.5)
- Security 97 → 69 (-28.0)
Resolved (13)
- Coverage not included — suite not readable by the collector
- Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
- Low: security finding (details withheld)
- Low: security finding (details withheld)
- Low: security finding (details withheld)
- Low: security finding (details withheld)
- Low: security finding (details withheld)
- No exposed public API
- Test reliability not included
- TooManyMethods: imap (src/imap.erl)
- TooManyMethods: switchboard_jmap (src/switchboard_jmap.erl)
- complexity unreadable for .erl, .exs, .hrl — churn × complexity hotspots could not be measured
- dormant codebase — no living knowledge left to concentrate
New (29)
- Coverage not measured — no coverage collector is wired up
- Dependency hygiene PARTLY measured — Mix pinning read, dependency currency not (Hex registry unreachable)
- Floating source dependency: gproc
- Floating source dependency: jsx
- Floating source dependency: lager
- Floating source dependency: poolboy
- High: security finding (details withheld)
- Low: security finding (details withheld)
- Low: security finding (details withheld)
- Low: security finding (details withheld)
- Low: security finding (details withheld)
- Low: security finding (details withheld)
- Medium: security finding (details withheld)
- No ADRs found
- No SBOM
- No artifact signing
- No build provenance
- No dependency advisory monitoring
- No dependency lockfile committed (mix.exs)
- TodoComment (src/switchboard_idler.erl)
- …and 9 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
Mainframe-Archive/switchboard 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 23 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 37b66a53265e1a51b10aa76fcc3e622b8c2c261c — 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-955b9cee9818.