Getting Started
| GitHub | |
| Downloads | |
| Microsoft.Extensions.AI |
Shiny Health provides a unified API for reading and writing health data from Apple HealthKit (iOS) and Android Health Connect. It supports permission management, time-bucketed aggregate queries, data writing, and 30+ cross-platform health metrics spanning activity, body, vitals, nutrition, reproductive/cycle tracking, and workouts.
Features
Section titled “Features”- Single
IHealthServiceinterface that works on both iOS and Android - Read and write support for 30+ cross-platform health metrics
- Real-time observation of health data changes via
IAsyncEnumerable<HealthResult> - Time-bucketed aggregate queries at minute, hour, or day intervals
- Permission management with per-metric read/write granularity via
PermissionType - AOT-compatible implementation (no .NET reflection)
- Blood pressure returns a dedicated
BloodPressureResultwith separate systolic/diastolic values - Reproductive & cycle tracking (menstruation flow, sexual activity, ovulation tests, cervical mucus, intermenstrual bleeding), plus workouts and nutrition via dedicated result records
- Optional
Microsoft.Extensions.AItools viaShiny.Health.Extensions.AIto expose health data to LLM agents
Supported Metrics
Section titled “Supported Metrics”| Metric | Unit | iOS (HealthKit) | Android (Health Connect) |
|---|---|---|---|
| Step Count | count | HKQuantityType.StepCount | StepsRecord |
| Heart Rate | bpm | HKQuantityType.HeartRate | HeartRateRecord |
| Calories | kcal | HKQuantityType.ActiveEnergyBurned | TotalCaloriesBurnedRecord |
| Distance | meters | HKQuantityType.DistanceWalkingRunning | DistanceRecord |
| Weight | kg | HKQuantityType.BodyMass | WeightRecord |
| Height | meters | HKQuantityType.Height | HeightRecord |
| Body Fat % | % | HKQuantityType.BodyFatPercentage | BodyFatRecord |
| Resting Heart Rate | bpm | HKQuantityType.RestingHeartRate | RestingHeartRateRecord |
| Blood Pressure | mmHg | HKQuantityType.BloodPressureSystolic/Diastolic | BloodPressureRecord |
| Oxygen Saturation | % | HKQuantityType.OxygenSaturation | OxygenSaturationRecord |
| Sleep Duration | hours | HKCategoryType.SleepAnalysis | SleepSessionRecord |
| Hydration | liters | HKQuantityType.DietaryWater | HydrationRecord |
| Blood Glucose | mg/dL | HKQuantityType.BloodGlucose | BloodGlucoseRecord |
| Body Temperature | °C | HKQuantityType.BodyTemperature | BodyTemperatureRecord |
| Basal Body Temperature | °C | HKQuantityType.BasalBodyTemperature | BasalBodyTemperatureRecord |
| Respiratory Rate | breaths/min | HKQuantityType.RespiratoryRate | RespiratoryRateRecord |
| VO2 Max | mL/kg/min | HKQuantityType.VO2Max | Vo2MaxRecord |
| Heart Rate Variability | ms | HKQuantityType.HeartRateVariabilitySDNN | HeartRateVariabilityRmssdRecord |
| Lean Body Mass | kg | HKQuantityType.LeanBodyMass | LeanBodyMassRecord |
| Basal Energy Burned | kcal | HKQuantityType.BasalEnergyBurned | BasalMetabolicRateRecord |
| Active Energy Burned | kcal | HKQuantityType.ActiveEnergyBurned | ActiveCaloriesBurnedRecord |
| Floors Climbed | count | HKQuantityType.FlightsClimbed | FloorsClimbedRecord |
| Wheelchair Pushes | count | HKQuantityType.PushCount | WheelchairPushesRecord |
| Speed | m/s | HKQuantityType.WalkingSpeed | SpeedRecord |
| Power | watts | HKQuantityType.CyclingPower | PowerRecord |
| Menstruation Flow | flow level | HKCategoryType.MenstrualFlow | MenstruationFlowRecord |
| Sexual Activity | protection enum | HKCategoryType.SexualActivity | SexualActivityRecord |
| Ovulation Test | result enum | HKCategoryType.OvulationTestResult | OvulationTestRecord |
| Cervical Mucus | appearance enum | HKCategoryType.CervicalMucusQuality | CervicalMucusRecord |
| Intermenstrual Bleeding | event | HKCategoryType.IntermenstrualBleeding | IntermenstrualBleedingRecord |
| Workout | session | HKWorkout | ExerciseSessionRecord |
| Nutrition | food/macros | Food correlation | NutritionRecord |
- MyApp/
1<?xml version="1.0" encoding="utf-8"?>2<manifest xmlns:android="http://schemas.android.com/apk/res/android">3 <application android:allowBackup="true" android:icon="@mipmap/appicon" android:roundIcon="@mipmap/appicon_round" android:supportsRtl="true">4 <!-- Android 14+ (API 34) ships Health Connect in the platform and will not grant health5 permissions unless the app exposes this alias -->6 <activity-alias7 android:name="ViewPermissionUsageActivity"8 android:exported="true"9 android:targetActivity="MyApp.MainActivity"10 android:permission="android.permission.START_VIEW_PERMISSION_USAGE">11 <intent-filter>12 <action android:name="android.intent.action.VIEW_PERMISSION_USAGE" />13 <category android:name="android.intent.category.HEALTH_PERMISSIONS" />14 </intent-filter>15 </activity-alias>16 </application>17 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>18 <uses-permission android:name="android.permission.BATTERY_STATS" />19 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />20 <uses-permission android:name="android.permission.INTERNET" />21 <!-- trim these to the data types your app actually uses -->22 <uses-permission android:name="android.permission.health.READ_STEPS" />23 <uses-permission android:name="android.permission.health.READ_HEART_RATE" />24 <uses-permission android:name="android.permission.health.READ_TOTAL_CALORIES_BURNED" />25 <uses-permission android:name="android.permission.health.READ_DISTANCE" />26 <uses-permission android:name="android.permission.health.READ_WEIGHT" />27 <uses-permission android:name="android.permission.health.READ_HEIGHT" />28 <uses-permission android:name="android.permission.health.READ_BODY_FAT" />29 <uses-permission android:name="android.permission.health.READ_RESTING_HEART_RATE" />30 <uses-permission android:name="android.permission.health.READ_BLOOD_PRESSURE" />31 <uses-permission android:name="android.permission.health.READ_OXYGEN_SATURATION" />32 <uses-permission android:name="android.permission.health.READ_SLEEP" />33 <uses-permission android:name="android.permission.health.READ_HYDRATION" />34 <uses-permission android:name="android.permission.health.READ_MENSTRUATION" />35 <uses-permission android:name="android.permission.health.READ_BLOOD_GLUCOSE" />36 <uses-permission android:name="android.permission.health.READ_BODY_TEMPERATURE" />37 <uses-permission android:name="android.permission.health.READ_BASAL_BODY_TEMPERATURE" />38 <uses-permission android:name="android.permission.health.READ_RESPIRATORY_RATE" />39 <uses-permission android:name="android.permission.health.READ_VO2_MAX" />40 <uses-permission android:name="android.permission.health.READ_HEART_RATE_VARIABILITY" />41 <uses-permission android:name="android.permission.health.READ_LEAN_BODY_MASS" />42 <uses-permission android:name="android.permission.health.READ_BASAL_METABOLIC_RATE" />43 <uses-permission android:name="android.permission.health.READ_ACTIVE_CALORIES_BURNED" />44 <uses-permission android:name="android.permission.health.READ_FLOORS_CLIMBED" />45 <uses-permission android:name="android.permission.health.READ_WHEELCHAIR_PUSHES" />46 <uses-permission android:name="android.permission.health.READ_SPEED" />47 <uses-permission android:name="android.permission.health.READ_POWER" />48 <uses-permission android:name="android.permission.health.READ_SEXUAL_ACTIVITY" />49 <uses-permission android:name="android.permission.health.READ_OVULATION_TEST" />50 <uses-permission android:name="android.permission.health.READ_CERVICAL_MUCUS" />51 <uses-permission android:name="android.permission.health.READ_INTERMENSTRUAL_BLEEDING" />52 <uses-permission android:name="android.permission.health.READ_EXERCISE" />53 <uses-permission android:name="android.permission.health.READ_NUTRITION" />54 <uses-permission android:name="android.permission.ACTIVITY_RECOGNITION" />55 <uses-permission android:name="android.permission.health.WRITE_STEPS" />56 <uses-permission android:name="android.permission.health.WRITE_HEART_RATE" />57 <uses-permission android:name="android.permission.health.WRITE_TOTAL_CALORIES_BURNED" />58 <uses-permission android:name="android.permission.health.WRITE_DISTANCE" />59 <uses-permission android:name="android.permission.health.WRITE_WEIGHT" />60 <uses-permission android:name="android.permission.health.WRITE_HEIGHT" />61 <uses-permission android:name="android.permission.health.WRITE_BODY_FAT" />62 <uses-permission android:name="android.permission.health.WRITE_RESTING_HEART_RATE" />63 <uses-permission android:name="android.permission.health.WRITE_BLOOD_PRESSURE" />64 <uses-permission android:name="android.permission.health.WRITE_OXYGEN_SATURATION" />65 <uses-permission android:name="android.permission.health.WRITE_SLEEP" />66 <uses-permission android:name="android.permission.health.WRITE_HYDRATION" />67 <uses-permission android:name="android.permission.health.WRITE_MENSTRUATION" />68 <uses-permission android:name="android.permission.health.WRITE_BLOOD_GLUCOSE" />69 <uses-permission android:name="android.permission.health.WRITE_BODY_TEMPERATURE" />70 <uses-permission android:name="android.permission.health.WRITE_BASAL_BODY_TEMPERATURE" />71 <uses-permission android:name="android.permission.health.WRITE_RESPIRATORY_RATE" />72 <uses-permission android:name="android.permission.health.WRITE_VO2_MAX" />73 <uses-permission android:name="android.permission.health.WRITE_HEART_RATE_VARIABILITY" />74 <uses-permission android:name="android.permission.health.WRITE_LEAN_BODY_MASS" />75 <uses-permission android:name="android.permission.health.WRITE_BASAL_METABOLIC_RATE" />76 <uses-permission android:name="android.permission.health.WRITE_ACTIVE_CALORIES_BURNED" />77 <uses-permission android:name="android.permission.health.WRITE_FLOORS_CLIMBED" />78 <uses-permission android:name="android.permission.health.WRITE_WHEELCHAIR_PUSHES" />79 <uses-permission android:name="android.permission.health.WRITE_SPEED" />80 <uses-permission android:name="android.permission.health.WRITE_POWER" />81 <uses-permission android:name="android.permission.health.WRITE_SEXUAL_ACTIVITY" />82 <uses-permission android:name="android.permission.health.WRITE_OVULATION_TEST" />83 <uses-permission android:name="android.permission.health.WRITE_CERVICAL_MUCUS" />84 <uses-permission android:name="android.permission.health.WRITE_INTERMENSTRUAL_BLEEDING" />85 <uses-permission android:name="android.permission.health.WRITE_EXERCISE" />86 <uses-permission android:name="android.permission.health.WRITE_NUTRITION" />87 <queries>88 <package android:name="com.google.android.apps.healthdata" />89 </queries>90</manifest>Samples
Section titled “Samples”AI Coding Assistant
Section titled “AI Coding Assistant”Step 1 — Add the marketplace:
claude plugin marketplace add shinyorg/skillsStep 2 — Install the plugin:
claude plugin install shiny@shinyOne plugin installs all 35 Shiny skills. Your agent loads only the skill relevant to what you're building, so there's no cost to having them all available.
Step 1 — Add the marketplace:
copilot plugin marketplace add https://github.com/shinyorg/skillsStep 2 — Install the plugin:
copilot plugin install shiny@shinyOne plugin installs all 35 Shiny skills. Your agent loads only the skill relevant to what you're building, so there's no cost to having them all available.


