macOS release status · Microsoft Store (Windows) · Install on macOS · Uninstall · Code signing policy · Privacy policy
QuakeSignal presents public JMA earthquake information in focused native apps for iPhone, iPad, Apple Watch, Apple TV, Apple Vision Pro, and Mac Catalyst, plus separate Chrome and Windows clients.
Real iOS Simulator captures from the same SwiftUI build in English, Japanese, and Simplified Chinese.
Important
QuakeSignal is an independent, non-official app. Apple build 1.1 presents JMA-issued information relayed through Wolfx and may be delayed, incomplete, revised, or inaccurate. Always follow official announcements and local emergency instructions.
| Capability | Details | |
|---|---|---|
| 📡 | Live earthquake data | The submitted Apple release uses only the Wolfx jma_eew and jma_eqlist routes and presents JMA-issued information. |
| 📍 | Nearby context | Frames events by a selected city or current location, with distance, direction, radius, and magnitude controls. |
| Clear alert states | Separates preliminary, updated, final, cancelled, and training messages so color is never the only signal. | |
| 🔔 | iPhone/iPad background delivery | Uses APNs for optional notifications when the iPhone or iPad app is backgrounded, locked, or terminated. Watch, TV, Vision, and Mac Catalyst remain foreground-only. |
| 🖥️ | Native Mac app | Shares the SwiftUI Apple app, map, alert policy, and settings in a sandboxed Mac Catalyst target. |
| 🪟 | Local-first Windows app | The separate Tauri client connects directly to upstream WebSockets, stores data locally, and can sound a native alarm from the tray. |
| 🌐 | Chrome extension | Monitors the same direct feeds from Chrome, stores history locally, and supports browser notifications and an optional alarm sound. |
| 🗺️ | Explore events | Includes a filterable list, epicenter map, event detail, and report-revision timeline. |
| 🧰 | Offline preparedness | Provides drop-cover-hold-on guidance, situation-specific actions, an emergency checklist, and family check-in notes. |
| ♿ | Accessible by design | Supports Dynamic Type, VoiceOver-friendly labels, 44pt targets, system appearance, and high-contrast status treatments. |
The interface uses calm blue for normal information, escalating orange and red for severity, and a deliberately distinct purple treatment for drills. The complete specification lives in this repository at docs/DESIGN_PROMPT.md.
| Normal | Caution | Warning | Training |
|---|---|---|---|
#30B14F |
#FF9500 |
#FF3B30 |
#8E5BE0 |
| No significant nearby event | Recent nearby activity | Active protective action | Clearly marked test content |
Those notes cover tokens, components, onboarding, empty and error states, dark mode, and localized screen copy.
The submitted SwiftUI Apple apps read only the JMA EEW and earthquake-report routes directly from Wolfx. Cloudflare watches that same two-route inventory only to deliver matching APNs notifications while iPhone or iPad is backgrounded or terminated. The separately maintained Windows and Chrome clients are outside this Apple build-8 release boundary.
flowchart LR
subgraph Sources["Wolfx Open API"]
JMA["JMA EEW + earthquake reports"]
Other["Other optional routes<br/>outside the Apple build-8 scope"]
end
subgraph Edge["Cloudflare free-tier backend"]
Watcher["Durable Object<br/>notification watcher"]
Filter["Deduplicate · filter<br/>notification rules"]
DB[("D1 subscriptions")]
end
subgraph App["QuakeSignal · SwiftUI Apple apps"]
Foreground["Direct HTTP history<br/>+ direct WebSockets"]
Background["APNs notifications"]
Guide["Offline safety guide"]
end
subgraph Desktop["QuakeSignal · Tauri Windows client"]
Direct["Direct WebSockets"]
Local[("Local SQLite")]
NativeAlarm["Native alarm + notification"]
end
subgraph Chrome["QuakeSignal · Chrome extension"]
BrowserDirect["Direct WebSockets"]
BrowserLocal[("Local browser storage")]
BrowserAlarm["Notification + alarm"]
end
JMA --> Foreground
JMA --> Watcher --> Filter
DB --> Filter --> Background
Guide --- App
JMA -. separate client .-> Direct --> Local
Other -. separate client .-> Direct
Direct --> NativeAlarm
JMA -. separate client .-> BrowserDirect --> BrowserLocal
Other -. separate client .-> BrowserDirect
BrowserDirect --> BrowserAlarm
docs/FEATURES.md— cross-platform feature matrix and backend responsibilitiesios/— shared native SwiftUI app for iPhone, iPad, Watch, TV, Vision Pro, and Mac Catalyst, built with Swift 6desktop/— separately maintained Tauri client used for Windows; it is not the Mac App Store product for build 8extension/— Manifest V3 Chrome extension with direct feeds, local history, browser notifications, and alarm soundassets/app-icon.svg— resolution-independent source for the design artifact's Epicenter ripples app iconbackend/cloudflare/— notification-only Worker, Durable Object watcher, D1 migration, APNs delivery, and smoke testbackend/— local Node.js notification-pipeline development toolsdocs/WOLFX_API.md— field-level upstream data reference verified against live responsesdocs/DESIGN_PROMPT.md— product and visual design specification
The supported Mac storefront route for version 1.1 is the sandboxed SwiftUI Mac Catalyst app on the shared QuakeSignal App Store record. It is not public until the signed build-8 archive, current screenshots, physical Mac QA, and App Review gates pass. Once released, install it only from the Mac App Store.
The old Tauri v0.1.0 GitHub release, direct-download DMG plan, and Homebrew
cask are dormant and are not supported Mac installation routes for this
release. Do not bypass Gatekeeper to install them.
Download QuakeSignal from the Microsoft Store. The Store package is certified and signed by Microsoft. Availability depends on the market where the Store listing has been released.
QuakeSignal installs only into its own application location and its own data directory. Removing both leaves nothing behind.
Either use the standard uninstaller — Settings → Apps → Installed apps →
QuakeSignal → Uninstall — or run the uninstaller that ships inside the
install folder. Both the .exe and .msi packages register one.
To also remove stored settings and event history, delete:
%APPDATA%\com.quakesignal.desktop\
Remove the Mac App Store app through Launchpad or move QuakeSignal from
Applications to the Trash. Its sandbox belongs to bundle ID
com.quakesignal.app; remove ~/Library/Containers/com.quakesignal.app/ only
if you also intend to erase its settings and local state.
Open ios/QuakeSignal.xcodeproj in Xcode, choose an
iPhone, iPad, or Mac Catalyst destination, and run the QuakeSignal scheme.
Earthquake history and foreground updates go straight to Wolfx. The app uses
Cloudflare only to register for notifications. A Release build uses the
user-approved public Worker endpoint
https://quakesignal-api.hopeso.workers.dev; a Debug build must use a
different isolated staging Worker instead. Debug defaults to the non-routable
https://quakesignal-staging.invalid until its owner copies
ios/QuakeSignal/Supporting/Debug.local.xcconfig.example to the ignored
Debug.local.xcconfig and supplies that Worker URL. CI can instead pass
QUAKESIGNAL_API_BASE_URL=<isolated-staging-url> to xcodebuild; neither route changes
checked-in source. The staging URL must be the protected, isolated
https://*.workers.dev Worker described in
docs/CLOUDFLARE_PRODUCTION.md,
never the approved production hostname. Push notifications require a physical
device, an Apple Developer team, and staging APNs credentials.
The Tauri client remains for Windows development and is not the build-8 Mac App Store route. It connects directly to Wolfx and does not require either backend:
cd desktop
npm ci
npm run tauri devUse Settings → Test Alarm & Notification to verify native sound and notification permissions on the current computer.
cd backend
npm run typecheck
npm run build
cd cloudflare
npm run check
# Verify the user-approved production Worker endpoint.
npm run test:remote -- https://quakesignal-api.hopeso.workers.dev
cd ../../desktop
npm run build
cargo test --locked --manifest-path src-tauri/Cargo.toml
cd ../extension
npm test
npm run packageThe remote smoke test checks service metadata, device-registration validation, and verifies that public earthquake history/detail/live-relay endpoints stay disabled.
Before a public Apple-platform release:
- Verify the user-approved production Worker endpoint
https://quakesignal-api.hopeso.workers.dev, its public Cloudflare TLS, and the service metadata at/. A differentworkers.devhostname is only for isolated Debug/staging service and must not be used as a Release fallback. - Confirm the registered
com.quakesignal.appand Watch App IDs and their reviewed capabilities. The 2026-08-22 account audit found no configured Xcode Cloud workflow, and this release forbids local Xcode, so use the protected GitHub build-8 workflows with the five reviewed distribution profiles. Pin every signing run to the frozen full source SHA and verify its machine-readable signed-artifact attestation before TestFlight QA. - Keep Debug and Simulator clients on a separate staging Worker with no shared
production data or credentials. Provision it through the protected
cloudflare-stagingenvironment, then complete physical-device APNs/App Attest, registration/deletion and token-refresh tests, then TestFlight APNs testing against the approved production endpoint before reviewer approval. The first protected production Worker deployment uses the explicit TestFlight-bootstrap phase with the App Attest approval variable set tofalse; after the physical proof, a reviewer promotes it totrueand re-runs the protected launch phase before public App Review.
The user-approved production notification origin is
quakesignal-api.hopeso.workers.dev.
It is a separate opt-in alert-delivery service:
- Workers provides device registration, removal, test-alert, legal, and service-metadata endpoints.
- A Durable Object maintains the two reviewed JMA watcher sockets solely to detect push-worthy events.
- D1 stores notification subscriptions and internal deduplication state.
- Cloudflare Queues bounds APNs fan-out, retries transient delivery failures, and retains failed work for operator review.
- APNs uses token-based authentication stored as encrypted Worker secrets.
- Production device mutations use Apple's App Attest. Debug/Simulator testing uses a separate staging Worker; its development bypass is never enabled in production.
- A one-minute alarm reseeds HTTP data and repairs disconnected upstream sockets.
The service deliberately returns 410 Gone for /v1/quakes/* and /v1/live; application data belongs on the direct client-to-Wolfx path.
The approved Worker hostname is live and uses Cloudflare's publicly trusted
TLS certificate. APNs credentials and physical-device App Attest verification
remain release prerequisites. The iOS client does not use a private CA or
mutual TLS. A different workers.dev host is never a production fallback.
Normal production deployment is only through the protected Cloudflare Worker
→ Run workflow → deploy_production job on main, which applies migrations,
deploys, and smoke-tests the approved Worker plus its App Store legal URLs. The
one-time TestFlight bootstrap uses the same guarded workflow and is not a
public-launch approval. Deployment, TLS, APNs, and production-monitoring
requirements are documented in
backend/README.md and
docs/CLOUDFLARE_PRODUCTION.md.
Every user-facing flow is localized in:
- English (
en) - Japanese (
ja) - Simplified Chinese (
zh-Hans)
Push notification text is localized on-device with APNs loc-key values, so a single event can be delivered in each user’s chosen language without storing translated notification copy on the server.
- QuakeSignal is independent from JMA, Wolfx, and government emergency agencies. The Apple release formats and presents JMA-issued information; it is not an official warning or forecast service.
- Mobile push delivery is best-effort and depends on the upstream provider, network, Cloudflare, APNs, iOS settings, Focus modes, and device state.
- Magnitude and epicentral-distance settings are delivery filters only. QuakeSignal does not calculate a local-intensity or ground-motion-arrival forecast.
- Critical Alerts require a separate entitlement granted by Apple. Without it, QuakeSignal uses standard or time-sensitive notifications.
QuakeSignal's code signing policy — what is signed, how releases are built, and
who may approve a signature — is documented in
docs/SIGNING.md. Privacy is documented separately in
docs/PRIVACY.md.
Windows releases are built as MSIX packages by GitHub Actions and distributed through Microsoft Store. Microsoft signs the certified Store package; no Windows signing key or third-party signing service is used by this project.
The Mac App Store product is the sandboxed SwiftUI Mac Catalyst target built and signed with the coordinated native Apple release. The older Tauri Mac record and direct-download plan remain dormant for version 1.1.
QuakeSignal is available under the MIT License.