Hockey Terminal
Be a GM

← All players

Photo of Joel Hofer

Joel Hofer

#30 · Goalie · St. Louis Blues

Born Jul 30, 2000 in Winnipeg, Manitoba, CAN (age 26) · 6'5", 197 lb · Catches left · Drafted 107th overall in 2018 by STL (round 4)

Compare with a similar player

The goalies closest to him in games played in 2025-26. Pick one to see the two side by side, or choose someone else.

Joey Daccord SEA · 47 GP, 0.897 Kevin Lankinen VAN · 47 GP, 0.875 Yaroslav Askarov SJS · 47 GP, 0.884 Scott Wedgewood COL · 45 GP, 0.921 Jacob Markstrom NJD · 44 GP, 0.883

Career

Regular season games only. Pick a season to see its game log below. Cap hit is what he counted against the salary cap that season, where it is known.

0102030402021-22: 2 games221-222022-23: 6 games622-232023-24: 30 games3023-242024-25: 31 games3124-252025-26: 46 games4625-262026-27: 3 games326-27

Games played by season. The darker bar is the season shown below.

Season Team GP WLOTLSO Shots against Saves Goals against GAA Save % Cap hit
2021-22 STL 2 1100 50 44 6 3.07 0.880 $795K
2022-23 STL 6 3110 179 162 17 3.22 0.905 $795K
2023-24 STL 30 151211 830 759 72 2.65 0.914 $775K
2024-25 STL 31 16831 767 693 74 2.64 0.904 $775K
2025-26 STL 46 241356 1250 1137 114 2.61 0.910 $3.4M
2026-27 STL 3 1111 71 66 5 1.68 0.930 $3.4M
6 seasons Career 118 6036119 3147 2861 288 2.64 0.909

2025-26 season totals

GP Starts WLOTLSO Shots against Saves Goals against GAA Save %
46 43 241356 1250 1137 114 2.61 0.910

Contract

$3.4MCap hitends in 2027
$129KCap dollars per goal above replacement26.5 goals above replacement
$7.6MWorth at the going ratewhat teams paid for a season like his
+$4.2MValueworth minus cap hit; below zero is overpaid

His cap hit for the whole season, set against what he did in the regular season. Lower is better value. In a season still being played the cost per point starts high and falls as the games add up. Value is coloured by where it ranks among the 66 ranked goalies whose contract is known. How value is worked out.

The contract

Signed by the St. Louis Blues on Jun 28, 2025, as an extension of the contract he was on: 2 years and $6.8M, beginning in 2025-26. It runs through 2026-27, with 1 season left after this one.

Season Cap hit
2025-26 $3.4M
2026-27 $3.4M

Each season left on the contract. Only its cap hit and its end are known: how the pay is split by season, and any signing bonus, are not.

Contracts he has signed

Signed Signed by Kind Seasons Years In all Cap hit
Jun 28, 2025 St. Louis Blues Extension 2025-26 to 2026-27 2 $6.8M $3.4M
Jan 2, 2023 St. Louis Blues Extension 2023-24 to 2024-25 2 $1.55M $775K
Mar 21, 2019 St. Louis Blues Entry-level 2020-21 to 2022-23 signed for 2019-20, slid 3 $2.825M $795K

Every contract on record for him, newest first, with the team that signed him to it and the day it was signed. The one covering 2025-26 is marked. An extension is signed while the contract before it is still running, often a year ahead. A row with no team or date is a contract known only by its cap hit, most often one signed since October 2024.

2025-26 analytics

Rating

+26.5Goals above replacement11th of 66 goalies
+4.4Wins above replacementgoals above replacement divided by six
+13.5Goals above averagehis goals saved above expected

Each number is coloured by where it ranks among the 66 ranked goalies: green is in the top fifth and red the bottom fifth, with paler shades in between and amber for the middle. Hover over a tile for its percentile. Goals above average is coloured as it is under Shots faced below, where it is taken per 60 minutes.

The goals he saved for his team, compared with a spare-part goalie facing the same shots. A goalie's season is about one-third the goalie and two-thirds chance, so read one year lightly.

-1001020302021-222022-232023-242024-252025-262026-27Goals above replacementGoals above replacement, by season

Shots faced

Expected goals adds up how likely each shot he faced was to go in, judged by where it came from, what kind of shot it was and whether it was a rebound. A goalie who lets in fewer than that has saved goals above expected. Only shots taken while he was in net count, and the league's goalies as a whole come out at zero. What these numbers mean

+13.5Goals saved above expectedexpected goals minus goals against
127.5Expected goals againstfrom 1,950 unblocked attempts
114Goals againstwhile he was in net
0.909Save %0.898 expected from his shots

Goals saved above expected, taken per 60 minutes, and save % are coloured by where they rank among the 68 goalies who played enough to be ranked: green is in the top fifth and red the bottom fifth, with paler shades in between and amber for the middle. Hover over a tile for its percentile. The two goals against tiles are left plain, since they follow how much he played.

Goals saved +0.31 above expected per 60 minutes81st
Shot difficulty 6.5% chance per attempt faced13thA higher bar means his team gives up more dangerous shots.

Each bar shows the share of goalies he is ahead of, among the 68 who played at least a quarter as much as the busiest this season.

050100Game 10Game 20Game 30Game 40Expected 127.5Allowed 114

The goals he was expected to let in and the goals he did, as the season went on. When the allowed line runs below the expected line, he is saving more than his shots were worth.

Where he was shot at

Every unblocked attempt he faced this season, with his net on the right. Darker red means more attempts from that spot, and each dot is a goal. "Show every shot" switches to a dot for each attempt, bigger for a better chance. Click a goal for its details.

Game log

Date Opponent Result Decision Shots against Saves Goals against Save % TOI
Apr 16, 2026 @ UTA W 5-3 W 23 20 3 0.870 60:00
Apr 13, 2026 vs MIN W 6-3 W 31 28 3 0.903 59:50
Apr 11, 2026 @ CHI W 5-3 W 34 31 3 0.912 60:00
Apr 7, 2026 vs COL L 1-3 L 37 34 3 0.919 55:51
Apr 5, 2026 @ COL W 3-2 W 28 26 2 0.929 60:00
Apr 3, 2026 @ ANA W 6-2 W 27 25 2 0.926 59:34
Mar 30, 2026 @ SJS L 4-5 L 29 24 5 0.828 59:27
Mar 26, 2026 vs SJS W 2-1 (OT) W 25 24 1 0.960 64:57
Mar 24, 2026 vs WSH W 3-0 W, SO 21 21 0 1.000 59:19
Mar 18, 2026 @ CGY L 1-2 (SO) OTL 31 30 1 0.968 65:00
Mar 13, 2026 vs EDM W 3-2 (OT) W 38 36 2 0.947 64:51
Mar 10, 2026 vs NYI L 3-4 (OT) OTL 49 46 4 0.939 61:55
Mar 8, 2026 @ ANA W 4-0 W, SO 22 22 0 1.000 60:00
Mar 4, 2026 @ SEA W 3-2 W 36 34 2 0.944 60:00
Mar 1, 2026 @ MIN W 3-1 W 23 22 1 0.957 60:00
Feb 26, 2026 vs SEA W 5-1 W 24 23 1 0.958 60:00
Feb 2, 2026 @ NSH L 5-6 L 28 22 6 0.786 58:59
Jan 29, 2026 vs FLA W 5-4 W 20 16 4 0.800 60:00
Jan 24, 2026 vs LAK L 4-5 (SO) OTL 28 24 4 0.857 64:44
Jan 20, 2026 @ WPG L 1-3 L 15 13 2 0.867 57:55
Jan 16, 2026 vs TBL W 3-2 (SO) W 36 34 2 0.944 64:58
Jan 13, 2026 vs CAR W 3-0 W, SO 33 33 0 1.000 60:00
Jan 9, 2026 @ UTA L 2-4 L 23 19 4 0.826 56:28
Jan 2, 2026 vs VGK W 4-3 W 25 22 3 0.880 60:00
Dec 29, 2025 vs BUF L 2-4 L 33 30 3 0.909 59:29
Dec 27, 2025 vs NSH W 3-2 W 32 30 2 0.938 59:47
Dec 20, 2025 @ FLA W 6-2 W 29 27 2 0.931 60:00
Dec 17, 2025 vs WPG W 1-0 W, SO 24 24 0 1.000 60:00
Dec 15, 2025 vs NSH L 2-5 L 25 21 4 0.840 59:39
Dec 12, 2025 vs CHI W 3-2 W 29 27 2 0.931 59:54
Dec 11, 2025 @ NSH L 2-7 7 6 1 0.857 20:00
Dec 9, 2025 vs BOS L 2-5 L 30 26 4 0.867 58:00
Dec 6, 2025 @ OTT W 2-1 W 42 41 1 0.976 59:49
Dec 1, 2025 vs ANA L 1-4 20 19 1 0.950 48:16
Nov 29, 2025 vs UTA W 1-0 W, SO 18 18 0 1.000 60:00
Nov 24, 2025 @ NYR L 2-3 L 21 18 3 0.857 57:00
Nov 20, 2025 @ PHI L 2-3 (OT) OTL 28 25 3 0.893 63:51
Nov 15, 2025 vs VGK L 1-4 L 34 30 4 0.882 60:00
Nov 8, 2025 vs SEA L 3-4 (OT) OTL 30 26 4 0.867 61:57
Nov 6, 2025 @ BUF W 3-0 W, SO 28 28 0 1.000 60:00
Nov 5, 2025 @ WSH L 1-6 17 15 2 0.882 30:32
Nov 1, 2025 @ CBJ L 2-3 L 35 32 3 0.914 57:04
Oct 27, 2025 @ PIT L 3-6 L 25 20 5 0.800 59:53
Oct 23, 2025 vs UTA L 4-7 6 3 3 0.500 07:57
Oct 15, 2025 vs CHI L 3-8 L 22 15 7 0.682 47:45
Oct 11, 2025 @ CGY W 4-2 W 29 27 2 0.931 59:58