Install · Privacy · Languages · Development · Support
One live reading, its context, and room to breathe.
Choose your browser. The store versions replace the new tab page; the online demo runs as an ordinary web page.
Demo settings stay in this browser's local storage. Only the installed extension becomes your new tab page.
Mortality starts with fractional age, ticking in real time. Switch to calendar age, a live next-birthday countdown, days or weeks lived, estimated time left, lifetime progress, or a life-in-weeks view.
- Estimates, not predictions. Remaining-life views condition expected lifespan on your current age, using an explicitly selected World (UN 2023) or United States (SSA 2023) baseline. You can also set a custom life expectancy.
- Personal, not busy. Follow the system light or dark theme, choose a contrast-checked preset, set custom colors, change the numeral style, or add a quiet reflection line beneath the counter.
- Accessible by design. Mortality supports keyboard use and screen readers,
meets WCAG 2.1 AA, and provides a
prefers-reduced-motionpath.
Life in weeks shows lived time, the present week, and what may remain.
Mortality requests only the browser's storage permission. Birth details and
preferences stay in extension-local storage unless you explicitly enable
browser-account sync.
- No Mortality account or app backend. There are no analytics or ads, and the developer cannot access your settings.
- Sync is optional and scoped. One opt-in syncs your theme, counter mode, numeral style, reflection setting, and language. A second can also sync your birth date and time, birth time zone, sex at birth, and selected life-expectancy source or custom years through your browser vendor's sync service.
- You keep control. The privacy policy explains data controls, export and import, and how to remove synced data.
Mortality follows the browser or operating-system locale by default and falls back to English. You can choose another language during setup or under Settings → Display. It ships all 55 Chrome-supported extension locales.
View all 55 locale codes
ar, am, bg, bn,
ca, cs, da, de,
el, en, en_AU, en_GB,
en_US, es, es_419, et,
fa, fi, fil, fr,
gu, he, hi, hr,
hu, id, it, ja,
kn, ko, lt, lv,
ml, mr, ms, nl,
no, pl, pt_BR, pt_PT,
ro, ru, sk, sl,
sr, sv, sw, ta,
te, th, tr, uk,
vi, zh_CN, and zh_TW.
The shipped extension has no build step and no runtime dependencies. The
files in src/ are the extension; npm tooling is for development only,
and npm run zip packages only src/.
Install the development dependencies once, then start the local preview:
npm install
npm run devIn the Copilot app, Run does the same thing and opens the preview in the
integrated browser. It starts at http://127.0.0.1:4173/, chooses the next
available port when needed, and uses the same local-storage fallback as an
ordinary HTTP preview.
Use a real browser to test new-tab behavior:
- Chrome / Edge: open
chrome://extensions, enable Developer mode, select Load unpacked, and choose thesrc/folder. - Firefox: open
about:debugging→ This Firefox → Load Temporary Add-on and choosesrc/manifest.json.
Edit a file, then reload the extension to see the change.
| Task | Command |
|---|---|
| Check formatting | npm run format:check |
| Run the Vitest suite | npm test |
| Re-run tests on change | npm run test:watch |
| Generate a coverage report | npm run test:coverage |
| Run the Chromium smoke test | npm run test:chromium |
| Package the extension | npm run zip |
Vitest runs against jsdom, covering storage and theming, view renderers, and the full setup → counter → settings flow. Before the real-browser smoke test, install Playwright's pinned Chromium once:
npx playwright install chromium
npm run test:chromiumPackaging produces artifacts/mortality-v<version>.zip, with the version read
from src/manifest.json. CI checks formatting, Vitest, the Chromium extension
smoke test, and packaging on every pull request through the
ci workflow.
Pushing a v* tag runs the release workflow.
It reuses the CI gate, packages the extension once, publishes a GitHub Release,
and submits that exact asset to the Chrome, Edge, and Firefox stores using
scoped store API keys held in repository secrets, never an interactive store
login.
Manual or subset publishes use
publish-stores. Setup, required
secrets, and manual runs are documented in the
publish-to-stores skill.
For bugs, questions, or privacy support, open an issue in the public Mortality support tracker. Issues are public, so do not include your birthday or other personal information.
Mortality is available under the MIT License © alphabt.




