~derf / projects / Travel::Routing::DE::EFA v2.24
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 Do 'Eichlinghofen H-Bahn' D Stadttor
Bus 440 → Dortmund Oespel
19:54       ab  Dortmund Eichlinghofen H-Bahn 
19:59       an  Dortmund Oespel                

S-Bahn S1 → Düsseldorf Hbf
20:08 ( +3) ab  Dortmund Oespel: 1            
20:20 ( +3) an  Bochum Hbf: 7                  
# Linie S1: Achtung! Baumaßnahmen. Infos: bauinfos.deutschebahn.com
# Linie S1: WLAN verfügbar

Regionalzug RE1 (RRX) → Aachen, Hbf
20:31 (+36) ab  Bochum Hbf: 3                 
21:10 (+34) an  Düsseldorf Hbf: 16             [* ]
# Aufzug nicht nutzbar
# Linie RE1 (RRX): Behindertengerechtes Fahrzeug
# Linie RE1 (RRX): Rollstuhlstellplatz
# Linie RE1 (RRX): Laptop-Steckdosen
# Linie RE1 (RRX): Klimaanlage
# Linie RE1 (RRX): WLAN verfügbar
# Verspätung aus vorheriger Fahrt

Niederflurstrab 709 → Neuss Theodor-Heuss-Platz
21:21       ab  Düsseldorf Hbf: 8             
21:29       an  D-Stadttor: 1                  


Bus 440 → Dortmund Oespel
19:54      ab  Dortmund Eichlinghofen H-Bahn
19:59      an  Dortmund Oespel

S-Bahn S1 → Düsseldorf Hbf
20:08 (+3) ab  Dortmund Oespel: 1
21:23 (+2) an  D-Wehrhahn S: 2
# Linie S1: Achtung! Baumaßnahmen. Infos: bauinfos.deutschebahn.com
# Linie S1: WLAN verfügbar

21:23      ab  D-Wehrhahn S: 2
21:27      an  D-Birkenstraße: 3

Niederflurstrab 709 → Neuss Stadthalle/Museum
21:37      ab  D-Birkenstraße: 3
21:49      an  D-Stadttor: 1

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.24.tar.gz (signature)

  • efa: Make output less horizontally dense; show arrival and departure delays in-line
  • EFA::Route::Part: Add arrival_delay and departure_delay accessors
  • EFA::Route::Part: via: Add delay field to returned list refs

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

  • Update default API endpoint as the previously used efa.vrr.de/vrr seems to be gone for good
  • Rename VRR2 API to VRR and VRR3 to VRR2

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

  • Rewrite code not to use Perl's formerly experimental and now deprecated smartmatch features

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

  • Add service VRR3
  • Update service URLs for VVO, VRN
  • Remove discontinued services SVV, TLEM, VBL, Verbundlinie, VOR

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