Last Updated: January 2026
Validation itself always runs on your device: the validator is compiled to WebAssembly and executes inside your browser tab. We never receive a validation report, and no report is stored on our servers. How the archive reaches the validator depends on which of the two inputs you use, and the two are not the same:
Choosing or dropping a .zip never sends it anywhere. The browser reads it from disk and
hands the bytes straight to the WebAssembly validator in the same tab. The file does not reach our
servers, and it is not stored by us in any form. The same is true of the desktop app and the CLI.
Here your browser first tries to download the archive from the address you entered, with no involvement
from us. Many feed hosts refuse cross-origin browser requests, and when that happens the page retries
through gtfs.guru/cors-proxy: our server downloads the archive from that public address and
passes the bytes back to your browser, which then validates them locally as usual. During that request
the archive passes through our server and is held in memory only — it is not written to disk, not
cached, and not retained after the response. The proxy reaches public addresses only and enforces
redirect, size, rate and concurrency limits. If you would rather no third party touch the archive at
all, download it yourself and use the file picker.
The Share button builds a link that carries a compressed sample of the report in the
URL fragment (the part after #). Browsers do not send a fragment to the server, so a shared
report is not uploaded to us either — but anyone holding the link can read the findings it contains.
We use anonymous usage statistics to improve the application. No personally identifiable information (PII) is collected.
This project is open source. You can audit the code on our GitHub repository to verify our security claims.
For concerns, please contact us at gtfs@abasis.ai.