RepoPilotOpen in app →

exelban/stats

macOS system monitor in your menu bar

WAIT

Single-maintainer risk — review before adopting

  • Last commit 1d ago
  • 5 active contributors
  • MIT licensed
  • CI configured
  • Tests present
  • Small team — 5 top contributors
  • Single-maintainer risk — top contributor 93% of commits

Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests

Embed this verdict

[![RepoPilot: WAIT](https://repopilot.app/api/badge/exelban/stats)](https://repopilot.app/r/exelban/stats)

Paste into your README — the badge live-updates from the latest cached analysis.

Onboarding doc

Onboarding: exelban/stats

Generated by RepoPilot · 2026-05-05 · Source

Verdict

WAIT — Single-maintainer risk — review before adopting

  • Last commit 1d ago
  • 5 active contributors
  • MIT licensed
  • CI configured
  • Tests present
  • ⚠ Small team — 5 top contributors
  • ⚠ Single-maintainer risk — top contributor 93% of commits

<sub>Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests</sub>

TL;DR

Stats is a macOS menu bar application that monitors system metrics including CPU utilization, GPU utilization, memory usage, disk utilization, and network usage. It provides real-time insights into battery levels, fan control, and sensor information, aimed at helping users optimize their macOS experience. The project uses a modular structure within the 'Kit' folder, which contains supporting files and various widgets for displaying metrics. The architecture is centered around Swift for its core functionality, leveraging C++ and Objective-C for performance-critical components.

Who it's for

This project is specifically targeted at macOS users who seek a lightweight and efficient system monitoring tool, particularly developers and system administrators who need to track system performance metrics in real time directly from the menu bar.

Maturity & risk

Stats has a solid maturity level with over 11,000 stars on GitHub, indicating a strong user base and community interest. The project appears actively developed with CI setup present in GitHub Actions, and the last commit was made recently, confirming that it is production-ready.

The repo does not have an excessively high dependency count but may indicate a level of risk due to its reliance on third-party libraries for metrics capture. Recent commits show ongoing activity, but a review of the open issue backlog and PRs should be done to assess potential breaking changes or issues.

Active areas of work

Recent changes include updates to the widget components such as 'BarChart.swift' and 'LineChart.swift' for improved data visualization. Open pull requests involve updates to the README and enhancements to asset management in 'Assets.xcassets'.

Get running

  • git clone https://github.com/exelban/stats.git
  • cd stats
  • brew install stats

Daily commands: Open the terminal and run 'open Stats.dmg' after installing to launch the application.

Map of the codebase

  • Kit/Supporting Files/Info.plist — This file contains essential configuration settings for the app and must be reviewed by all contributors.
  • Kit/Widgets/Memory.swift — This file provides core functionality for monitoring system memory usage, making it critical for understanding the app's operations.
  • Kit/module/widget.swift — This file is responsible for widget rendering, which is a key feature of the app's user interface.
  • Kit/plugins/SystemKit.swift — This plugin interfaces with system-level APIs, crucial for obtaining system statistics.
  • LaunchAtLogin/main.swift — This is the entry point for enabling the app to launch at login, an important aspect of user experience.

Components & responsibilities

  • Widgets (Swift, Cocoa) — Responsible for displaying various system metrics to the user.
    • Failure mode: Widgets may fail to update if the backend data fetching fails.
  • System Monitoring (Swift, Cocoa) — Handles interactions with the system to gather metrics.
    • Failure mode: Failure to communicate with system APIs may lead to inaccurate metrics.

Data flow

  • User InterfaceWidgets — User requests data display.
  • WidgetsSystem APIs — Widgets fetch data from the system.
  • System APIsWidgets — System returns data to Widgets.

How to make changes

Add a New Widget

  1. Create a new Swift file for the widget in the Kit/Widgets directory. (Kit/Widgets/NewWidget.swift)
  2. Implement the required functionality in the new widget file. (Kit/Widgets/NewWidget.swift)
  3. Register the widget in the Kit/module/widget.swift file. (Kit/module/widget.swift)

Update System Monitoring Features

  1. Modify the appropriate function in Kit/plugins/SystemKit.swift to add a new system metric. (Kit/plugins/SystemKit.swift)
  2. Ensure the new metric is displayed in the widgets by updating Kit/Widgets/Memory.swift or similar files. (Kit/Widgets/Memory.swift)

Why these technologies

  • Swift — Swift provides strong type safety and performance for macOS applications.
  • Cocoa — Cocoa is the primary framework for developing macOS applications, offering a rich set of tools.

Trade-offs already made

  • Use native macOS APIs over cross-platform solutions.
    • Why: This ensures better performance and user experience on macOS.
    • Consequence: Limits portability to non-macOS systems.

Non-goals (don't propose these)

  • Support for other operating systems
  • Multilingual user interface

Code metrics

  • Avg cyclomatic complexity: ~5 — Average complexity due to a mix of straightforward UI code and more complex interaction with system APIs.
  • Largest file: Kit/plugins/SystemKit.swift (150 lines)
  • Estimated quality issues: ~7 — Presence of some legacy code and lack of comments in critical areas.

Anti-patterns to avoid

  • Direct File Access (Medium)Kit/plugins/DB.swift: Directly reading/writing to files instead of using abstraction layers.

Performance hotspots

  • Kit/plugins/SystemKit.swift (Performance) — Heavy computation when fetching system stats may delay UI updates.

Traps & gotchas

Ensure System Settings allow Stats to display items in the menu bar; failure to do so may result in invisible icons. There may also be specific macOS version constraints that affect functionality.

Architecture

Concepts to learn

  • Core Graphics — Understanding Core Graphics is crucial for rendering custom UI components such as charts in Stats.
  • Multithreading — Essential for efficiently gathering system metrics without blocking the UI thread.
  • macOS Menu Bar Application Design — Knowledge of Menu Bar application design patterns is important for creating intuitive user interfaces on macOS.

Related repos

  • michaeltyson/SwiftEvent — A useful library for event handling in Swift applications which Stats may leverage for handling UI events.
  • akosma/menubarApp — A lightweight framework for building menu bar applications in macOS.
  • Sweeper/Gauge — An alternative system monitoring tool for macOS which provides similar functionalities.

PR ideas

To work on one of these in Claude Code or Cursor, paste: Implement the "<title>" PR idea from CLAUDE.md, working through the checklist as the task list.

Add unit tests for Kit/helpers.swift

Adding unit tests for the helper functions in Kit/helpers.swift will ensure that all utility methods are functioning correctly and maintainable. This will increase code reliability and facilitate future development.

  • [ ] Identify key functions in Kit/helpers.swift that lack tests.
  • [ ] Create a new file Kit/helpersTests.swift for the test cases.
  • [ ] Utilize XCTest to write tests covering edge cases and typical use cases.

Implement CI linting workflow for Swift files

Currently, there is no CI workflow specifically for linting Swift files in the repo. Adding a GitHub Action for this will help enforce code quality standards automatically on every pull request.

  • [ ] Create a new YAML file in .github/workflows for linting.
  • [ ] Set up swiftlint as a step in the workflow.
  • [ ] Ensure that the linting runs on every push and pull request.

Document the purpose and usage of Kit/constants.swift

The Kit/constants.swift file contains key constants used throughout the project, but lacks appropriate documentation. Adding comments or a Markdown documentation file will clarify their purpose and usage for contributors.

  • [ ] Review the contents of Kit/constants.swift to understand each constant.
  • [ ] Add inline comments explaining the use of each constant.
  • [ ] Optionally create a Markdown file in the Kit folder to describe all constants.

Good first issues

  • Add unit tests for 'Kit/Widgets/Memory.swift' to ensure memory usage metrics are accurate.
  • Enhance documentation in 'README.md' regarding installation steps for different macOS versions.
  • Contribute icons or assets to 'Kit/Supporting Files/Assets.xcassets' for new feature metrics.

Top contributors

Recent commits

  • 2e0c0fb — v2.12.13 (exelban)
  • c51c33a — lang: fixed some Dutch translations (#3179) (mvschaik)
  • 918e7dc — feat: added authorization step when trying to update Stats as non-admin (#3153) (exelban)
  • d6fd558 — fix: fixed inverted separator color (#3139) (exelban)
  • 0406f91 — v2.12.12 (exelban)
  • 6fa1e48 — fix: refresh popup readers when popup reopens (#2988) (eyupcanakman)
  • a08f729 — feat: adjusted stepper field width constraints (#3105) (yohaann196)
  • 2bcb438 — lang: updated Japanese translations for clarity and accuracy (#3161) (li-yifei)
  • 7174b87 — feat: improvements in the Remote module (exelban)
  • 685c7ab — feat: moved ANE utilization from read to calculation from power usage (exelban)

Security observations

The codebase for the macOS system monitor appears to have no immediate security vulnerabilities based on the static analysis. There are no hardcoded secrets or credentials found, and the file structure does not indicate any injection risks or misconfigurations. However, continuous monitoring and dependency checks are recommended to maintain security.

LLM-derived; treat as a starting point, not a security audit.

Where to read next


Generated by RepoPilot. Verdict based on maintenance signals — see the live page for receipts. Re-run on a new commit to refresh.

WAIT · exelban/stats — RepoPilot Verdict