AddonRay helps Firefox and Chrome users investigate broken or slow pages with an extension inventory, explicit capability limits, and manual troubleshooting guidance.
AddonRay-owned code and documentation use Apache-2.0. NOTICE reserves project branding, and third-party notices preserve upstream terms. Source publication and extension-store distribution are separate owner actions.
The development build provides extension inventory search and filtering, permission explanations, explicit selected-page timing and page-error checks, and one Before/After inventory comparison with your assessment of the page. Optional timing and error summaries can be attached to that investigation. A previewed Markdown report can be downloaded through an explicit action.
Completed investigations can be saved explicitly to this browser profile, listed and reopened read-only in the library, and deleted individually or in confirmed batches. Each new save offers 7, 30 or 90-day retention, defaulting to 30 days. Expiry blocks access and removes records on later storage access; it does not promise immediate physical deletion. Live investigations still lose unsaved observations when their document reloads or closes. Saved archives do not reconnect to the original page. There is no telemetry or cloud sync.
This is development software with remaining qualification gaps, not a completed v1 or a store release. Current status distinguishes implemented behavior from native consent, private-route, quota, platform and release evidence. Privacy records the data and permission boundaries.
The v1 contract includes further report exchange, guided comparisons, mutation and request-failure diagnostics, an optional Rust companion, and release work. Those targets do not imply that every slice is implemented.
The approved builds are Firefox MV3 and Chrome MV3. Intended desktop targets are macOS arm64, Windows x64 and Linux x64; exact OS versions remain a release-planning gate. Other browsers and MV2 remain deferred. Chrome compatibility criteria distinguish repeatable Chrome for Testing checks from retail installation and native usability. Packaged-extension qualification tracks unsigned XPI checks and the Linux/Windows API matrix separately from native-popup usability and signing. mise run package creates the XPI and source ZIP locally; it publishes nothing.
mise install http:bun hk jactionlint shellcheck
mise exec -- bun install --frozen-lockfile
mise run hooks-install
mise run check
mise exec -- bun run devThe project uses a checksum-pinned Bun canary for native formatting, linting, type checking, and tests. mise run fmt formats files; mise run lint checks source. See toolchain setup and rollback for the exact pin and hk hook behavior.
The development task starts Firefox. Alternatively, run mise exec -- bun run build, open about:debugging#/runtime/this-firefox, choose Load Temporary Add-on, and select .output/firefox-mv3/manifest.json.
mise run test-firefoxThe real-browser task builds the extension, then uses Selenium Manager to locate/download Firefox and its driver. It creates a disposable profile and controlled fixtures, and writes local evidence to ignored .scratch/. It never uses the ordinary Firefox profile. The test driver has browser-UI privileges solely for fixture setup and permission dialog automation. The production extension has no such privilege.
For Chrome, use mise exec -- bun run dev:chrome or mise run package-chrome. The latter creates a validated Chrome ZIP and browser-named source ZIP. mise run test-chrome uses an exact Chrome for Testing version in a disposable profile; mise run test-chrome-popup opens a visible session for separate native-consent observations. Testing describes the pre-granted UI fixture and unmodified product checks.
- Vision explains who this serves and what success means.
- Product requirements defines behavior and acceptance criteria.
- Architecture describes the extension boundaries and future companion.
- API limits separates documented APIs from observed behavior.
- Privacy defines permission requests and data retention.
- Phases provides delivery gates and explicit stop conditions.
- V1 contract fixes the expanded v1 scope, support matrix and release acceptance.
- Testing distinguishes simulated tests from observed browser evidence.
- Toolchain covers Bun, hk, jactionlint, setup, and rollback.
- Decisions records answers and open questions.
- Naming research records the shortlist and collision checks.
- Checklist and handoff is the resumption entry point.
- Glossary defines product terms.
- Contributing explains how to change this project.
AddonRay does not offer arbitrary global or per-site switches for other extensions. An inventory entry does not prove that an extension ran on the current page. Diagnostics can supply observations and comparison results, not a reliable verdict about which extension caused a problem.
The page-inspection action also reads three recorded loading milestones: DOM content loaded, load event completed, and first content displayed when reported. It uses the document loaded in the originally selected tab when the check runs. Results stay in popup memory. The check does not reload the page, record later interactions, collect a URL/content, or identify a responsible extension. See the approved scope for field definitions, size/runtime budgets, and qualification requirements.
The approved optional timing comparison adds an explicit Attach timing action. Choose an investigation and side to retain that timing in its memory. Attach Before before starting the After inventory, then capture After timing from the same browser tab. The comparison shows measured millisecond differences with uncertainty, while inventory-only comparisons remain available. Attachments work only between verified normal-window views and add no permissions. They remain in memory unless you explicitly save a completed investigation. Qualification is tracked in status.
Choose New page-error check from the source page's popup, then explicitly Start in its separate check tab. Reproduce the problem on the original page and Stop to keep confirmed counts, or let the 30-second/200-event window finish. The check counts only future top-frame uncaught JavaScript error and unhandled-rejection notifications. It collects no raw messages, stacks, rejected values, URLs or page titles, and cannot identify a responsible extension.
Only verified normal windows participate. Firefox's observer stays isolated; Chrome's runs with the page, which can interfere with its counts. Start over, Clear, permission revocation and owner teardown discard results. Reload loses the source binding. Each view keeps its own temporary data. See qualification and remaining gaps.
In a completed check, choose Attach to investigation. Select its label and an error-count side, then confirm. Attach Before before starting After inventory; attach After only after its inventory and the Before error attachment exist. Each completed check attaches successfully once. Its summary stays readable.
The investigation owns a copy after the check resets or closes. All timing and error attachments use the same browser tab, without collecting its URL/title or proving that it still contains the same page. Start over in the investigation, permission revocation, reload, close or unloading discards its live observations. Explicitly saved archives have the separate retention and deletion behavior described above. Counts, durations and completion reasons appear side by side. Different intervals or interactions prevent automatic error-rate or causal comparisons. See the approved scope and current qualification.