Skip to content
Worix
BrowsePublish
Log inSign Up

F1 CLI

Query Formula 1 data using the f1-cli command-line tool (wraps OpenF1 API). Use when the user asks about F1 race results, lap times, driver standings, pit st...

21 downloads
Free
Reviewed

f1-cli — Formula 1 Data CLI

A Go CLI wrapping the OpenF1 API for querying F1 telemetry, timing, and session data.

Installation

brew tap barronlroth/tap
brew install f1-cli

Or from source:

go install github.com/barronlroth/f1-cli/cmd/f1@latest

The binary name is f1.

Quick Reference

Global Flags (apply to all commands)

FlagDescription
--jsonOutput as JSON (default: table)
--csvOutput as CSV
--session KEYSession key — number or latest
--meeting KEYMeeting key — number or latest
--driver DRIVERDriver number (44) or 3-letter acronym (HAM)
--limit NLimit results returned
--filter EXPRRaw API filter, repeatable (e.g. speed>=300)

Commands → API Endpoints

CommandEndpointWhat it returns
f1 drivers/driversDriver info: name, team, number, acronym
f1 sessions/sessionsSession list (FP1-3, Quali, Sprint, Race)
f1 meetings/meetingsGrand Prix weekends (extra: --year, --country)
f1 laps/lapsLap times, sector times, speed traps
f1 telemetry/car_dataSpeed, RPM, gear, throttle, brake, DRS at ~3.7 Hz
f1 pit/pitPit stop timing and duration
f1 positions/positionPosition changes throughout session
f1 intervals/intervalsGap to leader and car ahead (race only)
f1 standings drivers/championship_driversDriver championship points (race sessions)
f1 standings teams/championship_teamsConstructor standings (race sessions)
f1 weather/weatherTrack temp, air temp, humidity, wind, rain
f1 race-control/race_controlFlags, safety car, incidents
f1 radio/team_radioTeam radio recording URLs
f1 stints/stintsTire compound and stint laps
f1 overtakes/overtakesPosition exchanges between drivers
f1 location/locationCar XYZ position on track (~3.7 Hz)
f1 doctor—API connectivity check

Usage Patterns

Finding the right session

Most commands need --session. Start with latest for the most recent session, or find a specific one:

# List sessions for the latest meeting
f1 sessions --meeting latest

# Find a specific Grand Prix
f1 meetings --year 2025 --country Singapore

# Then use the session_key from the output
f1 laps --session 9161 --driver VER

Driver identification

The --driver flag accepts either a number or a 3-letter acronym. The CLI resolves acronyms automatically via the API.

# These are equivalent
f1 laps --session latest --driver 1
f1 laps --session latest --driver VER

Common driver acronyms: VER (Verstappen), NOR (Norris), HAM (Hamilton), LEC (Leclerc), PIA (Piastri), SAI (Sainz), RUS (Russell), ALO (Alonso).

Filtering with comparison operators

The --filter flag passes raw query params to the API. Supports >=, <=, >, < operators. Can be repeated.

# Cars going over 315 km/h
f1 telemetry --session 9159 --driver 55 --filter "speed>=315"

# Pit stops under 2.5 seconds
f1 pit --session latest --filter "stop_duration<2.5"

# Combine multiple filters
f1 telemetry --session latest --driver VER --filter "speed>=300" --filter "throttle>=95"

# Laps under 90 seconds
f1 laps --session latest --filter "lap_duration<90"

Output formats

# Default: aligned table
f1 drivers --session latest

# JSON for piping to jq or other tools
f1 telemetry --session latest --driver VER --json | jq '.[0].speed'

# CSV for spreadsheets
f1 laps --session latest --driver HAM --csv > hamilton_laps.csv

Common Workflows

"Who won the last race?"

# Always use standings for final race results
f1 standings drivers --session latest

Do NOT use f1 positions for race results. Positions is a time series — it records every position change throughout the session. Using --limit on positions gives you the start of the race, not the finish. Use f1 standings drivers for the final classification.

"Compare two drivers' lap times"

f1 laps --session latest --driver VER --json > /tmp/ver.json
f1 laps --session latest --driver NOR --json > /tmp/nor.json
# Then compare the JSON files

"What happened during the race?" (incidents, flags)

f1 race-control --session latest

"Tire strategy breakdown"

f1 stints --session latest --driver VER

"Weather conditions during the session"

f1 weather --session latest --limit 10

"Fastest pit stops"

f1 pit --session latest --filter "stop_duration<3" --json | jq 'sort_by(.stop_duration)'

Important Gotchas

  • --limit is client-side only. The OpenF1 API does not support a limit query parameter. The CLI fetches all results then truncates locally. This means large telemetry/location queries still hit the API fully — use --filter to narrow server-side when possible.
  • --filter is server-side. Filters like speed>=300 are sent to the API and reduce the response. Always prefer --filter over --limit for performance.
  • positions is a time series, not a result. It records every position change during a session. To get final race results, use f1 standings drivers --session <key>, not f1 positions. Using positions --limit N gives you lap 1 grid order, not the finish.
  • Driver numbers change between seasons. Don't hardcode driver numbers — use acronyms (VER, HAM, NOR) which the CLI resolves automatically per session.
  • Norris is now #1. For the 2026 season, Lando Norris drives car #1 (as reigning champion). Verstappen is #3.

API Notes

  • Data availability: Historical data from 2023 season onwards. No auth needed.
  • Rate limits: 3 requests/second, 30 requests/minute (free tier). The CLI handles rate limiting internally with retry on 429.
  • latest keyword: Works for both --session and --meeting to get the most recent.
  • Intervals and overtakes: Only available during race sessions, not practice or qualifying.
  • Championship standings: Only available for race sessions.
  • Telemetry and location: High-frequency data (~3.7 Hz) — use --filter to narrow results server-side, then --limit to cap output.
  • Off-season: --session latest returns 404 when no sessions exist. Use a known session_key from a past season instead.

Download

ZIP package — ready to use

Skill Info

Creator
barronlroth
Downloads
21
Published
Mar 15, 2026
Updated
Mar 16, 2026