Changes in version 0.6.1.9000 Changes in version 0.6.1 (2026-05-24) - shift_chart() now returns periodNumber instead of period. - shift_chart_summary() now returns per-strength TOI splits per player per period. - shift_chart_summaries() now returns season-aggregate version of above. - gc_play_by_play() and wsc_play_by_play() (and subsequently gc_play_by_plays() and wsc_play_by_plays()) now follows new logic documented in the "Article" section on the documentation website. Changes in version 0.6.0 (2026-04-07) - Documentation website now features more guided examples and explanation articles. - replays() is now added to retrieve season-aggregate replays. - contracts() now returns more contracts, dating back to the 90's (and then some). - shift_chart() (and consequentially, shift_charts()) now returns completed shift charts for all games where at least either one of API or HTML report is available. - gc_play_by_play() and wsc_play_by_play() now return new schema. - HTML-report-derived on-ice goalie/skater ID columns are now added, limited to faceoff, hit, shot-on-goal, giveaway, missed-shot, blocked-shot, goal, delayed-penalty, takeaway, and failed-shot-attempt, while situationCode-derived strength/count columns remain available wherever situationCode itself is available. Check out our "Article" section on the documentation website to learn more. - Helpers now consistently expect the current public schema instead of silently backfilling the package's older alias names. - add_shift_times() is now added to populate scalar on-ice shift time elapsed columns via C. - add_deltas() now handles event-to-event deltas in C, returns raw and normalized X/Y deltas alongside distance and angle deltas, and properly handles same-second events and shootouts/penalty shots with 1/n estimation. - calculate_speed() is now defunct; use add_deltas() instead. - gc_play_by_play_raw() and wsc_play_by_play_raw() now returns raw play-by-play data; note that there are heavy inconsistencies in this uncleaned data as audited. - calculate_expected_goals() now uses a fixed six-partition ridge xG model. - The scorer now mirrors the training-time preprocessing with delta, biometric, previous-event, and shift-timing context where available, while keeping runtime dependencies minimal. - The scorer now expects the current public play-by-play schema directly and no longer backfills legacy xG alias columns such as typeDescKey, period, SOGFor, SOGAgainst, and SOGDifferential. - ig_game_shot_locations(), x_game_shot_locations(), ig_game_cumulative_expected_goals(), and x_game_cumulative_expected_goals() still accept model for backward compatibility, but it is now ignored. - Check out our "Article" section on the documentation website to learn more. Changes in version 0.5.0 (2026-02-24) - All return IDs, codes, and names are now standardized (i.e., no more arbitrary id columns and inconsistent column names across functions). - contracts() is now added to get all NHL contracts since the 2011-2012 season. - ig_game_shot_locations() and x_game_shot_locations() now use continuous xG scale instead of bins. - calculate_expected_goals() now combines the previous xG calculation functions; as a result, calculate_expected_goals_v1(), calculate_expected_goals_v2(), and calculate_expected_goals_v3() are now defunct. - calculate_speed() is now added to calculate event-to-event deltas in play-by-plays. - add_shooter_biometrics() is now added to add shooter biometrics to Fenewick events in play-by-plays. - add_goalie_biometrics() is now added to add goalie biometrics to Fenewick events in play-by-plays. - ps() is now deprecated; use pss() instead. Changes in version 0.4.2 (2026-01-28) - shift_charts() is now added to access season-aggregate shift charts. - add_on_ice_players() is now added to merge play-by-plays with shift charts. - Previous cleaning functions are now internalized and implemented by default to: - gc_play_by_play() - gc_play_by_plays() - wsc_play_by_play() - wsc_play_by_plays() - shift_chart() - shift_charts() - shifts() is now deprecated; use shift_chart() instead. Changes in version 0.4.1 (2025-12-17) - All API call functions are now wrapped with try-catch. Changes in version 0.4.0 (2025-11-30) - Documentation website now features proper example. - New functions to help clean the data are now available: - strip_game_id() - strip_time_period() - strip_situation_code() - flag_is_home() - flag_is_rebound() - flag_is_rush() - count_goals_shots() - normalize_coordinates() - calculate_distance() - calculate_angle() - New functions to run built-in models are now available: - calculate_expected_goals_v1() - calculate_expected_goals_v2() - calculate_expected_goals_v3() - New function to help graph the data is now available: - draw_NHL_rink() - New functions to help share the data are now available: - ig_game_shot_locations() - x_game_shot_locations() - ig_game_cumulative_expected_goals() - x_game_cumulative_expected_goals() Changes in version 0.3.0 - Documentation website now features disclosure and history. - Documentation is now standardized. - All API calls now handle rate-limits with exponential backoff. - Parameters are now standardized and can handle robust arguments. - Error-handling is now more elegant, returning messages alongside empty data. - New functions to access data about the entire league are now available: - seasons() - season_now() - game_type_now() - standings_rules() - standings() - schedule() - venues() - attendance() - New functions to access data about the franchises are now available: - franchises() - franchise_statistics() - franchise_team_statistics() - franchise_season_statistics() - franchise_versus_franchise() - franchise_playoff_situational_results() - New functions to access data about the teams are now available: - teams() - team_seasons() - team_report_configurations() - team_season_report() - team_game_report() - team_season_statistics() - roster() - roster_statistics() - team_prospects() - team_season_schedule() - team_month_schedule() - team_week_schedule() - team_logos() - New functions to access the team EDGE statistics are now available: - team_edge_seasons() - team_edge_leaders() - team_edge_summary() - team_edge_zone_time() - team_edge_skating_distance() - team_edge_skating_speed() - team_edge_shot_location() - team_edge_shot_speed() - New functions to access data about the players are now available: - players() - player_seasons() - player_summary() - player_game_log() - spotlight_players() - New functions to access data about the skaters are now available: - skater_report_configurations() - skater_season_report() - skater_game_report() - skater_statistics() - skater_regular_statistics() - skater_playoff_statistics() - skater_season_statistics() - skater_series_statistics() - skater_leaders() - skater_milestones() - New functions to access the skater EDGE statistics are now available: - skater_edge_seasons() - skater_edge_leaders() - skater_edge_summary() - skater_edge_zone_time() - skater_edge_skating_distance() - skater_edge_skating_speed() - skater_edge_shot_location() - skater_edge_shot_speed() - New functions to access data about the goalies are now available: - goalie_report_configurations() - goalie_season_report() - goalie_game_report() - goalie_statistics() - goalie_regular_statistics() - goalie_season_statistics() - goalie_game_statistics() - goalie_series_statistics() - goalie_scoring() - goalie_game_scoring() - goalie_leaders() - goalie_milestones() - New functions to access the goalie EDGE statistics are now available: - goalie_edge_seasons() - goalie_edge_leaders() - goalie_edge_summary() - goalie_edge_save_percentage() - goalie_edge_five_versus_five() - goalie_edge_shot_location() - New functions to access data about the games are now available: - games() - scores() - gc_summary() - wsc_summary() - boxscore() - game_rosters() - gc_play_by_play() - wsc_play_by_play() - shifts() - game_odds() - New functions to access data about the events (plays) are now available: - replay() - penalty_shots() - New functions to access data about the playoffs are now available: - series() - playoff_season_statistics() - bracket() - series_schedule() - New functions to access data about the awards are now available: - awards() - award_winners() - New functions to access data about the drafts are now available: - drafts() - draft_picks() - draft_prospects() - draft_rankings() - combine_reports() - lottery_odds() - draft_tracker() - expansion_drafts() - expansion_draft_picks() - New function to access data about the general managers is now available: - general_managers() - New functions to access data about the coaches are now available: - coaches() - coach_career_statistics() - coach_franchise_statistics() - New function to access data about the officials is now available: - officials() - New functions to access other data are now available: - glossary() - countries() - location() - streams() - tv_schedule() - Some functions are now deprecated: - get_seasons() - get_standings_information() - get_standings() - get_schedule() - get_venues() - get_attendance() - get_franchises() - get_franchise_team_totals() - get_franchise_season_by_season() - get_franchise_vs_franchise() - get_teams() - get_team_seasons() - get_team_roster() - get_team_roster_statistics() - get_team_prospects() - get_team_schedule() - get_players() - get_player_landing() - get_player_game_log() - get_spotlight_players() - get_skater_leaders() - get_skater_milestones() - get_goalie_leaders() - get_goalie_milestones() - get_games() - get_scores() - get_scoreboards() - get_game_landing() - get_game_story() - get_game_boxscore() - get_gc_play_by_play() - get_wsc_play_by_play() - get_shift_charts() - get_bracket() - get_series_schedule() - get_awards() - get_award_winners() - get_drafts() - get_draft_picks() - get_draft_rankings() - get_draft_tracker() - get_officials() - get_glossary() - get_countries() - get_streams() - get_tv_schedule() - get_partner_odds() - Some functions are now defunct: - get_season_now() - get_team_statistics() - get_team_scoreboard() - get_skaters() - get_skater_statistics() - get_goalies() - get_goalie_statistics() - get_series() - ping() - get_configuration() - New ESPN functions are now available: - espn_teams() - espn_team_summary() - espn_players() - espn_player_summary() - espn_games() - espn_game_summary() - espn_play_by_play() - espn_game_odds() - espn_transactions() - espn_futures() - espn_injuries() - Some ESPN functions are now deprecated: - get_espn_athletes() - get_espn_athlete() - get_espn_even()t - get_espn_event_play_by_play() - get_espn_event_odds() - get_espn_injuries() - Some ESPN functions are now defunct: - get_espn_teams() - get_espn_team() - get_espn_athlete() - get_espn_events() - get_espn_event_stars() - get_espn_event_officials() - get_espn_coaches() - get_espn_coach() - get_espn_coach_career() - get_espn_transactions() - get_espn_futures() Changes in version 0.2.0 (2025-07-17) - Documentation website now features dark theme and example. - New functions to access data about the franchises are now available: - get_franchise_season_by_season() - get_franchise_team_totals() - get_franchise_vs_franchise() - New function to access data about the players is now available: - get_players() - New functions to access data about the playoffs are now available: - get_bracket() - get_series() - New functions to access data about the awards are now available: - get_awards() - get_award_winners() - New function to access data about the drafts is now available: - get_drafts() - New functions to access other data are now available: - get_venues() - get_attendance() - get_officials() - New functions to access the ESPN API are now available: - get_espn_teams() - get_espn_team() - get_espn_athletes() - get_espn_athlete() - get_espn_coaches() - get_espn_coach() - get_espn_coach_career() - get_espn_events() - get_espn_event() - get_espn_event_play_by_play() - get_espn_event_stars() - get_espn_event_officials() - get_espn_event_odds() - get_espn_transactions() - get_espn_injuries() - get_espn_futures() Changes in version 0.1.1 (2025-06-11) - Some functions are now more optimized. Changes in version 0.1.0 - News.md now tracks changelog. - New functions to access data about the entire league are now available: - get_seasons() - get_schedule() - get_standings_information() - get_standings() - New functions to access data about the franchises/teams are now available: - get_teams() - get_franchises() - get_team_seasons() - get_team_statistics() - get_team_roster() - get_team_roster_statistics() - get_team_prospects() - get_team_schedule() - get_team_scoreboard() - New functions to access data about the players are now available: - get_player_game_log() - get_player_landing() - get_spotlight_players() - New functions to access data about the skaters are now available: - get_skaters() - get_skater_statistics() - get_skater_leaders() - get_skater_milestones() - New functions to access data about the goalies are now available: - get_goalies() - get_goalie_statistics() - get_goalie_leaders() - get_goalie_milestones() - New functions to access data about the games are now available: - get_games() - get_scores() - get_scoreboards() - get_game_boxscore() - get_gc_play_by_play() - get_wsc_play_by_play() - get_shift_charts() - get_game_landing() - get_game_story() - New function to access data about the playoffs is now available: - get_series_schedule() - New functions to access data about the drafts are now available: - get_draft_picks() - get_draft_rankings() - get_draft_tracker() - New functions to access other data are now available: - ping() - get_glossary() - get_configuration() - get_countries() - get_streams() - get_tv_schedule() - get_partner_odds() - get_season_now()