Skip to content
NHLFantasyHub
Menu

Players

2,262 players, all seasons

Position

Status

Club

PosPlayerTeamBornBirthplace
DKevin ConnautonInactive1990Edmonton, Alberta, CAN
DKevin CzuczmanInactive1991Port Elgin, Ontario, CAN
LKevin FialaLAKLAKLAKLos Angeles Kings1996not recorded
DKevin GravelInactive1992Kingsford, Michigan, USA
RKevin HayesInactive1992Dorchester, Massachusetts, USA
DKevin KleinInactive1984Kitchener, Ontario, CAN
DKevin KorchinskiCHICHICHIChicago Blackhawks2004not recorded
RKevin LabancInactive1995Brooklyn, New York, USA
GKevin LankinenVANVANVANVancouver Canucks1995not recorded
GKevin MandoleseInactive2000Blainville, Quebec, CAN
CKevin PorterInactive1986Detroit, Michigan, USA
CKevin RooneyInactive1993Canton, Massachusetts, USA
CKevin RoyInactive1993Greenfield Park, Quebec, CAN
DKevin ShattenkirkInactive1989New Rochelle, New York, USA
CKevin StenlundUTAUTAUTAUtah Mammoth1996not recorded
LKiefer SherwoodSJSSJSSJSSan Jose Sharks1995not recorded
LKieffer BellowsInactive1998Edina, Minnesota, USA
CKirby DachMTLMTLMTLMontréal Canadiens2001not recorded
LKirill KaprizovMINMINMINMinnesota Wild1997not recorded
DKirill KudryavtsevInactive2004Yaroslavl, RUS
RKirill MarchenkoCBJCBJCBJColumbus Blue Jackets2000not recorded
CKirill SemyonovInactive1994Omsk, RUS
DKlas DahlbeckInactive1991Katrineholm, SWE
CKlim KostinInactive1999Penza, RUS
RKole LindInactive1998Swift Current, Saskatchewan, CAN
RKole SherwoodInactive1997Columbus, Ohio, USA
CKonsta HeleniusBUFBUFBUFBuffalo Sabres2006not recorded
DKorbinian HolzerInactive1988Munich, DEU
DKris LetangPITPITPITPittsburgh Penguins1987not recorded
DKris RussellInactive1987Caroline, Alberta, CAN
GKristers GudlevskisInactive1992Aizkraukle, LVA
CKristian ReichelInactive1998Most, CZE
DKristians RubinsInactive1997Jurmala, LVA
LKristian VesalainenInactive1999Helsinki, FIN
RKris VersteegInactive1986Lethbridge, Alberta, CAN
RKurtis GabrielInactive1993Newmarket, Ontario, CAN
LKurtis MacDermidOTTOTTOTTOttawa Senators1994not recorded
CKyle BrodziakInactive1984St. Paul, Alberta, CAN
DKyle BurroughsDALDALDALDallas Stars1995not recorded
DKyle CapobiancoDALDALDALDallas Stars1997not recorded
LKyle CliffordInactive1991Ayr, Ontario, CAN
LKyle ConnorWPGWPGWPGWinnipeg Jets1996not recorded
CKyle CriscuoloInactive1992Southampton, New Jersey, USA
CKyle MacLeanNYINYINYINew York Islanders1999not recorded
RKyle OkposoInactive1988St. Paul, Minnesota, USA
CKyle PalmieriNYINYINYINew York Islanders1991not recorded
DKyle QuinceyInactive1985Kitchener, Ontario, CAN
CKyle RauInactive1992Eden Prairie, Minnesota, USA
CKyle TurrisInactive1989New Westminster, British Columbia, CAN
LLance BoumaInactive1990Provost, Alberta, CAN

Birth details are read from club rosters. 16 of these 50 players have no birthplace on file yet. A player who is on no NHL roster is listed here because he has a season stat line, and that report carries a name, a position and nothing else; anyone currently rostered fills in the next time his club is synced.

Page 25 of 46

What a player page adds that a row in this list cannot

A row here is a name, a position and a club. The page behind it is a career: every season on file as its own line, with regular-season and playoff totals kept on separate rows rather than added together — which means a player's playoff record can be read on its own instead of being smuggled into his season.

Under the career table sits the part a season total structurally cannot give you — the game-by-game log, and rolling splits over the last five and last ten appearances. A season number answers what a player has produced. The splits answer whether he is producing it now, which is the question anyone actually opens a player page in January to settle. The windows cover only games he played, so a five-game split is five games and never five nights padded with the ones he sat out.

The season control on that page scopes the log and the splits, and deliberately not the career table: comparing seasons is the entire reason the career table exists. Only seasons with per-game lines collected appear in the control, which is fewer than the career table shows while older seasons are still being backfilled — a season missing from the picker is a gap in the per-game collection, not a season the player did not play.

None of it is a forecast. Every number on a player page describes production that has already happened, and nothing on the page knows he was hurt, changed line, or signed somewhere else in July.

Every filter on this page is an address

The position chips, the status chips and the club selector all change the URL and re-render on the server. That makes each one shareable, bookmarkable, crawlable, and functional with JavaScript switched off — the list of every current defenceman on a club is a link you can send someone, not a state you have to describe to them.

The page number is dropped whenever a filter changes, on purpose. Page four of the defencemen is not page four of the goaltenders; carrying the number across would land you in the middle of a list you have just started, or past the end of a shorter one, with nothing on screen to say anything had been skipped.

Typing in the search field puts the page into a different mode rather than narrowing the one you were in. Browsing walks an alphabetical index one page at a time; searching ranks the whole table against your term and returns the closest matches in one shot. The status control disappears while you are searching because search already reaches every player ever recorded here — a control that could only narrow that would hide the retired player whose name you just typed.

Why the club beside a name is today's club, and why most all-time rows have none

The club shown here is the one the player is on now. It is not the club a past season's numbers happened at, and on this site those are answered by different mechanisms: the directory reads the current roster, while a stat line is attributed to a club using dated spells derived from the games the player actually appeared in. For anyone traded in the last decade the two disagree, and only one of them is a claim about the season you are reading.

The default view lists players on an NHL roster today. All-time reaches back through every season the site holds, and almost everything it adds is a player who exists here only because he turned up in a season summary — the ingest writes a row for anyone with a stat line who is on no roster, so ten seasons of departures sit in the table beside this morning's rosters.

Those rows are thinner than they look, and knowingly so. A player recorded from a stat line carries a name, a position and his statistics; his date of birth, height, weight and shooting hand are absent, because the report he came from never carried them. His page shows an em dash where a current player shows a number. That dash is a statement about what the source contained, not a value of zero and not a rendering fault.

One practical consequence: combining the all-time view with a club filter adds almost nothing, because the rows all-time adds are precisely the ones with no club to match against. To see who played for a club in a particular season, start from that season on a player's page rather than from this filter.

How the search box decides which Smith comes first

Matching is on any part of the name, because the useful query for a hockey name is usually neither the whole thing nor its beginning — people type “mcdavid”, not “connor mcdavid”. A plain contains-match ranks by nothing at all, though: it would put a player whose name merely contains your letters somewhere above the one whose surname is exactly what you typed, whenever the alphabet happened to say so. So matches are sorted into four tiers before anything else is considered.

Inside every tier, current players sort above former ones. Ten seasons of history means a common surname returns a dozen people, most of whom left the league years ago, and the one still playing is nearly always the one being looked for. It is a tiebreak and never a filter — everyone who matched is still in the list, further down.

Relevance ordering has one consequence worth stating: results are capped rather than paginated. A list sorted by how well the name matches has no useful second page, so the cap is where the ordering stops being informative rather than an arbitrary ceiling — which is why adding a letter finds a player and paging would not.

How a search term is ranked, tier by tier

Applied in order: a match falls into the first tier it qualifies for. Within a tier, players active today sort above former ones, and anything still level is broken alphabetically.

OrderWhat matchesExample
1The whole name, ignoring case“connor mcdavid” puts Connor McDavid first
2The name starts with the term“connor” reaches every Connor in the league
3A word inside the name starts with the term — a surname, or either half of a hyphenated one“mcdavid” finds him by surname; “luc” finds Pierre-Luc Dubois
4The term appears anywhere else in the name“avid” still finds McDavid, below everything matched above

Questions about this directory

Why does searching for an NHL player's name without accents find nothing?

Player search matches the stored name literally, accents included, so an unaccented spelling of a name that carries a non-ASCII character matches nobody. The way around it is to type only the part of the name before the accented letter and stop — “lafren” finds Alexis Lafrenière where “lafreniere” finds no one — or to reach the player from his club's roster instead. It affects a small share of players, and it is a known limitation of the current matching rather than a gap in the data: the player's page, statistics and rankings all exist and are reachable every other way.

Does the player search on NHL Fantasy Hub include retired players?

Yes, and it does so whatever the Current or All-time control is set to — that control governs browsing only, and search deliberately ignores it. Hiding a player from someone who has typed his name would make the site look as though it had never heard of him, so every player with a stat line on record, ten seasons back, is reachable by name. Players active today are ranked above former ones among equally good matches, so a common surname still puts the man playing now at the top of the list.

Why do player search results stop at fifty?

Because results are ordered by how closely the name matches rather than alphabetically, which makes a second page nearly worthless: by the fiftieth match the name merely contains the letters somewhere. Adding one more letter finds a specific player faster than paging ever would, and the page says so when it has reached the cap. Every player is also reachable without searching, by filtering the directory on position and club or by opening his club's roster.