GTFS Guru vs the MobilityData GTFS Validator

By Igor Akimov, maintainer of GTFS Guru

GTFS Guru is a Rust reimplementation of MobilityData's canonical Java gtfs-validator. It uses the same notice codes and report format, lists every place where its rules differ, and runs faster, mostly because there is no JVM to start. The canonical validator remains the reference, and it is the one to use when you need the official result.

GTFS Guru is a separate open-source project (Apache 2.0) built to match the canonical validator's output, and it checks that match on real feeds before each release.

Same rules and notice codes

Each GTFS Guru release is checked against one specific release of the canonical validator and one specific revision of the GTFS reference. Both are named on the compatibility page (for GTFS Guru 1.0.0 the baseline is MobilityData/gtfs-validator v8.0.1), and every JSON report records them in summary.canonicalBaseline and summary.specRevision.

Notices use the canonical codes and severities, such as foreign_key_violation or missing_required_field, and report.json follows the canonical report format. Scripts that parse the Java validator's report can usually read GTFS Guru's without changes; the two extra summary fields above are the additions.

Parity is tested, not assumed. Twelve pinned real-world datasets from the Mobility Database, chosen to cover flexible services, Fares v2 and pathways, are validated on every commit and compared with the canonical Java validator before every release; an unexplained difference blocks the release. A wider check over fifty more Mobility Database feeds runs before releases as well. The method is described in docs/real-world-parity.md.

Where the results differ

The rule sets are close but not identical. The differences are listed on the compatibility page and fall into a few groups:

Speed

Measured wall-clock time for a full run, both tools writing their normal report files:

Feed Canonical 8.0.1 GTFS Guru
MBTA Boston (38 MB zip, 5.4M stop_times rows) 10.60 s 2.32 s (4.6x faster)
OVapi Netherlands (198 MB zip, 16.0M stop_times rows) 65.18 s 9.75 s (6.7x faster)
Small feeds (295 test feeds, median 1.6 KB) 1.274 s median 0.0158 s median (88x faster)

Method: the two large feeds were run on an Apple M3 Pro with a warm page cache and 8 threads, GTFS Guru 5 times and the canonical validator 3 times under OpenJDK 21. The small-feed row covers every feed in the project's test corpus, 3 runs each with the median kept, on a Linux x86-64 container; the speed-up there ranges from 28x to 196x, because on a tiny feed JVM startup is most of the run. The rule sets differ, so these are whole-run comparisons, not per-rule ones, and your numbers will depend on your feed and machine. Commands to reproduce are in docs/benchmarks.md.

How each one is distributed

The canonical validator runs on the JVM and is offered as a command-line tool, a desktop app and a hosted web service. GTFS Guru is compiled Rust and ships as:

The CLI also includes gtfs-guru diff to compare two feed versions, --fix to write a repaired copy with safe fixes applied, and README status badges.

When to use the canonical validator

Running both is reasonable: GTFS Guru for fast checks while you edit and in CI, and the canonical validator as a final check. The canonical project is at github.com/MobilityData/gtfs-validator; GTFS Guru's source is at github.com/abasis-ltd/gtfs.guru.

FAQ

Will a feed that passes GTFS Guru pass the canonical validator?

In most cases, since the rules and codes are shared, but not always. Check the accepted differences for the cases where the two disagree. Neither tool's result is a decision by Google or another consumer, which run their own checks.

Do I need Java to run GTFS Guru?

No. GTFS Guru is compiled Rust, so the CLI is a single binary and the browser version runs as WebAssembly. Only the canonical validator needs a Java runtime.

Does GTFS Guru validate GTFS-Realtime?

No. It validates static GTFS Schedule feeds only. See GTFS vs GTFS-Realtime for how the two formats differ.

Related Questions

• How do I validate my GTFS feed?

• Why was my GTFS feed rejected?

• GTFS notice guide

Try it on your own feed: validate a GTFS feed in your browser. It's free and the file stays on your device.