Thanks for your interest in contributing! CodexMeter is a personal project, but bug reports, fixes, and improvements are welcome.
- Fork the repo and clone your fork.
- Follow the README setup guide to get everything running locally.
- Run the health check:
bash doctor.sh
cd firmware
pio run -e m5stack_atoms3 # build
pio run -e m5stack_atoms3_smoke # build smoke testFormat with clang-format if available. The codebase targets Arduino framework
on ESP32-S3 with C++17.
.venv/bin/pip install -r requirements.txt
.venv/bin/python -m ruff check . # lint
.venv/bin/python -m pytest -q # test
.venv/bin/python -m black . # formatcd ios/CodexMeterApp
xcodegen generate
open CodexMeterApp.xcodeprojUse Xcode 16.0+. The project file is generated from project.yml — do not edit
the .xcodeproj directly.
- Keep PRs focused — one feature or fix per PR.
- Run
ruffandpytestbefore submitting Python changes. - Verify the firmware builds with
pio run -e m5stack_atoms3. - If adding new features, update the README or systm.md as needed.
Open an issue with:
- Your OS and Python version (
python3 --version) - Daemon output or logs
- Steps to reproduce
- Whether the issue is with the firmware, daemon, or iOS app
- Python: follow
ruffdefaults andblackformatting - C++: match the existing style in
firmware/src/ - Swift: follow standard Swift conventions, use the project's existing patterns
- Commits: prefer conventional commits
(
feat:,fix:,docs:,chore:)