Where are you headed?
Nothing matches yet.
Allow another change, widen the departure window, or search the whole city.
One train, every stop.
Search for a train to see its schedule.
One station, every train.
Search for a station to see everything that calls there.
Stations that are in same City.
How this works.
Type two stations and it searches the whole week of timetables, not just the trains that happen to run between them directly.
Find a route
Type a station name or code into From and
To, then pick from the list — the search needs a real
station, so a typed name alone will not do. Click the big code or the
× to change one. ⇆ swaps them.
Read a result
Each card is one journey drawn along a time axis, with each train riding a thin grey rule. Every train gets its own colour, carried under its number, on its chip and through its options below. Hatched stretches are gaps between trains, labelled with how long you wait and whether you change station.
Times sit under each stop with the day; the duration under each bar is time on board. Hover a train number for its name and running days, or click it for the full schedule. Click anywhere else on a card for a step-by-step view.
Narrow it down
- Every control is a chip that shows its own setting and opens under itself. Nothing is nested, so nothing costs more than one click to reach, and a Clear chip appears whenever any of them is away from its default — it is there so a short result list is never a mystery.
- Max 3 trains — how many trains you are willing to take, down to Direct only. Three is the default, so the first search already looks as wide as it can.
- Intercity changes — whether you will cross a city to change, say New Delhi to Hazrat Nizamuddin.
- Local trains — on by default. Turn it off to drop passenger, MEMU, DMU, EMU and local services and leave the expresses. Specials and tourist trains are not in this group and are always searched.
- Departs — restrict to a time-of-day window. The four quick bands apply to the first train; Exact windows per train below them pins each train separately, so you can ask for a morning start and an evening connection. Times are on the 24-hour clock — type 1830 or 18:30 — and a window may run past midnight. Nothing is applied until you press Apply, so all three can be set in one go. Where the train the search picked for a leg falls outside your window, its alternatives are checked and one that fits is selected for you. Waiting time is unlimited while any exact window is set — a connection you have pinned to the evening is only reachable if the wait before it is allowed to be long.
- Runs — the day you want to start, by name, with Today at the top. It is any day until you say otherwise: a great many trains run only two or three days a week, and defaulting to today would hide them without saying so. Naming a day also makes searches much faster.
- Via — a station the journey must actually break at; a train passing through at speed does not count. While Intercity changes are on it means the whole city, so via Delhi Jn is answered by a change at New Delhi too; turn them off to require that one station exactly.
- Wait — how long you will stand on a platform between trains, 20 minutes to 4 hours by default. Put 0 in the second box for no limit.
Cities
Stations grouped into a city count as one place, so a search can start at one and finish at another. Edit the groups in Cities; changes apply to your session only.
Share a search
The address bar carries your search, so a link reproduces it exactly — filters included. Back and forward move between searches.
Trains numbered 0… are specials and are tagged as such. The source
data carries no validity dates for them, so check one is still running before you
rely on it.
Where it actually is.
The journeys you have saved. Open one and it is measured against the trains running right now — what each is doing, whether your connections still hold, and what to catch instead if one of them does not. Nothing here updates on its own: press Refresh and it asks.
Your own timetable.
A copy of Indian Railways' schedules ships inside this application so it works the moment it is installed. It is a snapshot, and it ages. This is how you replace it with one this machine fetched itself — after which nothing about the timetable depends on anybody shipping you a new version.
Every call.
Every request this machine has made to a railway source, and what came back. Kept on your machine, and nowhere else.
What is on disk.
What is actually in the app's database. Every table, as it stands.
About this project.
I discovered the joy of Indian Railways a few years ago. It offers one of the most practical ways to travel across India, but planning a journey can be surprisingly challenging — ticket availability, punctuality, complicated connections, and the sheer number of trains to navigate.
One challenge that stood out to me was connections. So I built a solution that starts with a simple question:
“How can I get from Station A to Station B, even when there isn’t a convenient direct train?”
Instead of showing only trains between two stations, it explores the entire journey and finds practical combinations of trains.
You can now plan a journey with
- Direct trains when available
- 2-train connections with sensible interchange stations and waiting times
- 3-train journeys when that opens up better options
- Wait-time visibility, so you know exactly how long you’ll spend between trains
- City clustering, grouping nearby stations and cities so you can discover connections that traditional station-to-station searches often miss
The goal is simple: don’t just find a train. Find a practical way to get there.
Indian Railways already has an incredible network. I wanted to build a layer on top of it that makes that network easier to explore — and makes journeys that initially look impossible suddenly possible.