traceOn — Privacy Policy
Last updated: 14 October 2026
traceOn is a browser extension that records a performance trace of a web page you choose and turns it into a plain-language diagnosis of what is slow and why.
All analysis happens on your device. traceOn works fully with no account and with no network connection to our servers. The only time anything leaves your machine is when you create a share link (section 2.1), or through the optional features in sections 2.2–2.6, every one of which is off by default and can be turned back off at any time in the extension's Community → Privacy & contribution settings.
We do not sell or rent your data, we do not use it for advertising, and we do not use any third-party analytics or tracking SDKs.
1. Data stored only on your device
The following never leaves your browser (it lives in the extension's own storage — IndexedDB and chrome.storage):
- Recent performance traces (the 10 most recent), so you can reopen a past analysis. A trace holds what the analysis reads, for every page the tab loads while the recording runs (a recording follows you as you browse): the pages' own performance timelines, the URLs of the requests they made, messages they wrote to the console, the response headers of the pages themselves (not of other files), cookie metadata for the recorded site's pages (names and flags — never cookie values), and — for the SEO check, on the first page only — its title, meta tags, headings, link and image URLs, and structured data (the HTML itself is not kept). With Deep trace on, it also holds up to 120 small screenshots of the tab (40 for a short recording), captured through the browser's screencast during the recording, so the Activity replay can show what the page looked like at each moment.
- Run history — a short summary of each of up to 300 recent analyses (page URL, time, scores and metric values), for the Runs view.
- Interaction Watch records — only for a site you choose to watch, and only during a watch session (at most 30 minutes). Each slow interaction records the page path (no query string or fragment), the time, the kind of interaction and how long each phase took, the element's tag, id and first class name, up to 40 characters of its visible label (never the value typed into a form field), and the URLs and function names of the scripts that ran during it. Up to 500 records per site.
- The last result of each performance test (Browser Test, What-If, Compare, Responsive) for the results tab that ran it.
- Your extension settings and preferences.
- A randomly generated device ID (a UUID created locally). It is not derived from your hardware, your browser, or any account, and it is only ever sent to our server if you enable one of the optional features below.
Clearing the extension's storage or reinstalling it generates a new device ID.
One request traceOn makes itself, to the site you analyze. While a recording runs, traceOn requests that site's /robots.txt — the file that says what search engines may crawl — for the SEO check. The request goes to the analyzed site (not to our server), carries no cookies, and happens only for sites you record.
2. Features that send data to our server
Our server is hosted on Cloudflare (Workers, D1, Durable Objects, Vectorize).
2.1 Share links — you create each one
When you click Create share link in a report's Share panel, the extension uploads that report's share summary, the same facts as the downloadable report:
- the analyzed page's address without its query string or fragment, and the paths of other pages the recording visited (also without query strings);
- the capture date, device type, score and Core Web Vitals values;
- the issues found, with their explanations, the responsible file or element names, fix steps and code suggestions.
The recording itself is never uploaded: no trace, screenshots, console output, headers or cookie information. No device ID or account is sent with it. The server returns an unguessable link; anyone who has the link can read the report, so do not create one for a page whose address or findings are confidential. Links stop working after 90 days, and you can delete one sooner from the same Share panel. Search engines are asked not to index these pages.
Sections 2.2–2.6: not available in the current version (0.7.0)
These features are switched off in this release and send nothing; these sections describe how they work once they are enabled in a later version.
2.2 Anonymous "active today" ping — off by default
When enabled, once per calendar day the extension sends your random device ID and the current date (UTC). Nothing else. This powers the daily / weekly / monthly active-user counts shown in the Community tab.
2.3 Anonymized scan contributions — off by default
When enabled, after you run an analysis the extension sends:
- the domain only of the analyzed site (e.g.
example.com) — the full URL, path, query string and fragment are removed, and a leadingwww.is stripped; - the date (UTC);
- the numeric scores from that analysis (performance, security, a count of security flags, responsiveness), each 0–100.
Pages that are not public websites (localhost, bare IP addresses, chrome://, file://, other extensions) contribute nothing. Re-scanning the same domain on the same day replaces your previous entry. This powers the "Most Visited" and "Top Lists" views, and it unlocks rating the extension and posting in Community Q&A.
2.4 Extension ratings — you choose to submit each one
If you rate traceOn, we store your star rating (1–5), any review text you write, and your device ID (so you can change your own rating later).
2.5 Community Q&A — you choose to post
If you post a question or answer, the text you write and the display name you choose are stored and shown publicly in the Community tab. Do not include personal or confidential information in a post. You may optionally sign in with GitHub or Google (see section 3); otherwise a post is tied to your device ID.
2.6 AI assistant — you choose to send each question
When you ask the AI assistant about one of your analyses, the extension sends a compressed, already-computed summary of that analysis:
- Core Web Vitals values (LCP, FCP, TTFB, CLS, INP, TBT) and long-task counts;
- the titles and types of the detected bottlenecks;
- the titles and short summaries of the diagnoses and recommendations;
- the detected framework name, if any;
- the URL and capture time of the analyzed page;
- the questions you type and the assistant's replies.
The raw performance trace is never sent. Requests are processed by Cloudflare Workers AI by default. If you explicitly opt in to the paid Anthropic model, the same summary is processed by Anthropic instead. Providers are used in a mode that does not retain the content for training. Your conversations are stored on our server so you can revisit them, and you can delete any conversation from within the extension.
3. Optional sign-in
Signing in is entirely optional and only affects Community Q&A (it lets you post under a persistent name across devices). We use GitHub's or Google's standard OAuth flow. We receive only a provider user ID and your public display name; we never receive your password, and we do not request access to your email, repositories, contacts, or any other data.
4. Rate limiting
To prevent abuse, when your extension makes a write request to our server we briefly combine your device ID with the request's IP address to form a rate-limit key. This is used transiently to count requests in a short time window and is not stored as a profile or used to identify you. Creating a share link is limited by IP address alone, with no device ID.
5. Permissions
| Permission | Why |
|---|---|
debugger | Capture the DevTools-Protocol performance trace of the tab you select. You start every recording; the browser shows its own "started debugging" banner. |
activeTab, tabs | Identify the tab under analysis, open the results page, reload the page to capture a cold load, and run the Core Web Vitals measurement script on that page. |
cookies | Read cookie metadata (flags and size, never values) for the analyzed site to report cookie security and size issues. |
storage, unlimitedStorage | Cache traces and results locally; large traces exceed the default quota. |
declarativeNetRequestWithHostAccess | A temporary session rule used only while the Responsive Preview pane is open, and only for frames inside that traceOn tab, so your own page can render in the preview iframe. |
alarms | End an Interaction Watch session at its time limit, and schedule the once-daily anonymous ping (which sends nothing unless you enable it). |
nativeMessaging | Optional connection to a separately installed load-testing helper. Unused if the helper is not installed. |
<all_urls> host access | You can analyze or watch any site you choose; that URL is not known in advance. traceOn's page script is present on every page but stays inactive: it collects only in a tab you are recording, and on a site you have chosen to watch, while that watch session runs. The same access lets traceOn read the recorded site's /robots.txt. |
6. Data retention and deletion
- On-device data: only the 10 most recent traces, 300 run summaries and 500 Interaction Watch records per site are kept; older ones are deleted automatically. Clear a site's watch records from its Interaction Watch view, or remove everything by clearing the extension's storage or uninstalling.
- Share links: deleted automatically 90 days after you create them; delete one sooner with Delete link in the report's Share panel.
- AI conversations: delete individually from within the extension.
- Anonymous ping, scan contributions, ratings, Q&A posts: these are tied to a random device ID, not to you. To request deletion of data associated with your device ID, email the address below with that ID (visible in the extension's Community → Privacy settings).
7. Children
traceOn is a developer tool and is not directed to children under 13.
8. Changes to this policy
We will post any changes on this page and update the "Last updated" date above.
9. Contact
Questions or data requests: solomonmuhye12@gmail.com