Thank you for your interest in contributing to MeshCore One!
To make the contribution process smooth and respectful of everyone's time, please follow these guidelines:
Discuss your idea first: IF YOU DO NOT FOLLOW THIS STEP, YOUR PR MAY BE CLOSED WITHOUT COMMENT.
Any of the following options are available:
- File a GitHub issue with your idea
- MeshCore Discord: Look for the MeshCore One forum post.
- Or message me on Matrix @avion:matrix.org
If your PR looks like it hasn't gone through sufficient planning, testing, and review, it will be closed.
When submitting a PR, please:
- Include a clear description of the feature or fix.
- Include an overview of the changes made.
- Keep the PR to a single logical change. Don't bundle unrelated commits, drive-by refactors, or stray edits; open a separate PR for those so each can be reviewed on its own.
- Run
swiftlint lintand fix any warnings or errors. - Run the test suite and confirm all tests pass.
- Describe the testing steps you performed.
If you (or your AI agent) open the PR from the command line or an API (
gh pr create, the GitHub REST API, or any bot), the required checklist will be missing and an automated check will close the PR until it is added. Paste the block below into your PR description and complete every item:
## Description
<!-- What does this PR do, and why are you making the change? -->
## Overview of Changes
<!-- A short summary of the changes made. -->
## Testing
<!-- Describe the testing steps you performed, including any edge cases. -->
## Tested on
- [ ] iOS [version]
- [ ] iPadOS [version]
- [ ] macOS [version]
## Checklist
- [ ] This PR was discussed with the maintainer either via GitHub issue or other means (Also check the box if this PR is small enough not to need discussion e.g. typo fix)
- [ ] I have read `CONTRIBUTING.md`
- [ ] Testing steps are documented above.
- [ ] This change is not low effort and I took the time to test itIf you're an experienced software engineer and did not rely heavily on AI for your contribution, skip to Getting Started.
If you used AI extensively (which is totally fine, I built this entire project with AI despite not being a SWE and only having basic Python scripting experience), please follow these best practices to ensure high-quality results:
-
If you have no previous coding experience It's usually easier to simply create a feature request GitHub issue with your idea and then I can implement it using my established workflows. Feel free to create mock ups with AI and attach those screenshots in your feature request!
-
Choose the right model for planning
If you're not a software engineer and aren't comfortable creating detailed technical plans yourself, stick to the strongest reasoning models: Claude Opus or GPT Codex (high/xhigh). These are decent at turning non-technical ideas into solid implementation plans. Other popular models (e.g., GLM, MiniMax) perform well when given a detailed plan, but struggle to create one from scratch in a large codebase. -
Plan thoroughly
Ask the AI to use research agents/tools to gather context about the relevant parts of the codebase. Think of edge cases. Write the plan to an md file. -
Review the plan
Start a fresh chat and ask the AI to critically review the plan. -
Refine the plan
Have the AI validate the review, then adjust the plan as necessary. -
Implement
Have the AI follow the finalized plan to make the changes. -
Validate the implementation
In a new chat, ask the AI to review the code changes. Claude Code and Codex both have a built-inreviewtool for this. -
Test thoroughly
Manually verify that everything works as expected. Test edge cases. -
Submit the PR
In the description, include the reason you are making the changes. You can ask the AI to draft the PR description. Feel free to use it directly, but adding a bit of your own voice is always appreciated!
- Xcode 26.0+
- Swift 6.2+
- XcodeGen: Required for project file generation.
- SwiftGen: Required for localization.
brew install xcodegen swiftgen
- xcsift (optional): Transforms verbose Xcode output into concise JSON.
brew install xcsift
- Clone the repository.
- Generate the Xcode project:
The project is generated by XcodeGen from
xcodegen generate
project.yml; never editMC1.xcodeprojdirectly, as it is overwritten on the next generate. Make project configuration changes inproject.yml. - Open
MC1.xcodeproj.
Run make help for the full list of developer shortcuts.
Two simulators are required, because the suites target different iOS versions:
- App suite runs on iPhone 17e, iOS 26.5:
make test-app
- StoreKit / IAP suites run on iPhone 16e, iOS 18.x:
These must run on iOS 18.x: under
make test-store
xcodebuild testthe iOS 26.x simulators serve 0 products to StoreKit (an Apple-sideSKTestSessionregression), so the product-dependent tests would falsely fail. They auto-skip on iOS 26, somake test-storeis how you actually exercise them.
make test runs both passes. Override SIM or STORE_SIM if your machine has different simulators installed.
- All development happens on the
devbranch.mainis reserved for releases. - Fork the repo and create your branch from
dev. - Use the naming convention
{type}/short-descriptive-name, where type is one of:feature— new functionalityfix— bug fixrefactor— code restructuring without behavior changechore— tooling, CI, docs, or other non-code changes
- Target your PR to
dev, notmain.
Thank you again for your interest in contributing. I'm excited to see what you build!