A Persian calendar for Chrome that never touches the network
Taqvim is a Persian (Jalali) calendar extension for Chrome, built and published on the Chrome Web Store in 2026. Everything it needs ships inside the package: the holiday data, the fonts and the conversion math.
- On the Chrome Web Store
- Chrome, Manifest V3
- Published 2026
- No network requests
What it does
A month grid, a converter and a Tehran clock
The month grid shows Persian dates first, with Gregorian dates as secondary labels and Hijri dates as an option. Holidays are marked on the grid, and the details of the selected day sit beside it. A second tab converts a date from any of Jalali, Gregorian or Hijri into the other two. A card shows the current time and date in Tehran. The toolbar badge shows the local day and is refreshed by a midnight alarm. The interface is mostly in Persian and reads right to left.
The data
Bundled holidays, and a fallback for other years
The holiday data ships inside the extension. For Solar Hijri year 1405 it carries the official calendar published by the Calendar Council of the Institute of Geophysics, University of Tehran, so the holidays for that year are the announced ones.
For any other year there is no verified calendar in the package, so the extension falls back to recurring fixed dates and to Hijri dates it calculates. Calculated lunar dates can differ from the official moon-sighting announcements. Adding the next year means adding the next official calendar.
Privacy
Nothing leaves the browser
A calendar has no reason to know who you are or to call out to a server, so this one does neither.
-
No network requests
Holiday data and fonts are bundled. The extension makes no runtime requests, and it has no account.
-
Two permissions
It asks for storage to keep its settings and alarms to refresh the badge at midnight, and nothing else.
-
Scripts from itself only
The content security policy allows only the extension's own scripts, styles and fonts.
-
Checked by the tests
A test fails the build if a stylesheet or the security policy ever points at a server, so a later change cannot quietly load styles or scripts from one.
Quality
Tests on every push, and a release built from an allowlist
A smoke test checks the holiday data, the manifest, the icons and the syntax of the scripts. The unit tests cover the calendar math, the holiday matching, the settings and the formatting. GitHub Actions runs all of it, and the packaging, on every push and pull request.
The release zip is built from an explicit allowlist of files, so development scripts, tests and repository metadata cannot end up in what the Web Store serves.
The build
Plain JavaScript, no bundler
Taqvim is a Manifest V3 extension written in plain JavaScript ES modules, with no bundler and no dependencies. Chrome loads the modules directly, so what runs is what was written. The popup, the options page and the background service worker share one set of modules for the calendar math, the holiday matching and the settings.
- Stack
- JavaScript ES modules, Chrome Manifest V3, node:test, GitHub Actions
- Permissions
- storage, alarms
Next
The other project
The other thing I run outside work is the set of scheduled jobs behind a bakery's website, where an LLM drafts and a person approves. Both are on the work page, and my resume has the rest.