KCity. Stack and specification.
A quiet departure monitor and journey planner for the Karlsruhe transport network: the next tram, without an app that wants something from you first. Independent, not affiliated with the KVV.
In development
As of October 2026
Stop
Web · German and English
KCity API
Fastify · cache
Information system
EFA or TRIAS
Transport network
open interfaces
At a glance
The key figures of KCity, backed by the code.
Every 20 seconds
A stop's board arrives as a live stream, no reloading
Departure board
No account
Departures, journeys, lines and disruptions without signing in and without tracking
Public interface
Open data
The KVV timetable data under CC0, departures from the open information system
Data sources
From search to departure
What happens between the stop and the board.
Find a stop
Find a stop
Search runs over the stops in the network's timetable dataset.
Open the board
Open the board
Departures arrive as a live stream, with delay, cancellation and platform.
Plan a journey
Plan a journey
From A to B with changes and walks. A walk without street routing is called a straight line.
Browse lines
Browse lines
Every line with its stops in order, as the dataset knows them.
Read disruptions
Read disruptions
Notices from the departures shown last, gathered in one place.
Keep
Keep
With an account you keep favourites and preferences. The timetable needs none.
The stack
Six parts, with no analytics and no advertising.
Web
Next.js 16 with React 19 and TanStack Query, in two languages, light and dark.
API
Fastify 5 on Bun, the contracts as Zod schemas shared by web and API. Redis keeps the information system's answers for 20 seconds up to an hour.
Information system
Three adapters behind one interface: the KVV's open EFA, TRIAS per VDV 431-2, and test data.
Timetable data
Stops and lines from the network's GTFS dataset under CC0, in PostgreSQL with Drizzle.
Accounts
Better Auth with passkey and magic link, only for favourites and preferences. Registration is closed, access comes by invitation.
Privacy
Without an account no cookie apart from the chosen language. No analytics, no advertising.
What KCity cannot do
What is missing is written down here, so nobody mistakes it for an oversight.
- No live map
- KCity shows departures and journeys, not where a tram is right now.
- A walk without street routing is a straight line
- Without a walking router there is no street geometry. The leg is then called a straight line and is shorter than the real way.
- No ticket sales
- No contract of carriage comes about; tickets are sold by the transport network.
- Not every stop shows departures
- Without a stored information-system identifier the board stays empty, because a guessed identifier could show another stop's departures.
- Not affiliated with the KVV
- KCity uses the network's openly reachable interfaces. The KVV's own information always takes precedence.
The next tram.
No account.
No detour.
Specification
Data
- Timetable data
- the KVV's GTFS dataset under CC0
- Departures
- the network's open EFA, no key needed
- TRIAS
- per VDV 431-2, with access from the network
- Test data
- the default during development
Departures
- Refresh
- every 20 seconds as server-sent events
- Details
- delay, cancellation, platform, step-free access to the stop
- Disruptions
- from the notices attached to departures
- No identifier
- no board rather than a wrong one
Journeys
- Route
- from A to B with changes
- Walks
- via Mapbox or OSRM, otherwise as a straight line
- Walking router
- asked from the server, without your IP address
Lines
- Overview
- grouped by mode
- Course
- the chain of stops, without track geometry
- Colours
- from the timetable dataset
Account
- Needed for
- favourites and preferences
- Registration
- closed by default, access by invitation
- Sign-in
- password, passkey, magic link or a code by email
- Your data
- export as JSON and deletion
Privacy
- Cookies
- none without an account, at most the chosen language
- Analytics
- none
- Fonts
- from its own server
Platforms
- Web
- German and English, light and dark
- App for iOS and Android
- with ExpoPlanned
Status
- Done
- departures, journeys, lines, disruptions, accounts
- Open
- running on the network's live data
- Planned
- app for iOS and Android
Questions about KCity
Answered briefly; the details are in the specification.
Also on Nouvex
The other pages, in short.
Nouvex Mail
Stack and specification of the open-source mail client for the web, iPhone, iPad and Mac.
Team
Who designs and builds Nouvex.