Skip to main content

PagePatrol

Open-source, local-first QA agent for web pages.

PagePatrol opens your page in a real browser at phone and desktop sizes and looks for the problems people actually run into: text that overlaps or gets cut off, text that is too small or too faint to read, layouts that scroll sideways on a phone, broken images and links, JavaScript errors and failed requests. Every finding comes with a screenshot that shows where it is.

Everything runs on your machine. No account, no API key needed for the checks below. LLM-driven scenario testing with your own key is on the way.

Status: early development. Expect rough edges and breaking changes.

Quick start

uv tool install pagepatrol            # or: pipx install pagepatrol
pagepatrol install                    # one-time: download Chromium
pagepatrol check https://example.com
pagepatrol check ./site/index.html --open
pagepatrol check localhost:3000 -v mobile -v tablet -v 1440x900

check prints a summary and writes a report to .pagepatrol/runs/<time>/:

  • report.html with marked-up screenshots per viewport
  • report.json with every finding, for scripts and CI
  • screenshots/ with clean and annotated full-page captures

It exits with code 1 when it finds errors, so it can gate a CI job. Use --fail-on warning to be stricter or --fail-on never to only report.

What it checks

Check Level
overlap error / warning Text on top of text, or text and controls covering each other
horizontal-overflow error Elements that make the page scroll sideways
viewport-meta error No <meta name=viewport>, so phones show the desktop layout zoomed out
broken-image, broken-link error Images that don't load, links that return 404/410/5xx
js-exception, console-error error Uncaught exceptions and console errors
http-error, failed-request error Resources that fail or return 4xx/5xx
clipped-text warning / info Text cut off by its container
small-text warning Text below 12px
axe/* warning / info WCAG 2.2 A/AA rules from axe-core, including color contrast

Errors mean something is broken. Warnings are real quality problems on a page that still works. Notes are worth a look but may be intentional.

Development

Requires uv.

uv sync
uv run playwright install chromium
uv run pytest
uv run ruff check . && uv run ruff format --check .

tests/fixtures/ holds small pages that are broken on purpose, one per check. If you add a check, add a fixture that proves it fires and, where it makes sense, one that proves it stays quiet.

License

MIT. Bundles axe-core (MPL-2.0), see src/pagepatrol/checks/vendor/axe-core.LICENSE.

Metadata

Release files for pagepatrol 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pagepatrol 0.1.0
File Size Uploaded Provenance Actions
pagepatrol-0.1.0.tar.gz 208.6 kB Without provenance Details for pagepatrol-0.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for pagepatrol 0.1.0
File Interpreter ABI Platform Actions
pagepatrol-0.1.0-py3-none-any.whl Python 3 none any Details for pagepatrol-0.1.0-py3-none-any.whl

Total release size: 420.8 kB

Release files / pagepatrol-0.1.0.tar.gz

Download URL pagepatrol-0.1.0.tar.gz
Size 208.6 kB
Tags Source
SHA-256 checksum
How to use checksums
a1a34c4eca0d22cccd35365b40f17fec4bfb15da22c1b08a748599a4455d67ee
BLAKE2b-256 checksum
How to use checksums
58da7c422e4438623009987d94a5a3608ac85024929b5ed1c518d622a24672fb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.5 {"installer":{"name":"uv","version":"0.13.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / pagepatrol-0.1.0-py3-none-any.whl

Download URL pagepatrol-0.1.0-py3-none-any.whl
Size 212.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a5cfc3311b7d70eae9ffedb318409d50b263935b17d4d102dc258432ea21c045
BLAKE2b-256 checksum
How to use checksums
ea0c594f29b40f54f01d71984f9bcdefe13f84b95c033fb050699d6597ce0209
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.5 {"installer":{"name":"uv","version":"0.13.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Security for pagepatrol 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page