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

The way a departure travels

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.

  1. Find a stop

    Search runs over the stops in the network's timetable dataset.

  2. Open the board

    Departures arrive as a live stream, with delay, cancellation and platform.

  3. Plan a journey

    From A to B with changes and walks. A walk without street routing is called a straight line.

  4. Browse lines

    Every line with its stops in order, as the dataset knows them.

  5. Read disruptions

    Notices from the departures shown last, gathered in one place.

  6. 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.