Skip to content

DX23876/goose

Repository files navigation

Disclaimer — Unofficial Project / Personal Data Research

Goose is an independent, unofficial project not affiliated with, endorsed by, or supported by WHOOP, Inc. This project accesses biometric data exclusively over Bluetooth Low Energy from the user's own hardware — it does not touch WHOOP's servers or APIs. It was built for personal research and data portability purposes only, grounded in GDPR Art. 20 (right to data portability) and EU Directive 2009/24/EC Art. 6 (interoperability exception).

See DISCLAIMER.md for the full legal statement.

Goose

Goose

Your strap. Your data. Your phone. BLE-direct, self-hosted, no cloud.

Active fork of b-nnett/goose — expanded with a Rust metrics core, self-hosted server, and full health dashboard.

Platform Local first No account WHOOP compatibility License Discord

Features · Requirements · Build · Self-Hosted Server · Contributing · 💬 Discord

Today — iPhone    Health — iPhone    Sleep — iPhone

Today · Health · Sleep — all data processed locally, nothing leaves the device by default.


Alpha proof of concept. This build is for developers evaluating whether a project of this scope is viable. It is not ready for tracking personal health data in production. If you don't know what Xcode is or how to build a Rust library, wait for the TestFlight beta.

Features

  • Home — daily overview: sleep score, recovery, strain rings, live HR, stress & energy summary.
  • Health — detail surfaces for Sleep, Recovery, Strain, Stress, Cardio Load, Energy Bank, Health Monitor, and Algorithms.
  • Coach — local AI coach that reads your on-device metrics; no data leaves the app.
  • BLE sync — CoreBluetooth direct-connect to WHOOP 5.0, WHOOP 4.0, and WHOOP MG; background sync; historical packet import.
  • Rust core — protocol parsing, SQLite persistence, and metric algorithms compiled as a static library (libgoose_core.a).
  • HealthKit export — HR, SpO2, HRV, and sleep sessions written to Apple Health after each sync.
  • Self-hosted server (optional) — FastAPI + TimescaleDB backend; automatic upload from iOS; Docker Compose setup.
  • Workout Live Activity — Dynamic Island and lock-screen widget during workouts.

Requirements

  • macOS with Xcode (iOS 26.0 SDK).
  • Rust and Cargo (MSRV 1.96) with iOS targets installed via rustup.
  • Apple Developer signing configured for your bundle identifier (override via Config/Local.xcconfig).
  • Docker (optional — only needed for the self-hosted server).

iOS 26.0 device or simulator. The Rust .a archives are gitignored and built automatically by the Xcode build phase; a fresh clone needs at least one build to populate them.

Build

git clone https://github.com/tigercraft4/goose.git
cd goose

Install iOS Rust targets:

rustup target add aarch64-apple-ios aarch64-apple-ios-sim x86_64-apple-ios

Open GooseSwift.xcodeproj in Xcode and run the GooseSwift scheme, or build from the command line:

# Simulator
xcodebuild \
  -project GooseSwift.xcodeproj \
  -scheme GooseSwift \
  -destination 'platform=iOS Simulator,name=iPhone 17' \
  -derivedDataPath /tmp/goose-swift-deriveddata \
  build

# Physical device
xcodebuild \
  -project GooseSwift.xcodeproj \
  -scheme GooseSwift \
  -destination 'platform=iOS,id=<device-id>' \
  -derivedDataPath /tmp/goose-swift-deriveddata-device \
  -allowProvisioningUpdates \
  build

After a device build, reinstall:

xcrun devicectl device install app \
  --device <device-id> \
  /tmp/goose-swift-deriveddata-device/Build/Products/Debug-iphoneos/GooseSwift.app

xcrun devicectl device process launch \
  --device <device-id> --terminate-existing \
  com.goose.app

Self-Hosted Server

The server/ directory is an optional FastAPI + TimescaleDB backend. The iOS app works standalone without it.

cd server
cp .env.example .env
# Edit: set GOOSE_API_KEY and GOOSE_DB_PASSWORD
docker compose up -d --build

Verify: curl -s localhost:8770/healthz{"status":"ok"}

Configure the server URL and Bearer token in the iOS app under More → Server Settings. See server/README.md for the full API reference.

Rust Core Bridge

The Rust source is committed at Rust/core. Do not commit built .a archives; the Xcode build phase generates them via Scripts/build_ios_rust.sh.

Manual build if needed:

# Simulator (Apple Silicon)
PLATFORM_NAME=iphonesimulator CURRENT_ARCH=arm64 Scripts/build_ios_rust.sh

# Physical iPhone
PLATFORM_NAME=iphoneos CURRENT_ARCH=arm64 Scripts/build_ios_rust.sh

Set GOOSE_SKIP_RUST_CORE_BUILD=1 to skip recompilation on subsequent Xcode builds.

Data and Privacy

All metric computation and storage is local. BLE packet bytes go through the Rust core into SQLite on the device. The self-hosted server upload is opt-in and controlled from More → Server Settings. Coach responses use the same local metric summaries visible in the app — no network request is made unless you configure a server or enable the AI coach provider.

Independence

Goose is independent of WHOOP. This repository does not include or reference code owned by WHOOP. The app communicates with WHOOP bands over Bluetooth using services and data exposed by the device, then parses and stores that local data through the Goose Rust core. Product names are used only to describe compatibility.

Acknowledgements

Built on b-nnett/goose for the iOS shell and BLE/Rust architecture. BLE pairing patterns draw from Noop. The self-hosted server adapts tigercraft4/my-whoop. Health metric UI design references Bevel.

Donate

Goose is free and self-hosted. If it saves you money on a WHOOP subscription or you find it useful, chipping in keeps development going. One-off, no account, no strings.

Donations are crypto-only — no PayPal or Patreon. If you don't hold any crypto, Coinbase, Kraken, or Cash App (for BTC) take under 5 minutes to set up.

Coin Network Address
BTC Bitcoin bc1qk5gw9st7zg767d0p8y3apkr4hk77em0a8dazxc
ETH Ethereum 0xd237f99E11b476aefF2345ab55b4949EDF946528
SOL Solana DEQbatEjCH2uXzE53RQ59TAD43nhq7jaiTr4kULwwSCr

Always double-check the first and last characters before sending — crypto transactions are irreversible. Only send a coin to its own network.

Can't donate? ⭐ star the repo, file a bug report, or share a strap log. That moves Goose forward too. Full details and copyable addresses in docs/DONATIONS.md.

Contributing

Small, focused changes are easiest to review. See CONTRIBUTING.md for code style, Rust bridge conventions, and the PR checklist. Join Discord or GitHub Discussions for questions.

License

PolyForm Noncommercial License 1.0.0. See LICENSE.

About

Private WHOOP 5.0 companion + AI health coach (fork of tigercraft4/goose)

Resources

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages