Release Notes
What's new in FitShield.
The full release history, rendered straight from the extension's changelog markdown — one source of truth, never a hand-kept copy.
Fitshield Version: 0.53 (Android Expansion) Latest
Fitshield Version: 0.53 (Android Expansion)
Released 2026-07-02 — view this release on GitHub.
Version 0.53 is a whole new beast. FitShield now supports Android and Firefox (approved on Mozilla)!
The android build required some partial re-architecture of the 0.52 build. FitShield now operates on a platform agnostic engine instead of just blocklist rules, we had this kind of forming in previous releases but now that we are going multiplatform, we need that tooling for portability. The new android build uses the built in android vpn service to expose the hostname SNI and block accordingly. it also identifies app's ID data to block the same 2500+ domains as the extension. everything is still local only.
While having android is Incredibly hype, its not truely at 0.54 level yet. FitShield android works as a preview but still has alot of backend refinement before a play store version can be released. but it still has everything you've come to expect from Usha Corporation.
The new Firefox build is available on: https://addons.mozilla.org/en-US/firefox/addon/fitshield/
List of changes:
Android (detailed):
1. Native app (WebView + Kotlin): the extension's actual web UI runs in a WebView behind a fitshield.* platform abstraction (browser-shim.js / android-shim.js) — dashboard, stats, recipes, currency, themes, ambient background, all 83 locales, verbatim. One product, two platforms, zero forks (audit-enforced). 2. Website blocking (TLS-SNI/HTTP-Host connection filter): a local VpnService resets blocked connections and relays everything else untouched. Works with strict Private DNS/NextDNS on; never touches DNS, never decrypts HTTPS, tunnels nothing anywhere. 3. App blocking (opt-in AccessibilityService): opening a blocked food app shows a native pause screen — branding, block reason, category-aware messaging + matched veg/meat recipes, schedule status, stats, 60s reflection timer, temporary unlock, localized buttons, "Learn more" → fitshield.net. Reads only the foreground package name; survives process kills; wins the foreground race against already-running apps. 4. 870 verified app→package mappings (from 33): every ID confirmed against official Google Play listings, never guessed; ~1,712 stay needs_review by design. New additive datasets + generator/validator/porter tooling with determinism and drift checks. 5. Optional hardening, all off by default: overlay permission flow, "extra reliability" keep-alive service, battery-optimization guidance — with live status indicators and plain-language privacy copy. 6. Edge-to-edge One UI styling: transparent status/nav bars over the gradient.
Extension
1. Block page now honors prefers-reduced-motion.
Docs/cleanup
1. docs/ANDROID.md fully reconciled with reality (old DNS-sinkhole framing removed, intentional Android↔extension deviations documented), README updated, dead pre-WebView UI resources deleted.
Next steps:
0.52: above
0.53: full Android support with native application. ongoing refinements to engine and blocklists.
0.54: play store release build (tooling already inside 0.53 just need to finish the paperwork), another data driven release, and cleanup of repo to serperate engine from builds better.
1.0: enough holding off, 1.0 time
Thank you for Choosing FitShield! Peace,
Eesh Garg
FitShield 0.52 — Data expansion, insights & documentation infrastructure
FitShield 0.52 — Data expansion, insights & documentation infrastructure
Released: 2026-06-29
Overview
0.52's mission was better data creates better decisions. Rather than redesign anything, it strengthens the foundation future releases build on: richer personal insights, a more complete backup, validated curated data, and — for the first time — a permanent, version-controlled documentation system for the project's history and direction.
Major features
- Most blocked sites, categories, and countries. Your Stats now shows a
private, on-device breakdown of what you block most: your top sites (e.g. DoorDash, Uber Eats), top food categories (pizza, coffee, chicken …), and top countries. The lists update live as you go and stay hidden until there's something to show. - Still privacy-first. Only aggregate counts of the curated brands you already block are kept — keyed by apex domain, food category, and primary operating country. No URLs, page paths, timestamps, or browsing history are ever stored. The plain blocked-visits counter remains a single integer; this richer breakdown is recorded by a separate, dedicated path so the original privacy guarantee is preserved (and unit-tested). - Most blocked countries counts the primary market. A block counts only the brand's primary (first-listed) operating country, not every country it operates in. This keeps a single block of a global brand (e.g. McDonald's, ~50 markets) from inflating the whole list, and uses only curated brand metadata — never the user's real location. See the design note below. - Category and country names are localized to your display language.
Improvements
- Import / Export is now "Data & Settings." The buttons are renamed to
- Versioned backups. The backup file now records a schema version alongside
- Resets cover the new stats. "Reset recipes & preferences" and the factory
- Fully offline. The Settings "Buy me a coffee" button previously loaded its
- Consistent category names. The country/category picker and the most-blocked
Export Data & Settings / Import Data & Settings to reflect what they've always done: a single file already carries your settings, statistics, dashboard card order, favorites, recipe selections, meal averages, currency preference, custom blocklists, and whitelist (disabled-site keys).
the app version and export timestamp, so future restores can migrate older files reliably.
reset now also clear the most-blocked breakdowns.
image from a third-party server on every open; it is now rendered locally. The extension makes no network requests at all — the donation link only opens when you click it. This matches FitShield's "nothing is uploaded" promise and was confirmed by a release-candidate audit.
stats now share one localized, cleanly title-cased category label (e.g.
fast_casual → "Fast Casual"), so categories read the same everywhere.
Curated data
- Fast-food country coverage expanded from 14 to 56 countries. The
- Aliases added for matching accuracy:
bk.com(Burger King),nandos.com - Specialty metadata enriched for coffee/bakery/dessert/pizza brands so a
- Validated every entry in both datasets: **0 duplicate domains, 0 malformed
- Documented the previously-undocumented
aliasesfield in the dataset schema. - Tightened the schema field docs: country codes are specified as ISO 3166-1
- Bumped both datasets to
_version1.1.
globally dominant brands were badly under-covered (McDonald's listed 5 countries, KFC 4); 27 unmistakably global chains were expanded to their major, publicly-known operating markets — e.g. McDonald's 5 → 50, KFC 4 → 40, Burger King 4 → 30, Starbucks 4 → 30, Subway / Domino's 4 → 21, Pizza Hut 3 → 25. Countries are listed primary market first (the most-blocked-countries heuristic relies on this), and region tags are recomputed from the country list for consistency. No countries were invented — only confident major markets were added.
(Nando's), wingstop.co.uk (Wingstop). Alias integrity is validated (no
duplicates, no collisions with primary domains).
brand's secondary nature is searchable (e.g. Starbucks → coffee, espresso,
tea, pastries, breakfast, sandwiches; Dunkin' / Tim Hortons → coffee, donuts,
bakery, breakfast). Categories remain single-valued for blocking (see design
note); specialties carries the multi-category richness.
country codes, 0 unknown region tags, 0 missing required fields, 0 alias issues** across 2,121 fast-food and 576 delivery entries.
alpha-2, and the region tag set is enumerated (NA, EU, AS, SA, AF, OC, AN).
> Approach: correctness over quantity. The fast-food set was already > comprehensive at the brand level (virtually every well-known chain is present > — In-N-Out, Shake Shack, Panera, Whataburger, Gong Cha, Chatime, etc.), so > the 0.52 pass deepened country coverage and metadata quality on the brands > that needed it rather than bulk-adding entries.
Design notes
- Single category, not multi-category. Brands keep one primary
category - Most blocked countries = primary market. Counting every operating country
(used by the blocking engine and the category picker) plus a searchable
specialties array for everything else. Making category multi-valued would
change blocking behavior (a brand would block under several categories at
once) and the storage/stat shape — that is feature work, deliberately out of
scope for a data-refinement release. The single-primary + specialties model
captures "a coffee shop is also a bakery" without a schema change.
was acceptable when brands listed a few countries, but after the coverage expansion a single global-brand block would have incremented dozens of countries. Switching to the primary (first-listed) market is a strictly local heuristic — it reads only curated metadata and never the user's location or any browsing data — so privacy is preserved while precision improves.
Architectural changes
- New background message
recordBlockedBrandaggregates the local - Stats rendering resolves blocked apex domains to brand labels from the loaded
most-blocked breakdown independently of recordBlockedVisit, keeping the
integer-only visit counter (and its privacy test) untouched.
blocklist and localizes country names with Intl.DisplayNames.
Repository changes
- New
changelog/folder — the canonical, permanent release history, one - New
changelog/ROADMAP.md— living documentation of the - Established markdown as the single source of truth for release history and
- New
tools/validation suite (developer-only, never bundled): dataset, - Build is now validation-gated.
node build.jsruns every audit first and - New
CONTRIBUTING.md— how to add brands, countries,
markdown file per release, plus this index.
current version, next planned work, future ideas, long-term vision, and completed milestones.
roadmap; GitHub Releases and the in-extension What's New are summaries of it.
alias, country, category, locale-parity, documentation, and build-asset
audits behind npm run validate. Each is independently runnable and produces
human-readable output, with a shared ISO-country / region map and an
IDN-aware apex-domain check.
aborts on any error, so broken datasets, locales, docs, or missing assets can
never be packaged. The audits also run under npm test.
categories, recipes, and locales; how to validate, build, and cut a release.
Localization
- Added the new stats labels (Most blocked sites / categories / countries and
- Localized food-category display names. The most blocked categories list
- Internal category identifiers are unchanged; only displayed text is localized,
- Brand names remain untranslated by design.
an empty-state line) and the renamed Data & Settings buttons — translated across all supported display languages (exact key parity with English, enforced by the locale test suite).
now shows a localized, properly title-cased category name. Core food
categories (Burger, Pizza, Chicken, Coffee, Tea, Dessert, Bakery, Sandwich,
Mexican, Asian, Seafood, Smoothie, Korean Food, Fast Casual, Grocery,
Catering, Restaurant) are translated for 28 widely-spoken languages; every
other locale and any niche/infrastructure category falls back to a clean
title-cased English term (e.g. fast_casual → "Fast Casual") via a render
prettifier — never a raw identifier.
through the existing chrome.i18n system (no second localization system).
Browser compatibility
- No changes. Firefox (Gecko ≥ 140; Android ≥ 142) and Chromium (Chrome, Brave,
Edge), Manifest V3.
Licensing changes
- None.
Known issues
- Food-category display names are translated for 28 languages; the remaining
- Fast-food country coverage targets the major global brands; it is intentionally
locales show clean English category terms (via the prettifier) pending native translation. UI strings (stats labels, Data & Settings) are fully translated across all locales.
not exhaustive per brand, and smaller regional chains keep their existing (correct) limited country lists.
FitShield 0.51 — Stats, Firefox & a wider dashboard
FitShield 0.51 — Stats, Firefox & a wider dashboard
Released: 2026-06-27
Overview
0.51 was a milestone release. FitShield gained a private, on-device stats panel, learned to run on Firefox alongside Chromium, got a redesigned and more spacious Settings page, and picked up onboarding, local backup & restore, and a proper extension icon — all while keeping everything local-first.
Major features
- Your Stats (local-only). A private, on-device panel showing blocked
- Currency-aware savings. Money saved is shown in your language's currency
- Recipe choice logging. On the block page, picking a suggested recipe with
- Block-reason explanation. The block page explains exactly why a site was
- Firefox support. FitShield now runs on Firefox and installs cleanly on
- A real extension icon.
visits, estimated money saved, and calories avoided, with a configurable average meal cost and average meal calories. No browsing history is ever stored.
(₹, ¥, €, $ …), auto-picked from your language with a country-aware default meal cost and calorie estimate, plus a manual currency override.
"I'll make this instead" logs the calories you avoided into your stats.
blocked: the domain, the rule type, the food category, and the countries the brand operates in.
Chromium browsers (Chrome, Brave, Edge) from a single source tree.
Improvements
- Redesigned Settings. Cards reflow into columns on wide screens and stack
- Onboarding & What's New. A first-run welcome tour and an update screen.
- Local Backup & Restore. Export and import settings as a single local JSON
- Living background. Soft color fields drift on their own, vary subtly on
- Reset options with confirmation dialogs (custom-site removal, partial resets,
- Published the Chrome Web Store listing.
cleanly on narrow windows.
file — nothing is uploaded.
each open, gain gentle parallax on scroll, and slowly shift hue; titles and the savings figure carry an animated gradient. Reduced-motion is respected.
and a full factory reset).
Architectural changes
- Single source tree, two packages. Manifest V3 background handling differs
- A small built-in ZIP writer guarantees forward-slash archive paths (Windows'
by engine: Chromium supports only background.service_worker, while Firefox
uses background.scripts (an event page). The committed manifest.json is
the clean Chromium form; build.js derives the Firefox
manifest by adding background.scripts and produces a store-ready zip for
each engine, with no background.scripts manifest warning on either.
Compress-Archive stores backslashes, which breaks extension resource loading
and AMO validation).
Repository changes
- Consolidated branding assets into a
Branding/folder and cleaned up the
repository.
Licensing changes
- Separated the data and branding licenses (
DATA_LICENSE.md,
BRANDING_LICENSE.md) from the GPL-licensed code.
Browser compatibility
- New: Firefox (Gecko ≥ 140; Android ≥ 142) and Chromium (Chrome, Brave,
Edge), Manifest V3.
Localization
- Translated the new 0.51 screens (stats, reset, welcome tour, What's New, block
reasons, recipe choices) across every supported language, and added German as a new display language.
Known issues
- Stats were aggregate totals only; there was no per-site/category/country
breakdown yet (added in 0.52).
FitShield 0.50 — Recipe suggestions & blocking fixes
FitShield 0.50 — Recipe suggestions & blocking fixes
Released: 2026-06-26
Overview
0.50 turned the block screen from a simple stop sign into a helpful nudge, and fixed a serious blocking regression. When you hit a blocked ordering page, the screen now offers a couple of quick home-cooked alternatives — and a data bug that could silently switch all blocking off was tracked down and fixed.
Major features
- Recipe suggestions on the block page. The block screen suggests one
vegetarian and one meat/protein recipe chosen from a local catalog, based on the category of the site you blocked.
Improvements
- The block screen now reliably shows which brand triggered it, so the pause
feels intentional rather than mysterious.
Fixes
- **Fixed an international domain in the blocklist that was silently disabling
- Made the block screen appear dependably.
all blocking.** A single invalid declarativeNetRequest rule makes the
browser reject the entire dynamic-rule batch; one malformed entry therefore
took down blocking everywhere. The offending entry was corrected and the
rule-building path hardened.
Architectural changes
- Recipe selection logic (
recipes.js+data/recipes.json) is shared between
the browser and Node tests, and is deterministic for a given site so the same block always suggests the same pair.
Repository changes
- Added the local recipe catalog under
data/.
Licensing changes
- None.
Browser compatibility
- Chromium-based browsers (Chrome, Brave, Edge), Manifest V3.
Known issues
- Recipe content shipped in English; localization of recipe text is future work.
FitShield 0.49 — Localization
FitShield 0.49 — Localization
Released: 2026-06-25
Overview
0.49 made FitShield speak the user's language. All interface text moved into the standard browser localization system, and the extension gained a large set of display languages with an in-app picker — laying the groundwork every later release builds its UI on.
Major features
- 80+ display languages. A searchable language picker in Settings lets you
- Manual language override. Pin a specific language, or choose *System
choose the language FitShield uses for its own screens (popup, settings, and block screen), independent of your browser language.
default* to follow the browser. The choice persists locally and applies at runtime without a reload.
Improvements
- Consistent, translatable copy across every surface.
- Searchable picker so long language lists stay manageable.
Architectural changes
- Adopted the standard Chrome/Google
chrome.i18nsystem backed by - Markup is localized declaratively via
data-i18n*attributes; scripts use
_locales/<lang>/messages.json, with a lightweight runtime helper
(i18n.js) that supports a manual override locale, an English fallback for
any missing key, and live re-localization when the language changes.
FitShieldI18n.t(key, subs) with positional $1..$9 substitutions.
Repository changes
- Introduced the
_locales/tree as the home for all translatable strings.
Licensing changes
- None.
Browser compatibility
- Chromium-based browsers (Chrome, Brave, Edge), Manifest V3.
Known issues
- New UI strings introduced in later releases rely on the English fallback until
translated across every locale.
Source: the changelog/ folder in the extension repository. See also the roadmap.