Skip to content
Shiny Controls v1.0 - The Ultra Control Suite for .NET MAUI & BlazorO...M...G!

Getting Started

GitHub GitHub stars for shinyorg/health
Downloads NuGet downloads for Shiny.Health
Microsoft.Extensions.AI NuGet downloads for Shiny.Health.Extensions.AI
Frameworks
.NET MAUI
Operating Systems
Android
iOS

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.

  • Single IHealthService interface 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 BloodPressureResult with 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.AI tools via Shiny.Health.Extensions.AI to expose health data to LLM agents
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
Changed files
  • MyApp/
Platforms/Android/AndroidManifest.xml
AndroidManifest.xml
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>
claude plugin marketplace add shinyorg/skills
claude plugin install shiny@shiny

One 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.

copilot plugin marketplace add https://github.com/shinyorg/skills
copilot plugin install shiny@shiny

One 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.

View shiny-health Skill