Japan · Earthquake · EEW · Tsunami
YureWatch
YureWatch puts Japan's earthquake information on a map: recent 地震情報, Earthquake Early Warnings (緊急地震速報) and tsunami forecasts (津波予報), as published by the Japan Meteorological Agency and relayed by P2P地震情報. Japanese by default, English if you want it. It is deliberately blunt about the gaps. If the feed has not said something, the screen shows --- instead of a confident-looking guess.
Download the Android APKRelease history on GitHub
The whole viewer is one self-contained HTML file (about 700 KB). It runs in a browser tab on desktop or a phone, or inside the Android app, with no account and no analytics. Current stable APK is 0.4.0; 0.5.4 is out as a pre-release (see the release history further down for why it is labelled that way).
What this is, and what it is not
The short version: JMA does the science, P2P地震情報 relays it, and this page's app draws it on a map. YureWatch adds no measurements of its own. Where it cannot know something (a depth the bulletin left blank, a feed that has gone quiet), it says so on screen rather than smoothing it over. That habit is the main design decision in the whole project, and it is also why the app will sometimes look less certain than other viewers. It is less certain. So are they.
Informational only, not a safety device
YureWatch is a viewer. It displays earthquake and warning information published by the Japan Meteorological Agency (気象庁) and relayed by P2P地震情報. It does not predict earthquakes, it does not detect earthquakes independently, and it cannot guarantee that a warning reaches you before shaking starts.
- EEW estimates carry error and are revised; false alarms occur.
- 予報 (forecast) and 警報 (warning) are different things, and the app labels them differently.
- Communication delays and outages mean information may not arrive at all.
- For anything that matters, follow 気象庁の発表 and the instructions of your local authorities.
Screenshots
These are captures of the actual viewer (desktop at 1440×900, phone at 390×844), taken by the project's own QA scripts against the same build the button above opens. Nothing was mocked up in an image editor. The warning shots come from the app's built-in demo scenarios, because a real 警報 does not arrive on request; simulated data always carries the SIMULATION banner in-frame, as it does here.
What it actually does
One codebase, one build. The same file is the Android app's screen and this site's viewer, which is why the screenshots above and the app cannot quietly drift apart.
-
Earthquake information
JMA bulletins arrive in stages: 震度速報 first, then 震源情報, then 各地の震度. YureWatch merges those revisions into a single event instead of listing the same earthquake three times. Restart the app offline and it restores up to 30 recent events from local storage, labelled 保存済みの履歴 (saved history), never dressed up as live data. EEW and tsunami state is not stored at all, so yesterday's warning cannot reappear as if it were new.
-
Earthquake Early Warning
A compact monitor window sits at the top-right of the map, in the style of dedicated seismic monitors: state (警報 / 予報 / 更新 / 取消), the earliest arrival time the source actually published (with a countdown), predicted maximum intensity, epicentre, magnitude and depth. A new event moves the camera once; the following serials do not, because nobody needs their map yanked around every few seconds. 訓練 (test) bulletins are badged, never make a sound, and never move the camera.
-
Tsunami bulletins
When a bulletin names forecast regions, the map shades those 津波予報区 by grade (大津波警報 down to 若干の海面変動). When no bulletin exists, the map shows nothing and the window shows ---. There are no estimated wave heights anywhere in the app, because the feed does not provide observed heights and guessing would be worse than blank space.
-
The map itself
A hand-rolled canvas renderer, not a tile library: pan, zoom and the EEW pulse hold 60 fps in the project's own benchmark, so nothing fancier was warranted. The coastline starts from Natural Earth, whose 1:10m data quietly drops inhabited islands in the Sakishima chain; a 16-island fill from 国土数値情報 (MLIT) puts Ishigaki, Iriomote, Yonaguni and Hateruma back, and the QA suite probes each of them by name so they cannot vanish in a refactor.
-
Diagnostics, and saying "I don't know"
The info panel shows the plumbing: connection state, last successful fetch, rejected records, duplicates dropped. The feed is polled every 20 seconds when quiet and every 6 seconds during an alert, well inside the provider's published limits. A telegram with no usable timestamp is treated as historical, never as breaking news. Stale is labelled stale, offline is labelled offline, and an unknown depth renders as --- rather than a very precise-looking 0 km.
Japanese and English
Japanese is the default because the source material is Japanese; the English translation is complete, and a parity test fails the build if a message exists in one language but not the other. Clock times are always JST, whatever the device thinks its timezone is. Spoken announcements use the device's own TTS voices and tell you plainly when no suitable voice is installed, instead of reading Japanese aloud in the wrong voice.
Data sources, attribution and licensing
YureWatch adds no data of its own. Everything shown is attributed below.
| What | Source | Terms |
|---|---|---|
| Earthquake / EEW / tsunami information | 気象庁 (JMA), relayed via P2P地震情報 JSON API v2 | Free for commercial and non-commercial use; API terms apply. JMA content is used under the Japanese government standard terms (public-data licence, attribution). No warranty; accuracy is not guaranteed. |
| Basemap geometry | Natural Earth 1:10m, plus a 16-island gap fill from 国土数値情報 (N03, MLIT) | Natural Earth: public domain. N03: 公共データ利用規約 1.0; attribution required (出典:国土数値情報(行政区域)を加工して作成). |
| Tsunami forecast regions | 気象庁 予報区等GISデータ | 公共データ利用規約 1.0; attribution and a modification statement required (出典:気象庁ホームページ「予報区等GISデータ(津波予報区)」を加工して作成). |
| Application code | franzathome2024-hue/yurewatch | MIT. See LICENSE and THIRD_PARTY_NOTICES.md. |
Unaffiliated. This project is not affiliated with, endorsed by, or connected to the Japan Meteorological Agency, NIED, or P2P地震情報.
Known limitations
Stated plainly rather than hidden.
-
Polling, not push
Data is fetched from
/historyevery 6–20 s, so a warning can arrive later than it would over the provider's WebSocket. -
警報 only for EEW
The public relay forwards 緊急地震速報(警報); lower-grade 予報 content is not distributed through it.
-
What the feed cannot give you
Only 津波予報 (forecasts) are shown, never observed wave heights; and station-level 震度 comes from JMA bulletins, not the NIED real-time intensity feed.
-
Third-party relay
P2P地震情報 is an unpaid, unwarranted service with no availability guarantee. If it is down, YureWatch says so instead of showing stale data as current.
-
Browser speech depends on the platform
Voice announcements need a system TTS voice for the active language; the viewer reports honestly when none is installed.
Release history, briefly
Most of this shipped in one long burst on 22 October 2026, so the version numbers moved faster than the calendar did. The full changelog, including the unflattering parts, is in the repository.
- 0.1.022 Oct 2026 First functional release: canvas map of Japan, the P2P地震情報 feed, the EEW state machine, tsunami panel, nine scripted demo situations, and an installable APK.
- 0.2.122 Oct 2026 Spoken alerts with a written-down announcement policy, the real tsunami forecast-region layer, and a coastline audit that recorded what the geometry can and cannot do (the Sakishima island fill came out of that).
- 0.4.022 Oct 2026 The current stable release. Its APK checksum was published and then verified the slow way, by downloading the release asset and hashing it again. It was also, in hindsight, signed with a throwaway CI key; see the next entries.
- 0.5.022 Oct 2026 The EEW monitor window and camera framing, explicit sound and voice test buttons, and the collapsible sidebar. Published as a pre-release, because the project signing key does not exist yet and a mislabelled "stable" APK would strand anyone who installed it.
- 0.5.423 Oct 2026 Follow-up on the same design pass: the simulation banner and badge now carry black-and-white drill-placard hatching instead of a flat fill, so simulated data is recognisable by pattern alone, and the header clock was promoted to the size a data broadcast would give it. The service worker needed no rescue; it already refuses to touch feed traffic. Details in the changelog.
- 0.5.323 Oct 2026 The viewer was redesigned for the person holding it during an earthquake. The intensity colours are now the JMA's own published shindo scheme instead of a palette made up for the app, the chrome went neutral grey so the data carries the colour, and a 警報 now floods the warning window in full red. All ten screenshots above were recaptured from this build.
- 0.5.223 Oct 2026 The viewer's loading screen got a proper introduction, because a site scan of that address only ever saw a near-empty shell. This page was also rebuilt that day, in a warm paper-and-serif style that current design guidance already treats as a cliché. The viewer was redesigned first because it is the page people open while the floor is moving.
- 0.5.123 Oct 2026 Structured data for this page and the viewer shell, a contact link, and plainer copy, after an automated site-quality scan complained. Two of its six complaints were wrong; the other four were fair.
Build it yourself
Node 20+ and Python 3. No backend to configure, no API key to obtain; the feed is anonymous.
git clone https://github.com/franzathome2024-hue/yurewatch.git
cd yurewatch
npm ci
npm run dev # local dev server
npm test # unit + integration tests
npm run build # single-file bundle -> dist/yurewatch.html
npm run site:build # assemble this website + viewer -> _site/
bash tools/build-apk.sh # Android APK (needs the Android SDK)
The website is this landing page plus dist/yurewatch.html copied to
viewer/index.html. One application, one build, three targets: Android,
web, and this page.