En hulvej (første led udtales: ˈhuːl) er en vejføring, som er skåret ned i terrænet for at mindske stigningsforholdet på vejen. Vejforløbet kan enten udnytte bestående, topografiske forhold (regnvandskløfter, forkastninger osv.), eller det kan være opstået gennem generationers slid på bakkeskråningen. I nyere tid er hulveje som regel kunstigt udgravede.
Før var hulveje risikable at passere. Dels kunne selve vejen være så opkørt, at det var umuligt at bruge den, dels måtte farten nedsættes så meget, at landevejsrøvere fik gode muligheder for at overmande kusk og passagerer. Det er muligvis derfor, at der står en aura af uhygge og dysterhed om de gammeldags, snævre hulveje.
I det fredede Alstrup Krat ved Mariager findes der hulveje, der blev brugt i oldtiden. På Alstrupvej løber en asfalteret hulvej med meget høje skråninger.
Rebildvej i Rebild Bakker er et eksempel på en hulvej, der overvejende er skabt af naturen selv som en slugt udgravet af smeltevand ved slutningen af sidste istid.
I nyere tid er der gravet flere meget dybe hulveje i Danmark: på Sandskårsvej i Frederiksværk er der ca. 16 m forskel på vejoverfladen og de omgivende skråninger. I Næstved gennemgravede man i 1940'erne Mogenstrup Ås for at etablere Østre Ringvej. Her er højdeforskellen ca. 23 meter.