A privacy-first, sophisticated menstrual cycle & fertility tracker for iOS.
CycleOne is a high-performance, open-source period tracker designed for users who value privacy above all else.
In an era of cloud-connected health apps, CycleOne takes a stand: Your health data is yours alone. Built with a strict "local-only" architecture, it provides professional-grade cycle prediction, symptom tracking, and historical analysis without ever requesting network access, requiring an account, or charging a subscription fee.
| Light Mode | Dark Mode |
|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
- Period Projection: Intelligent estimations for start dates and duration based on historical averages.
- Ovulation Tracking: Automatic calculation of ovulation and fertile windows.
- Irregularity Alerts: Identifies significant cycle variances to help you remain aware of physiological shifts.
- Flow Intensity: Categorical tracking from spotting to heavy flow.
- Symptom Database: Track physical, emotional, and digestive indicators.
- Mood & Energy: Document biometric indicators with a streamlined, premium UI.
- Notes: Local-only annotations for detailed record-keeping.
- Native Calendar: Leveraging
UICalendarViewfor a high-contrast, interactive experience. - Dynamic Themes: 5 custom accent color themes (Rose, Lavender, Ocean, Sage, Sunset) to match your style.
- Smooth Animations: High-fidelity transitions and staggered animations for a premium app feel.
- Zero Emojis: A consistent, professional aesthetic using high-quality SF Symbols.
CycleOne was built from the ground up to be safe:
- No Cloud Sync: Your data never leaves your device.
- No Accounts: No email, no password, no login required.
- No Analytics: Zero third-party tracking or telemetry.
- No Network Entitlements: The app doesn't even ask for internet permissions.
- Data Sovereignty: Export your entire history to CSV anytime.
| Component | Technology |
|---|---|
| Language | Swift 5.9+ |
| Framework | SwiftUI with MVVM Architecture |
| Logic | Proprietary CycleEngine (Pure Swift) |
| Persistence | Core Data (On-device SQLite) |
| Interface | Native UIKit/SwiftUI hybrid |
| Testing | XCTest (99 tests currently passing in the full suite: 90 unit + 9 UI) |
- macOS 14.0+
- Xcode 15.0+
- SwiftLint & SwiftFormat
- Clone the repo:
git clone https://github.com/VoxDroid/CycleOne.git
- Install pre-commit hooks:
brew install pre-commit pre-commit install
- Open
CycleOne.xcodeprojand build for the simulator.
We use a Makefile for CI/CD consistency:
make check: Full verification suite (Lint, Format, Test, UI Test).make test: Execute the main test suite and produceTestResults.xcresultcoverage output.make test-ui: Execute UI tests only.
DEST_ID=$(xcrun simctl list devices available | awk -F '[()]' '/iPhone/ {print $2; exit}')
if [ -z "$DEST_ID" ]; then
echo "No available iPhone simulator found."
exit 1
fi
xcodebuild test \
-project CycleOne.xcodeproj \
-scheme CycleOne \
-destination "id=${DEST_ID}" \
-parallel-testing-enabled NO \
-only-testing:CycleOneTestsLatest stable local run (TestResults.xcresult, 2026-04-02):
CycleOne.app: 10,313 / 10,313 lines (100.00%)CycleOneTests.xctest: 3,682 / 3,682 lines (100.00%)CycleOneUITests.xctest: 773 / 773 lines (100.00%)
Latest run counts:
CycleOneTests.xctest: 182 tests, 0 failures.CycleOneUITests.xctest: 22 tests, 0 failures.
Validation commands executed for this snapshot:
make checkpre-commit run --all-files
Recent reliability/security improvements in this iteration:
- CSV export now escapes quotes, preserves commas safely, and mitigates spreadsheet formula injection (
=,+,-,@prefixes). - Cycle rebuild now logs Core Data fetch/save failures instead of silently swallowing errors.
- Log saving now enforces the Core Data note-length limit (500 chars) to prevent save failures from oversized notes.
We welcome contributions! Please see CONTRIBUTING.md for guidelines on how to get involved.
CycleOne is released under the GNU General Public License v3.0. See LICENSE for details.
Designed and developed by VoxDroid.
© 2026 VoxDroid. All rights reserved.







