Transit, off the web

Stuttgart transit from the terminal. Yours in milliseconds.

vvs gives you live departure boards, door-to-door trips, and offline stop resolution for the entire Stuttgart region (VVS/SSB). Pure Go, zero API keys, no web bloat.

  • No cookie banners or GDPR popups
  • No 500 MB browser tabs hogging RAM
  • No API keys or registration required
  • No cloud telemetry or tracking
  • No slow remote autocomplete latency
  • No runtime dependencies
curl -fsSL https://raw.githubusercontent.com/parnoldx/vvs/master/install.sh | sh

Linux · macOS · Windows · Single Go binary · EFA-BW API · MIT

~/terminal — vvs LIVE PREVIEW
Quick examples · click to inspect3 modes

What it fixes

Checking transit shouldn't take 30 seconds and a browser.

Commercial web portals bombard you with cookie consents, ads, laggy search spinners, and heavy JavaScript bundles. Here is checking transit, twice.

Without vvscommercial web transit portal
12345 Sunday 20:04
Browser — Loading transit portal...
Fetching 4.2 MB JS bundles, fonts, telemetry...
Cookie & Ad Consentvvs.de
Please accept 148 advertising cookies to proceedConsent Required
Station SearchWaiting for network...
you
Ad: Discount BahnCard 50!
0 MBRAM 0cookies 0sdelay 0clicks 0trackers
With vvsyour terminal
12345 Sunday 20:04
~/terminal — vvs departures Schlossplatz
20:04U15RuhbankGleis 2on time
20:05U6GerlingenGleis 1+7'
20:06U12DürrlewangGleis 1+4'
20:0642Erwin-SchoettlePos. 1on time
you
0 MBRAM 0cookies 0sdelay 0clicks 0trackers

Sped up. The CLI queries the official EFA-BW timetable endpoint directly in <120ms with 0 telemetry.

Superpowers

Everything you need. Compiled into pure Go.

Departures boards, door-to-door trips, offline fuzzy search, and clean JSON piping — directly from your shell.

01

Live Regional Boards

Real-time delays (+4'), train platforms (Gleis 1–16), and bus bays across U-Bahn, S-Bahn, buses, Zacke, and Seilbahn.

$ vvs departures
02

Door-to-Door Trips

Write natural times: um morgen 8:00, friday 17:30, or --arrive. Save your home stop once in ~/.config/vvs.json.

$ vvs to Feuerbach
03

Offline Stop Resolver

10,000+ official stops embedded locally. Fuzzy search, umlaut normalization (ä, ö, ü, ß), and EFA IDs resolve in 2ms on CPU.

$ vvs search feuerb
04

UNIX Piping

Pass --json to pipe live transit data directly into Waybar, Polybar, Raycast, Neovim, or shell scripts.

$ vvs dep --json | jq .
Try the Offline Stop Resolver Matches 10,000+ regional stops offline
Sub-millisecond latency
Quick tests:

Command reference

Clean UNIX commands & flags.

Single-word shortcuts, interactive pickers, and flags designed for terminal speed.

vvs departures [station]Live board for any station or home
vvs to <station>Trip connections from home to destination
vvs from <station>Trip connections from station back home
vvs <from> to <to>Connections between two custom stations
vvs search <term>List matching stations with EFA IDs
vvs toInteractive station & time picker wizard
vvs home [station]Show or set default home station
--at WHENDate/time: "8:00", "morgen 7:45", "friday", "1.10."
--arriveCalculate trips to arrive by target time
--allInclude ICE/IC non-local trains on boards
--limit NMax departures to display (default 10)
--jsonMachine-readable JSON output for status bars
↑ / ↓   TabNavigate picker & switch between stop/time
Enter · EscConfirm query or exit wizard

Get started

Install in seconds.

One command, then your terminal has real-time Stuttgart transit.

curl -fsSL https://raw.githubusercontent.com/parnoldx/vvs/master/install.sh | sh
go install github.com/parnoldx/vvs@latest

Linux · macOS · Windows · Single Go binary · EFA-BW · MIT

  1. 1
    Install binary: Run the curl installer or go install to place vvs on your $PATH.
  2. 2
    Set home: Run vvs home Schlossplatz (stored in ~/.config/vvs.json).
  3. 3
    Query transit: Run vvs departures or vvs to Feuerbach anytime.
Do I need an API key or account?

No! vvs queries the public EFA-BW timetable endpoint directly. No API tokens, registration, or credentials are required.

Which regions are supported?

The entire VVS region: Stuttgart city (SSB), Esslingen, Böblingen, Ludwigsburg, Rems-Murr-Kreis, and Göppingen. Includes U-Bahn, S-Bahn, buses, regional trains, Zacke, and Seilbahn.

How does offline search work?

vvs embeds a compressed index of 10,000+ regional stops. Name matching, fuzzy scoring, and umlaut normalization run entirely on your CPU in milliseconds.

Can I pipe into status bars?

Yes! Every command supports --json. You can easily write a 3-line Waybar or Polybar module that shows live delay indicators on your desktop bar.