UK train times from your terminal
Project description
choo
UK train times from your terminal.
choo to go to work. choo choo to come home.
Install
uvx choo
Or install permanently:
pip install choo
Quick start
# 1. Get API credentials
choo auth
# 2. Set up your commute
choo config alias.home "Highbury & Islington"
choo config alias.work "London Bridge"
# 3. Go
choo # next trains home → work
choo choo # reverse: work → home
choo "kings cross" york # fuzzy station names work too
Commands
choo / choo next [FROM] [TO]
Show next trains between two stations. Defaults to home → work aliases.
choo # home → work, now
choo --on tomorrow # home → work, tomorrow
choo paddington bristol # fuzzy station names
choo next paddington bristol --at 08:30 # departing around 08:30
choo next KGX YRK --on monday # CRS codes work too
choo next KGX YRK --count 10 # show 10 results
No trains running? Choo automatically shows tomorrow's first services.
choo choo
Reverse commute — next trains from work → home.
choo choo # heading home
choo choo --on friday # Friday evening trains
choo choo board # departure board from work
choo board [FROM] [TO]
Departure board for a station. Same arguments as next, but shows all services in a table.
choo board "kings cross" # all departures from King's Cross
choo board "kings cross" york # filtered to York
choo board KGX --arrivals # arrivals instead
choo board --on tomorrow # defaults to home station
choo service UID
Full calling pattern for a service. Get the UID from board output.
choo service C41053
choo service C41053 --on 2026-03-16
choo config
Get/set configuration, like git config.
choo config alias.home "Highbury & Islington" # set station alias
choo config alias.work "London Bridge"
choo config next.count 10 # default number of results
choo config alias.home # get a value
choo config # list all
choo config --unset alias.home # remove
choo auth
Guided setup for RTT API credentials. Walks you through registration at api-portal.rtt.io and verifies your credentials.
choo stations update
Fetch the latest station data from GitHub (2,599 UK stations).
Flags
| Flag | Short | Description |
|---|---|---|
--at |
-t |
Time filter (HH:MM) |
--on |
-d |
Date filter (today, tomorrow, day name, or YYYY-MM-DD) |
--count |
-n |
Number of results (default: 5, configurable via next.count) |
--arrivals |
Show arrivals instead of departures | |
--json |
Output JSON for scripting | |
--verbose |
-v |
Enable debug logging |
Station resolution
Stations can be specified as:
- CRS codes:
KGX,PAD,BRI(3 uppercase letters) - Aliases:
home,work(seechoo config) - Fuzzy names:
"kings cross",paddington— matched against 2,599 stations with suggestions for ambiguous input
Configuration
Config file: ~/.config/choo/config.json (XDG via platformdirs)
| Key | Example | Description |
|---|---|---|
alias.home |
HIB or "Highbury & Islington" |
Station alias |
alias.work |
LBG or "London Bridge" |
Station alias |
alias.* |
any CRS | Custom aliases |
next.count |
5 |
Default result count |
Environment variables (override config):
| Variable | Description |
|---|---|
CHOO_AUTH |
API credentials (user:password) |
RTT_AUTH |
API credentials (fallback) |
CHOO_ALIAS_* |
Station aliases (e.g., CHOO_ALIAS_HOME=HIB) |
traintimes SDK
Choo is built on the traintimes Python SDK, which wraps the RealTimeTrains Pull API.
from traintimes.sdk import Location, Service
# Departures from Highbury & Islington
response = Location("HIB").get()
for svc in response.services:
print(svc.service_uid, svc.location_detail.gbtt_booked_departure)
# Full calling pattern for a service
service = Service("C41053", datetime.date.today()).get()
for loc in service.locations:
print(loc.description, loc.gbtt_booked_departure)
The SDK provides Pydantic models for all API responses — see traintimes/models.py.
Credits
- Train data from the RealTimeTrains API
- Station data from davwheat/uk-railway-stations, licensed under the Open Database License (ODbL)
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file choo-0.1.4.tar.gz.
File metadata
- Download URL: choo-0.1.4.tar.gz
- Upload date:
- Size: 36.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5060270fa8a860a1c2abd8cbb44b84f649d2b9da7a81b89257ea2dc1832799e4
|
|
| MD5 |
0d06fd67d852c5dcac78d0d819806a23
|
|
| BLAKE2b-256 |
8412138c29bbc221f39c0489a5fd09f1176659f20d2d349c946ed157f5b5535a
|
Provenance
The following attestation bundles were made for choo-0.1.4.tar.gz:
Publisher:
publish.yml on tomviner/choo
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
choo-0.1.4.tar.gz -
Subject digest:
5060270fa8a860a1c2abd8cbb44b84f649d2b9da7a81b89257ea2dc1832799e4 - Sigstore transparency entry: 1208830605
- Sigstore integration time:
-
Permalink:
tomviner/choo@74133cd2e9cbc5a9ae9b0acaa2c74fb3ea25cd29 -
Branch / Tag:
refs/tags/v0.1.4 - Owner: https://github.com/tomviner
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@74133cd2e9cbc5a9ae9b0acaa2c74fb3ea25cd29 -
Trigger Event:
release
-
Statement type:
File details
Details for the file choo-0.1.4-py3-none-any.whl.
File metadata
- Download URL: choo-0.1.4-py3-none-any.whl
- Upload date:
- Size: 39.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a4586e9c72f3a827d40f1bdd1089ee986ce92f85c597a1d50c8e1d1f13c2fdbb
|
|
| MD5 |
c3f89306ca4dbf43355e88607b84a403
|
|
| BLAKE2b-256 |
a6082ed6c66ce4f16a18f5957a2c8ef11a52b68656636b27b723eb1d631dd940
|
Provenance
The following attestation bundles were made for choo-0.1.4-py3-none-any.whl:
Publisher:
publish.yml on tomviner/choo
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
choo-0.1.4-py3-none-any.whl -
Subject digest:
a4586e9c72f3a827d40f1bdd1089ee986ce92f85c597a1d50c8e1d1f13c2fdbb - Sigstore transparency entry: 1208830703
- Sigstore integration time:
-
Permalink:
tomviner/choo@74133cd2e9cbc5a9ae9b0acaa2c74fb3ea25cd29 -
Branch / Tag:
refs/tags/v0.1.4 - Owner: https://github.com/tomviner
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@74133cd2e9cbc5a9ae9b0acaa2c74fb3ea25cd29 -
Trigger Event:
release
-
Statement type: