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.

YureWatch desktop view: recent earthquakes plotted on a dark map of Japan with a list panel
Live earthquake feed Recent events plotted by epicentre, sized and coloured by observed intensity.
YureWatch desktop view showing an Earthquake Early Warning banner from a simulated demo scenario, with predicted intensity and warning areas
Earthquake Early Warning (警報) · simulation Warning state with predicted maximum intensity and the areas named by the bulletin.
YureWatch desktop view with the JMA tsunami forecast region layer highlighted along the coast, from a simulated demo scenario
Tsunami forecast regions · simulation JMA 津波予報区 shaded by grade when a bulletin names them.
YureWatch desktop view showing a cancelled Earthquake Early Warning from a simulated demo scenario, visually distinct from an active warning
Cancelled warning · simulation A cancellation is a distinct, clearly labelled state, never quietly blended into "no warning".
YureWatch desktop view: event detail panel showing origin time, issue time, receive time, depth and magnitude
Event detail Origin time, bulletin issue time and local receive time are shown separately. They are not the same clock.
YureWatch desktop view: the map legend explaining intensity colours, epicentre markers and tsunami grades
Legend Intensity colour ramp, epicentre markers and tsunami grade key, all labelled in the active language.
YureWatch desktop view: diagnostics panel showing connection state, freshness, rejected records and source status
Diagnostics Connection state, data freshness, rejected records and the endpoint in use. The app tells you when it cannot vouch for what it is showing.
YureWatch mobile portrait view: map of Japan with the recent earthquake list beneath it
Mobile layout Map-first on a phone, with the event list in a bottom sheet.
YureWatch mobile portrait view showing an Earthquake Early Warning banner from a simulated demo scenario, above the map
EEW on a phone · simulation The warning banner compacts on short viewports without pushing the map off-screen.
YureWatch desktop view with the interface switched to English
English interface Japanese is the default; English is a complete translation, not a partial one.

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.

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

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

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

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

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

Data sources and their terms
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 /history every 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.