~derf / projects / Travel::Routing::DE::VRR v2.20
dark mode

efa is a commandline client and Perl module for EFA public transit routing interfaces such as efa.vrr.de. It can request itineraries for train/tram/bus/ferry connections throughout most of Germany, as well as parts of Austria, Switzerland and UK.


 > efa Gelsenkirchen HBf Duisburg Universität
18:04 ab  Gelsenkirchen Hbf: Gleis 4     R-Bahn RB42          Essen Hauptbahnhof
18:14 an  Essen Hauptbahnhof: Gleis 21  

18:32 ab  Essen Hauptbahnhof: Gleis 2    R-Bahn RE6           Düsseldorf Hbf
18:44 an  Duisburg Hbf: Gleis 5         

      ab  Duisburg Hbf                   Fußweg ca. 2 Minuten 
      an  Duisburg Hbf Osteingang       

18:49 ab  Duisburg Hbf Osteingang        Bus 933              Duisburg Uni Nord
18:58 an  Duisburg Universität          


18:29 ab  Gelsenkirchen Hbf: Gleis 5     R-Bahn RE3           Düsseldorf Hbf
18:48 an  Duisburg Hbf: Gleis 3         

      ab  Duisburg Hbf                   Fußweg ca. 2 Minuten 
      an  Duisburg Hbf Osteingang       

18:52 ab  Duisburg Hbf Osteingang        Bus 924              Duisburg Sportpark
19:04 an  Duisburg Universität          


18:34 ab  Gelsenkirchen Hbf: Gleis 4     R-Bahn RE2           Mönchengladbach Hbf
18:57 an  Duisburg Hbf: Gleis 4         

      ab  Duisburg Hbf                   Fußweg ca. 2 Minuten 
      an  Duisburg Hbf Osteingang       

19:04 ab  Duisburg Hbf Osteingang        Bus 933              Duisburg Uni Nord
19:13 an  Duisburg Universität          

 > efa E HBf MH HBf
# Linie S1: Achtung! Baumaßnahmen. Infos: www.bahn.de/bauarbeiten
18:16 ab  Essen Hauptbahnhof: Gleis 7    S-Bahn S1            Düsseldorf Hbf
18:25 an  Mülheim Hbf: Gleis 5          


18:26 ab  Essen Hauptbahnhof: Gleis 7    S-Bahn S3            Oberhausen Hbf.
18:34 an  Mülheim Hbf: Gleis 5          


18:32 ab  Essen Hauptbahnhof: Gleis 2    R-Bahn RE6           Düsseldorf Hbf
18:37 an  Mülheim Hbf: Gleis 6          

efa has been packaged for Debian. For other distributions and installation methods, see the Travel::Routing::DE::VRR README.

efa is also available from docker hub if you want to try it out without having to care about dependency management or installation methods:

> docker pull derfnull/efa:latest
> docker run --rm derfnull/efa:latest Gelsenkirchen HBf Duisburg Universität

Travel-Routing-DE-VRR-2.20.tar.gz (signature)

  • EFA/Route/Part: Add occupancy accessor
  • efa: Show expected occupancy, if available

Travel-Routing-DE-VRR-2.19.tar.gz (signature)

  • Switch from WTFPL to Perl license (GPL 1+ or Artistic)
  • Update VVO (Verkehrsverbund Oberelbe), VMV (Verkehrsgesellschaft Mecklenburg-Vorpommern) and VGN (Verkehrsverbund Grossraum Nürnberg) EFA urls
  • Add VAG (Freiburger Verkehrs AG), MVV (Münchner Verkehrs- und Tarifverbund), NVBW (Nahverkehrsgesellschaft Baden-Württemberg) services
  • Re-add Verbundlinie (Verkehrsverbund Steiermark) service
  • Remove IVB (Innsbrucker Verkehrsbetriebe) and VRNdelfi services as they are no longer available

Travel-Routing-DE-VRR-2.17.tar.gz (signature)

  • Handle routes containing cancelled connections
  • Allow date to be specified as 'tomorrow'

Travel-Routing-DE-VRR-2.16.tar.gz (signature)

  • Fix encoding issues caused by recent API changes

Travel-Routing-DE-VRR-2.15.tar.gz (signature)

  • Remove support for Vorarlberger Verkehrsverbund (VVV) backend (no longer working, apparently superseded by non-EFA software)
  • Update EFA URLs for Verkehrsverbund Rhein-Ruhr (VRR2) and Verkehrsverbund Rhein-Neckar (VRN) backends
  • Add support for Braunschweiger Verkehrs-GmbH (BSVG)

Travel-Routing-DE-VRR-2.14.tar.gz (signature)

  • Remove support for the STV / Verbundlinie Steiermark EFA entry point (returns data with broken encoding)
  • Add VVO, VRN, VMV, KVV, TLEM and VBL EFA entry points

Travel-Routing-DE-VRR-2.13.tar.gz (signature)

  • efa: Add -a / --accessibility option
  • efa: Add -B / --bike-info option
  • efa: Change --ignore-info default to ignore less when -a / -B is set
  • EFA->new: Add boolean config options with_low_platform, with_wheelchair, without_elevators, without_escalators and without_solid_stairs

Travel-Routing-DE-VRR-2.12.tar.gz (signature)

  • Route::Part: Deprecate ->extra accessor. Use ->regular_notes instead
  • Route::Part: Add ->regular_notes and ->current_notes accessors. Note that current_notes is NOT STABLE yet. It may be change without further notice.
  • Route::Part: Add ->footpath_{duration,parts,type} accessors
  • efa: Show current route information provided by the EFA backend, such as cancelled stops or diversions.
  • efa -E: Show transfer walking duration when available
  • efa: Extend --ignore-info default (this option will probably be overhauled or removed in a future release)
  • Add Travel::Routing::DE::EFA::Route::Message module

Travel-Routing-DE-VRR-2.11.tar.gz (signature)

  • efa: Fix encoding issues when using -w, -t, -d, -a and similar
  • Travel::Routing::DE::EFA::Route::Part: Add train_product accessor
  • Improve support for walking connections
  • Handle "nicht umsteigen" messages and other unusual connection types

Travel-Routing-DE-VRR-2.10.tar.gz (signature)

  • efa: Changed -p/--proximity` default walking time from 8 to 10 minutes
  • efa: The -p/--proximity` option now takes an optional duration argument
  • EFA: use_near_stops now accepts an integer (interpreted as walking time in minutes) instead of a boolean value

Travel-Routing-DE-VRR-2.09.tar.gz (signature)

  • Travel::Routing::DE::EFA::Exception::Ambiguous: Add post_value accessor which contains the ambiguous input value
  • Improve error messages
  • Add VRR2 and DING EFA services

Travel-Routing-DE-VRR-2.08.tar.gz (signature)

  • efa: Add -l / --list option
  • efa: Add -s / --service option
  • Travel::Routing::DE::EFA::get_efa_urls() now returns a list of hashrefs
  • Documentation improvements

Travel-Routing-DE-VRR-2.07.tar.gz (signature)

  • Add URLs for several austrian EFA services (pointed out by Gregor Herrmann)
  • Support EFA services which do not distinguish between scheduled and realtime data (also pointed out by Gregor Herrmann)
  • efa: Add -D/--discover option
  • efa: Add -A/--auto-url option
  • Travel::Routing::DE::EFA: Add get_efa_urls method
  • efa: Remove --post option from documentation (it has not been supported since version 1.04)

Travel-Routing-DE-VRR-2.06.tar.gz (signature)

  • Route::Part: Add {arrival,departure}_{route,station}maps accessors
  • efa: Add -m / --maps option
  • Fix exclude / --exclude (didn't work at all previously, possibly because of a server-side API change)

Travel-Routing-DE-VRR-2.05.tar.gz (signature)

  • Move all logic to Travel::Routing::DE::EFA and require an EFA url to be set. This way, any EFA service is supported. Travel::Routing::DE::VRR now calls ::EFA with the VRR url, so there are no backwards-incompatible changes
  • Improve error messages for missing route data and backend errors
  • Add option to specify maximum number of connections (efa -n)
  • efa: add -f / --full-route option
  • efa: add -u / --efa-url option

Travel-Routing-DE-VRR-2.04.tar.gz (signature)

  • efa: Handle UTF8 in place/stop input
  • Travel::Routing::DE::VRR: Handle decoded input with non-ASCII characters

Travel-Routing-DE-VRR-2.03.tar.gz (signature)

  • Disable smartmatch warnings on perl >= 5.018

Travel-Routing-DE-VRR-2.02.tar.gz (signature)

  • Patch by Roland Hieber: respect proxy environment variables

Travel-Routing-DE-VRR-2.01.tar.gz (signature)

  • Fix bug in departure_stop_and_platform where the arrival_stop was used in case of unknown platforms
  • Document -E / --extended-info in efa(1)

Travel-Routing-DE-VRR-2.00.tar.gz (signature)

  • Now uses the efa.vrr.de XML interface
  • properly decode UTF-8 strings


  • new accessors: duration, ticket_type, fare_adult, fare_child and vehicle_time


  • arrival_stop and departure_stop no longer include the platform, use arrival_stop_and_platform / departure_stop_and_platform instead
  • New accessors: arrival_date, arrival_platform, arrival_sdate, arrival_stime, arrival_stop_and_platform, delay, departure_date, departure_platform, departure_sdate, departure_stime, departure_stop_and_platform, via
  • ->extra no longer contains information about delays, use ->delay instead


  • New -E / --extended-info option to display travel fares

Travel-Routing-DE-VRR-1.06.tar.gz (signature)

  • Fix dependencies. We claimed to use WWW::Mechanize but in fact only need LWP::UserAgent

Travel-Routing-DE-VRR-1.05.tar.gz (signature)

  • Documentation fixes (in a few places, the module was prefixed Travel::Status instead of the correct Travel::Routing)
  • Note that we need perl >= 5.10.1 because of the parent pragma


  • Fix connection error handler

Travel-Routing-DE-VRR-1.04.tar.gz (signature) (Debian Package)

  • efa: Remove --foo-type options, use --to city type:stop etc. instead
  • Introducing Travel::Routing::DE::VRR
  • New dependencies: Class::Accessor, Exception::Class

efa v1.3

efa-1.3.tar.bz2 (signature)

  • Rewrite efa parser using XML::LibXML (major performance improvement)
  • Detect more efa.vrr.de errors (no routes found, invalid input data, etc.)

efa v1.2

efa-1.2.tar.bz2 (signature)

  • Rewrite efa parser using HTML::TreeBuilder::XPath
  • Fixes information about late trains (was broken by efa.vrr.de changes)

efa v1.1.2

efa-1.1.2.tar.bz2 (signature)

  • Fix -v
  • Fix --date DD.MM. (was incorrectly rejected)
  • Fix support for empty --ignore-info
  • Add some more argument verification

efa v1.1.1

efa-1.1.1.tar.bz2 (signature)

  • Add short options

efa v1.1

efa-1.1.tar.bz2 (signature)

  • Code cleanup and DRY-ing
  • Add 'addr:foo' and 'poi:foo' as alternative to '--to-type poi' etc.

efa v1.0.3

efa-1.0.3.tar.bz2 (signature)

  • Further code cleanup
  • Fixes a minor unicode-related glitch in the output formatting

efa v1.0.2

efa-1.0.2.tar.bz2 (signature)

  • Code cleanup
  • --restrict is now --include

efa v1.0.1

efa-1.0.1.tar.bz2 (signature)

  • Fixed unicode handling (apparently efa.vrr.de got changed)
  • Added support for some rare connections without timestamps
  • --date: The year is now optional

efa v1.0

efa-1.0.tar.bz2 (signature)

  • Various parser improvements, especially for footways.
  • Added --walk-speed option
  • Added --bike option (take a bike with you)
  • Except for "Mobilitätseinstellungen", the efa.vrr.de interface is now completely supported

efa v0.9.1

efa-0.9.1.tar.bz2 (signature)

  • Added options:
  • --exclude - exclude certain train/transport types
  • --max-change - limit maximum number of interchanges
  • --prefer - prefer connections based on speed/interchanges/walking
  • --proximity - take near stops into account for start/stop

efa v0.9

efa-0.9.tar.bz2 (signature)

  • Accept from, to and via city and stops
  • Custom arrival/departure date/time
  • Print extra infos (late trains etc.)
  • Regex to ignore certain infos
  • Restrict trains to anything/anything without ICE/local