TempoLife

TempoLifeFeaturesBrowser extension › firefox

Firefox

Nothing is published on addons.mozilla.org. Here is how the Firefox build would differ from the Chromium one, and a bookmarklet that works in Firefox today.

Not publishedBookmarklet: works todayChecked 2026-09-02

There is no TempoLife browser extension. It is not in the Chrome Web Store, not on addons.mozilla.org, and there is no unpacked build to sideload. Anything you find under that name is not ours. What is on this page is a description of what it would do, and a bookmarklet that does a useful slice of it today.

The bookmarklet in Firefox

Press Ctrl+Shift+B to show the bookmarks toolbar and drag the button onto it. Firefox has kept bookmarklets working more consistently than most browsers, and it lets you edit the bookmark afterwards to read exactly what you installed — worth doing with any bookmarklet, including this one.

TempoLife food lookup

Drag that button to your bookmarks bar. Do not click it here. This page sends a strict Content-Security-Policy that forbids inline script, so a click on this site is blocked by design — which is also a small demonstration that the page is not running it for you. Once the link lives in your bookmarks bar it runs against whatever page you are on instead.

What it does, in order

  1. Reads the text you have selected on the current page. Nothing else on the page is read.
  2. If you selected nothing, it asks you what to look up, pre-filled with an example.
  3. Collapses whitespace, trims, and cuts anything over 160 characters — the limit /api/answer enforces, so a long selection returns an answer instead of an error.
  4. Opens https://tempolife.app/api/answer?q=… in a new tab with noopener, so the new tab cannot reach back into the page you came from.

The source, in full

Read it before you install it. That is the point of a bookmarklet: it is small enough that you can.

javascript:(function () {
  var q = '';
  try {
    q = String(window.getSelection ? window.getSelection() : '');
  } catch (e) {
    q = '';
  }
  q = q.replace(/\s+/g, ' ').trim();
  if (!q) {
    q = String(window.prompt('Ask TempoLife about a food', 'calories in banana') || '');
    q = q.replace(/\s+/g, ' ').trim();
  }
  if (!q) { return; }
  if (q.length > 160) { q = q.slice(0, 160); }
  window.open('https://tempolife.app/api/answer?q=' + encodeURIComponent(q), '_blank', 'noopener');
})();

There is no fetch, no XMLHttpRequest, no injected <script>, no cookie access, no localStorage, and no code loaded from anywhere. It reads a selection and opens a URL. The minified form in the link above is this and nothing more, percent-encoded so no quote or angle bracket ends up in an HTML attribute.

What it sends, and where

The text you selected is sent to tempolife.app in the URL of the new tab, because that is how a query parameter works. Select a food name, not a private sentence. The endpoint logs are ordinary web-server logs; nothing is attached to an account, because the bookmarklet sends no cookie and needs no sign-in.

Where it will not work

Sites with a strict Content-Security-Policy of their own can block bookmarklets — behaviour varies by browser and has changed more than once. Browser-internal pages such as chrome:// or about: never run one. And on mobile, bookmarks bars mostly do not exist; use the form below instead. When a bookmarklet fails it usually fails silently, so if nothing happens, that is why.

Firefox will not run one on about: pages or on addons.mozilla.org. On a page with a strict Content-Security-Policy the behaviour has changed across releases; if a click does nothing, that is the likely cause.

The same thing without a bookmark

No JavaScript, no extension, no account. It returns raw JSON because it is an API endpoint rather than a page — which is exactly what makes it useful from a script of your own. The developer portal documents the response shape and the 60-per-hour rate limit.

How the Firefox build would differ

Less than you would expect, and the differences are worth naming. Firefox supports Manifest V3 but keeps the blocking request API that Chrome removed — irrelevant here, since a nutrition overlay never inspects network traffic. Firefox uses a persistent background script rather than requiring a service worker, which makes state handling simpler. And its APIs are promise-based under the browser.* namespace, so one thin compatibility shim covers both stores from a single source tree.

The one real divergence is packaging. Firefox requires a signed .xpi and an explicit extension id, and addons.mozilla.org reviews source: for a build step of any complexity you submit the unminified source alongside the package so a human can reproduce it. That is a higher bar than the Chrome Web Store sets, and a good reason to keep the codebase small enough to read.

Permissions it would ask for, and why each one

A recipe overlay needs less access than people assume, and the difference between a well-scoped extension and a badly scoped one is visible in the install prompt. This is the manifest it would ship with.

PermissionWhat it allowsWhy it is needed
activeTabRead the page in the current tab, and only after you click the toolbar button.The overlay has to read the ingredient list. This grant expires when you leave the tab, so it cannot be used to watch you browse.
scriptingInject the overlay script into that tab.Modern extensions cannot draw on a page without it. It is inert without a host grant.
contextMenusAdd one right-click item on selected text.The "look up this ingredient" path. It adds a menu entry and nothing else.
storageStore settings in the browser.Your unit preference and which tips you have dismissed. Local to the browser; never sent anywhere.
Optional host accessRun on a site you explicitly allow.Requested per site, at the moment you first use it there, instead of asking for every site at install time.

What it would deliberately not ask for

If a nutrition extension you are considering asks for access to all sites at install time and does not explain why, that is worth a moment's thought regardless of whose it is.

Firefox on Android

Firefox for Android runs a curated subset of extensions, which is why some desktop favourites are missing there. A recipe overlay is a poor fit for a phone in any case — the panel would cover the recipe. On mobile the honest answer is the form on this page, or the app itself, which already photographs a meal and returns the macros without any of this machinery.

Frequently asked questions

Is a TempoLife add-on on addons.mozilla.org?

No. Nothing is published there.

Can I read the bookmarklet after installing it?

Yes — open the bookmark's properties in the Firefox bookmark manager and the whole program is there. Do that with every bookmarklet you install.

Would the Firefox version be a separate product?

No. It would be one codebase with a thin compatibility shim, submitted to both stores.

Source: TempoLife /api/answer endpoint — live, documented in the developer portal · checked 2026-09-02

Other pages

Chrome and Edge

Status, and what works today.

Not published

Privacy

Status, and what works today.

What it would and would not read

Changelog

Status, and what works today.

No releases yet

Extension overview · The API it would use · Embeddable widgets

The diary is the part that exists

Photograph a meal, get the macros, and watch the week rather than the plate. That is shipping today, in the app.

Create a free accountGet the app