ZmanimFace

Connect IQ Watchface · Garmin Instinct 2

A full halachic watchface for the Garmin Instinct 2 (176×176 MIP monochrome display). Shows all 11 zmanim, Hebrew date, shaah zmanit, next-zman countdown, period progress bar, and an innovative day-arc timeline — built from scratch in Monkey C using the NOAA solar position algorithm.

GRA & MGA opinionsNOAA solar algorithm< 1 min accuracy vs HebcalGPS-awareHillel II Hebrew calendar

Display Layout

176 × 176 px monochrome MIP display (Garmin Instinct 2)

05:47
71 min
23 Sivan
Thu 18 Jun
─ NEXT ZMAN (GRA) ─
Sof Zman Shema
09:07   in 3:20
AlotTzet
0–48px Large current time (HH:MM)
top-right Shaah zmanit circle (71 min today)
50–62px Hebrew date "23 Sivan"
62–74px Gregorian date "Thu 18 Jun"
82–124px Next zman — name, time, countdown
128–136px Period progress bar
142–175px Day-arc: Alot→Tzet with sun dot

Features

☀️

Day-Arc Timeline

Horizontal bar from Alot → Tzet with tick marks for each zman and a live sun-dot showing the current moment

⏱️

Shaah Zmanit Circle

Today's halachic hour length in minutes, displayed in the Instinct 2's GPS-button viewport (top-right corner)

📅

Hebrew Date

Full Hillel II calendar calculation — correct leap years, month lengths, and all 4 postponement rules (dechiyot)

🎯

Next Zman Countdown

Name, clock time, and live countdown to the next upcoming zman — updates every second

📊

Period Progress Bar

Shows how far into the current halachic period you are (e.g., 40% through Hanetz → Shema window)

🔄

GRA / MGA Toggle

Switch between GRA (sunrise-based) and MGA (Alot72-based) shaot via Garmin Connect settings

📍

GPS + Custom Location

Auto-updates from GPS if available; falls back to lat/lon set in Garmin Connect (default: Jerusalem)

🌍

Any Timezone

UTC offset derived by diffing local vs UTC clock — avoids Garmin's timeZoneOffset API quirks on some firmware versions

Accuracy Analysis vs Hebcal API

Jerusalem · 18–19 Sivan 5786 (Jun 18–19, 2026) · GRA opinion · UTC+3

The watchface SolarCalc is compared against the authoritative Hebcal API using the same NOAA algorithm and KosherJava-compatible degree-based twilight angles.

ZmanimFace accuracy analysis vs Hebcal API — all zmanim within 0.8 minutes
Zman Derivation Watch Hebcal Δ (min)
Alot HaShachar 16.1° below horizon (degree-based, season-correct) 04:06 04:06 -0.0m
Misheyakir 11.5° below horizon 04:34 04:34 +0.1m
Hanetz HaChama Sunrise (zenith 90.833°, standard refraction) 05:34 05:34 -0.3m
Sof Zman Shema (GRA) 3 shaot after sunrise 09:07 09:07 +0.1m
Sof Zman Tefillah (GRA) 4 shaot after sunrise 10:18 10:18 +0.2m
Chatzot Solar noon 12:40 12:41 -0.6m
Mincha Gedola 6.5 shaot after sunrise 13:16 13:16 0.0m
Mincha Ketana 9.5 shaot after sunrise 16:49 16:49 +0.3m
Plag HaMincha 10.75 shaot after sunrise 18:18 18:18 +0.2m
Shekia Sunset 19:47 19:47 +0.1m
Tzet Kochavim 42 minutes after sunset 20:29 20:29 +0.1m
Shaah Zmanit (GRA) 71.1 min

Maximum deviation: 0.8 min (Chatzot). All other zmanim within ±0.4 minutes.

Source Code

Written in Monkey C (Garmin Connect IQ SDK 3.4.4). Targets device ID instinct2 (part 006-B3888-00). No external libraries — pure algorithmic implementation.

ZmanimFaceView.mc 477 lines

Main watchface view — day-arc layout, next-zman panel, progress bar, shaah circle

SolarCalc.mc 187 lines

NOAA solar position algorithm — sunrise/sunset + all zmanim derivations

HebrewCal.mc 140 lines

Hebrew calendar converter (Hillel II / Metonic cycle, full postponement rules)

ZmanimFaceApp.mc 21 lines

Connect IQ AppBase entry point

SolarCalc Algorithm Highlights

// SolarCalc.mc — key algorithm notes
// Julian Day Number — Jean Meeus §7, INT-before-sum floor rule
// Equation of Time — eqT via tan(ε/2)² series expansion
// Sunrise/Sunset — zenith 90.833° (standard refraction + solar disc)
// Alot HaShachar — 16.1° below horizon (matches KosherJava/Hebcal default)
// Misheyakir — 11.5° below horizon (degree-based, season/latitude-correct)
// GRA shaot zmanit — (sunset − sunrise) / 12
// MGA shaot zmanit — (Tzet72 − Alot72) / 12, Tzet72 = sunset + 1.2h
// UTC offset — diffing local vs UTC clock (avoids timeZoneOffset API bugs)
// Accuracy: all 11 zmanim within ±0.8 min of Hebcal API for Jerusalem

HebrewCal — Hillel II Calendar

// HebrewCal.mc — calendar arithmetic
// Epoch: 1 Tishri Year 1 AM = Julian Day 347,998
// Molad: 29d 12h 793 chalakim cycle
// Dechiyot: all 4 postponement rules (Lo ADU Rosh, etc.)
// Leap years: 7 in 19-year Metonic cycle (3,6,8,11,14,17,19)
// Month lengths: Cheshvan/Kislev vary per year-type
// Months: Nissan(1)…Elul(6), Tishri(7)…Adar(12/13 in leap)

Building & Installing

1

Install SDK Manager

Download Garmin Connect IQ SDK Manager from developer.garmin.com, install to /Applications/SdkManager.app

2

Download SDK

Open SDK Manager → Download latest SDK (tested on CIQ 7.x). Installs to ~/Library/Application Support/Garmin/ConnectIQ/Sdks/

3

Generate developer key

Run: openssl genrsa -out developer_key.pem 4096 && openssl pkcs8 -topk8 -inform PEM -outform DER -in developer_key.pem -out developer_key.der -passout pass:yourpassword

4

Build

Run: ./build.sh yourpassword — outputs ZmanimFace.prg for sideloading

5

Sideload

Connect Instinct 2 via USB, copy ZmanimFace.prg to GARMIN/APPS/ on the device, then set it as the active watchface