Goose Swift proof-of-concept README
Alpha proof of concept. This build is for developers to evaluate whether a project of this scope is viable. It is not ready to use as an app for tracking personal health data yet.
If you don't know what Xcode is, or how to build the Rust core, this build is not for you. Come back on 13 June 2026 for the first public beta on TestFlight.
This prototype targets WHOOP 5.0 only. Other WHOOP generations are not supported in this build.
The app and backend have had very little attention put into performance. The app will lag, very considerably. Performance PRs are welcome, or you can wait until I address it in due course.
Goose is a local-first WHOOP 5.0 data and health metrics project. The iOS app connects to WHOOP 5.0 bands, routes packet data through the Goose Rust core, and turns that data into daily health, recovery, sleep, strain, stress, cardio, energy, coach, and debug views.
GooseSwift/ SwiftUI app source
GooseWorkoutLiveActivityExtension/ Live Activity widget extension
Rust/ iOS static library, headers, per-platform outputs
Scripts/build_ios_rust.sh Xcode build phase for the Goose Rust core
docs/goose-swift-mvp/ MVP plans, contracts, and data-readiness docs
GooseSwift.xcodeproj Xcode projectKey Swift entry points:
GooseSwiftApp.swift: app lifecycle and deep-link handling.RootView.swift: onboarding gate and global sync toast host.AppShellView.swift: tab shell and shared health store wiring.GooseAppModel.swift: app state, BLE ownership, lifecycle, and bridge summaries.GooseBLEClient.swift: Bluetooth scan/connect/sync logic.GooseRustBridge.swift: Swift wrapper around the Rust C bridge.HealthView.swift and Health* files: health dashboards, metric pages, trends, and sheets.CoachView.swift and Coach* files: coach UI and chat support.MoreView.swift: operational/debug/settings surfaces.This is an active prototype. Because the data pipeline is still evolving, some metrics appear as empty or unavailable until the app has a source for them.
Goose is an independent project and is not affiliated with WHOOP. This repository does not include or reference source code owned by WHOOP. The app communicates with WHOOP 5.0 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.
The current health metric UI draws heavily from Bevel, especially the Sleep, Recovery, Strain, Stress, and trend-detail surfaces. Bevel is not affiliated with Goose; this credit is here because their product design has been a major visual reference.
com.goose.swift bundle identifier.Rust/core source.rustup; see the Rust Core Bridge section below.Built Rust .a archives are generated locally during Xcode builds and are not committed. Set GOOSE_SKIP_RUST_CORE_BUILD=1 only when the matching local archive already exists for the active Xcode platform.
Open GooseSwift.xcodeproj in Xcode and build the GooseSwift scheme, or build from the command line.
Simulator build:
xcodebuild \
-project GooseSwift.xcodeproj \
-scheme GooseSwift \
-configuration Debug \
-destination 'platform=iOS Simulator,name=iPhone 17' \
-derivedDataPath /tmp/goose-swift-deriveddata \
buildPhysical device build:
xcodebuild \
-project GooseSwift.xcodeproj \
-scheme GooseSwift \
-configuration Debug \
-destination 'platform=iOS,id=<device-id>' \
-derivedDataPath /tmp/goose-swift-deriveddata-device \
-allowProvisioningUpdates \
buildList connected devices:
xcrun devicectl list devicesAfter a successful physical-device build, reinstall and launch:
xcrun devicectl device uninstall app \
--device <device-id> \
com.goose.swift
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.swiftThe Rust bridge source is committed in Rust/core. Do not commit built .a
archives; Xcode generates them locally through Scripts/build_ios_rust.sh.
Prerequisites:
rustup.rustup target add aarch64-apple-ios aarch64-apple-ios-sim x86_64-apple-iosScripts/build_ios_rust.sh builds Rust/core for the active Xcode platform:
iphoneos -> aarch64-apple-iosiphonesimulator on Apple Silicon -> aarch64-apple-ios-simiphonesimulator on Intel -> x86_64-apple-iosOutputs are staged into:
Rust/iphoneos/libgoose_core.a
Rust/iphonesimulator/libgoose_core.aThe Swift target links Rust/$(PLATFORM_NAME)/libgoose_core.a and reads the C
bridge header from Rust/core/include/goose_core_bridge.h. The default Cargo
target directory is build/rust-target/goose-core, so Rust build products stay
outside the committed source tree.
Manual builds:
# Simulator on 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.shYou normally do not need to run these by hand; the Xcode build phase runs the script before compiling Swift.
Detailed implementation plans live in docs/goose-swift-mvp/:
Home.md: Home tab contract and remaining work.Health.md: Health surfaces, metric pages, packet inputs, trends, and acceptance checks.Coach.md: Coach tab plan and chat architecture notes.More.md: operational settings/debug/capture/privacy surfaces.CodexCoachServer.md: viability notes for a future Codex-powered coach.RemainingDataTodo.md: unresolved data-source and persistence work.Recovery-specific follow-up work is tracked in recovery-todo.md.
This project moves quickly, so small focused changes are easiest to review.
Want to talk to other contributors? Join the group here.
No open issues yet, or sync has not completed.