Status: Draft 0.10.3. This is a public draft, not a ratified standard. The normative vocabulary (
vocabulary.json) and the conformance vectors (conformance/vectors.json) may change before 1.0, so implementations should pin an exact version. The DOI above cites this draft, not a final specification.
See it. Feel it. Hear it. One shared rhythm for all. Open rules that make every emergency warning detectable by sight, touch, or hearing alone, with the full warning, including the action, guaranteed in accessible language.
The fire alarm carries exactly one message: get out. In a tsunami, going outside is lethal and the roof is safety; in a tornado, the basement is. Three dangers, three opposite escapes, one bell.
The building often knows which hazard is coming; the alarm has no vocabulary to say it. This standard is that missing vocabulary: a small set of hazard families, each carried by a rhythm the body can learn, so the signal itself says which danger arrived, before a single word is read.
A child feels WATER on a wristband and knows: climb, not run.
These rhythms come from sign languages. Deaf people have carried the shape of danger in our hands for centuries. Now that knowledge can save everyone.
FIRE is ten rapid pulses, like the fingers of the sign for fire flickering
upward. WATER is long soft rolls a breath apart, like the rolling hand of the
signs for waves. GROUND is one unbroken hold, like the sustained-shaking signs
for earthquake. THREAT, TEST and OTHER are deliberately abstract, because a
human threat and a drill have no natural signature to imitate. Mimesis is a
design hypothesis under human testing, and vocabulary.json records it as
one, family by family.
Deaf people have been the crash-test bodies of every warning failure. We would rather be its engineers.
An alert designed for the body that hears nothing reaches every body.
THE-STANDARD.md: the specification (draft 0.10.3)vocabulary.json: the normative, machine-readable rhythm vocabularyconformance/vectors.json: machine-checkable conformance vectors (R1 to R8)conformance/validate.mjs: checks a rendering log against the vectorsSMS-PROFILE.md: informative annex, a five-character code (3S:W4) that lets SMS-based alerting (no cell broadcast, humanitarian settings) drive the vocabulary with one regex, no AI;parseSmsCode()in the SDKCAP-PROFILE.md: informative annex on accessibility at the SOURCE: how an alert originator carries an official FCC ASL template video as a CAP<resource>and Three Senses metadata as namespaced CAP<parameter>blocks; implemented by@ideafe/three-senses/compose(the Three Senses Alert Composer core, developed under a Memorandum of Agreement with FEMA's IPAWS Program Management Office for the IPAWS-OPEN test environment) and thethree-senses compose/templatesCLI commandswea-asl-templates.json: the FCC WEA template / ASL video map, all 18 adopted template texts (DA 25-12 Appendix C) paired with their official FCC ASL videos (coverage is complete: every adopted text has a video). Two demo-era action messages (Evacuation Immediate, Shelter in Place) are carried as annotated stubs: no adopted text, no official video. ⚠ Maps ≤ v0.10.1 carried prose (and ≤ v0.10.0 carried video IDs) derived from the FCC's Feb-2024 DEMO-ONLY set; use v0.10.2+.src/,dist/: the SDK (@ideafe/three-senses), TypeScript, zero dependencies, conformance-proven against the vectors in CI
Published by International Deaf Emergency, a Deaf-led US 501(c)(3) nonprofit. Canonical page: ideafe.org/standard. Reference implementation: Deaflare. As of 2026-08-20, Deaflare renders live federal alerts: it consumes the FEMA IPAWS-OPEN All-Hazards feed (production and the TDL staging lab) alongside the NWS public API, mapping real CAP v1.2 alerts through this vocabulary's hazard families. FEMA lab traffic is rendered under the standard's TEST treatment.
Morse code gave the world one shared rhythm language, and to this day everyone knows SOS. Nobody owns it. That is why it works.
Anyone may implement this standard, free, forever (Apache-2.0 data and code). But a warning language only works if it is the same everywhere, like the siren. So the specification text is BY-ND, the vocabulary is versioned and published only here, and the standard's names identify conformant implementations only. Fork the code all you like; if you change what FIRE feels like, it is not Three Senses anymore.
TypeScript, zero runtime dependencies, works in Node (18+) and browsers.
npm install @ideafe/three-senses
(Installing straight from this repository also works:
npm install github:Signlo/three-senses.)
Timelines, severity, and conformance (Node or browser):
import {
timeline,
cycleMs,
cycleStart,
channelLevel,
vibratePattern,
conformance,
} from "@ideafe/three-senses";
timeline("FIRE"); // { steps: [{at: 0, event: "on"}, ...], totalMs: 4000 }
cycleMs("WATER"); // 6000, the normative repeat interval (R8)
channelLevel("TEST", "Extreme"); // 0.3, a drill is capped, always (R6)
vibratePattern("STORM"); // [500, 1000, 500, 1000, 500]
conformance().pass; // true, this SDK proven against the vectorsPlay an alert in a browser, all channels on one clock:
import { startAlert } from "@ideafe/three-senses/web";
const alert = startAlert("FIRE", {
severity: "Extreme",
onFlash: (on) => beacon.classList.toggle("lit", on), // any light you own
tone: true, // 520 Hz, gated on the same envelope
vibrate: true, // Vibration API where available
});
acknowledgeButton.onclick = () => alert.stop(); // I UNDERSTANDThe renderer callback design is deliberate: the SDK owns the clock and the rhythm; you own the surface, whether a DOM element, a torch, a smart bulb, or a building beacon. Severity only ever changes the level. ALL_CLEAR plays its gentle, self-terminating release cue and never loops.
And a CLI:
npx three-senses list
npx three-senses show FIRE
npx three-senses conformance # proves the SDK against the vectors
Render the vocabulary, log your events as JSON, then:
node conformance/validate.mjs your-render-log.json
An SDK-based implementation can emit that log directly with
renderLog(family); the SDK's own test suite runs exactly this check, plus
negative controls (a wrong rhythm and a trimmed loop both fail).
Rhythm changes are major versions and governance events, never code tweaks. Draft 0.1.0 reflected field testing with the standard's Deaf author. Draft 0.2.0 (the day after) came from the author's repetition review: urgent alerts loop with no pause, and the 0.1.0 patterns fused across the loop boundary (two long waves became one). Every family except GROUND now ends in a trailing quiet (requirement R8). Draft 0.3.0 refined TEST to a quick grouped double tap. Draft 0.4.0 split severity by channel purpose: touch grades in four strengths for DeafBlind reading, marks count the step, and light and sound deliver at full power from the middle tier. Draft 0.9.1, after an external FCC-style audit, reframed the all-clear as an affirmative calmly-presented message (silence is never evidence of safety), split the five questions across attention and language channels, and added originator-suppression, timing-tolerance, amplitude-capability, and CAP-mapping rules, plus a standards adaptation grant. No rhythm changed. Deaf and DeafBlind user studies are beginning and will shape the next draft.
Every release is archived on Zenodo. Cite the concept DOI, which always resolves to the latest version:
Jacq, E. (2026). The Three Senses Alerting Standard. International Deaf Emergency. Zenodo. https://doi.org/10.5281/zenodo.21977982
Citation metadata ships in CITATION.cff; GitHub's "Cite this repository"
button uses it.