Open sourceFor Oura Ring 3, 4, and 5 on iPhone

Your Oura ring.
No account.
No cloud.

Open Oura syncs the ring over Bluetooth, computes readiness, sleep, and activity on your iPhone, and can back up every night to a server you own. Your AI agent reads it from there.

MIT licenseNo Oura accountFree Apple ID is enough
03:5306:0008:0010:0012:0013:21
One real night from the ring, staged on the phone. No server involved. AwakeREMCoreDeep
0
calls to Oura's cloud. The ring talks to your phone only.
116,890
raw ring events copied to the hub in one sync, in our test.
1 scan
connects the iPhone to your hub. No token to type.
561★
on GitHub for open_oura, the protocol work under it.
Demo

Ring to phone to server to agent. In 32 seconds.

Every screen is the real app and the real hub. The server name and the token are demo values.

1080p · music, no voiceRecorded from the iOS simulator and a local hub
01 · Pair

A key you make. A ring you own.

Reset the ring on its charger, then pair it in the app. The app makes the key on your iPhone and keeps it in the Keychain. Oura's app and Oura's servers are out of the loop.

  • Key16 bytes, made on the phone
  • LinkBluetooth LE, re-authenticated
  • RingsGen 3 · Ring 4 · Ring 5
Open Oura pairing screen: Pair your ring
02 · Understand

Readiness, sleep, and activity, computed on the phone.

The app pulls the ring's history into a local database and runs the metric algorithms on the iPhone. It can write the measured data to Apple Health, day by day, with no duplicates.

  • Scoresreadiness · sleep · activity
  • VitalsHR · HRV · temp · SpO₂
  • Apple Healthoptional, measured data only
Trends: past 7 days of readiness, sleep, and activity
Summary: readiness 96, sleep 89, activity 69
03 · Keep · optional

Every night, on a server you own.

Run the hub on a home server, a Steam Deck, or a Mac with one command. After each sync the phone sends the new ring data. You get a full backup, a web app, and your data while the phone is off.

  • Install./deploy/install.sh
  • Runs onDocker or podman
  • Networkyour tailnet, or HTTPS
your-server.ts.net:8787/#/sleep
The hub web app: one night with its hypnogram, heart rate, HRV, skin temperature, blood oxygen, and movement
04 · Ask · optional

Your AI agent reads it over MCP.

The hub is an MCP server. Add one line to Claude Code, Cursor, or any MCP client, and ask it to plan your day around last night. Every answer carries how old the data is. No MCP client? The hub's Ask page runs your own Claude Code, Codex, or Cursor login on the server.

get_status_nowget_sleepget_trendsget_activityget_watchget_health_samples
Where your data goes

You decide every hop.

The phone is the only required stop. The hub and the agent are yours to add, and yours to remove.

Ring

Records heart rate, HRV, temperature, blood oxygen, and movement.

→ Bluetooth, your key

iPhone

Stores the history, computes the scores, and can write to Apple Health.

→ after each sync, your token

Your hub optional

Keeps a full copy, serves the web app, and runs the MCP server.

→ MCP over HTTP, same token

Your agent optional

Reads your status and plans with it. Only agents with your token get in.

Setup

Three steps. About 30 minutes.

You need a Mac with Xcode, an iPhone and its cable, and the ring's charger. A free Apple ID works.

Read the full guide
  1. Install the app from your Mac

    One script builds the app, finds your Apple team and your iPhone, and installs it.

    git clone https://github.com/KenWuqianghao/open_health.git && cd open_health && ./apps/ios/install.sh
  2. Reset the ring on its charger, then pair

    Flip the charger with the ring on it until each light shows. Then tap Scan for Rings in the app.

    blueredpurpleyellow
  3. Optional: run your hub, scan to connect

    On your server, one script. Then scan the QR code on the hub's Connect page with the iPhone Camera.

    git clone https://github.com/KenWuqianghao/oura-hub.git && cd oura-hub && ./deploy/install.sh
Questions

Before you reset your ring.

Can I still use the official Oura app?

Not at the same time. A ring holds one key, so the reset removes Oura's key. To go back, reset the ring again and set it up in the official app. Sync the official app one last time before you switch.

Is anything sent to Oura or to you?

No. The app talks to the ring over Bluetooth and keeps the data on the iPhone. It sends data to one place only: the hub you run, and only after you connect it.

Which rings and phones work?

Oura Ring 3 (Gen3), Ring 4, and Ring 5, which use the same protocol. The pairing and sync were tested on a Ring 3 Horizon and a Ring 5. The app is iPhone only for now, iOS 17 or newer.

Why do I build it myself?

It is not on the App Store. The install script builds it with Xcode and your Apple ID. With a free Apple ID the app runs for 7 days per install; run the script again to renew it. Your data stays on the phone.

Do I need a server?

No. The app works alone. The hub adds a backup, a web app, remote access, and MCP for an AI agent. It runs on any computer that stays on.

Are sleep stages included?

Sleep stages, cardiovascular age, and workout detection use Oura's own on-device models. Those files are Oura's property and are not in these repositories. Without them you still get heart rate, HRV, blood oxygen, temperature, steps, energy, time in bed, and the scores. The guide shows how to add the models from your own copy of the official app.

Is this made by Oura?

No. Open Oura is an independent open-source project. It is not made, supported, or approved by Oura.

Built on open work

The protocol work is by Thomas Marchand.

open_oura by Thomas Marchand (@thomasmc) reverse-engineered the ring's Bluetooth protocol, authentication, and event format, and ported the metric algorithms. Open Oura adds the iPhone app polish, the self-hosted hub, and the one-command setup on top.

561★
Th0rgal/open_oura

Your data should live
where you do.