The 22-year-old Horvat had 20 goals and 32 assists in 81 games last season for the Canucks.
''Bo has quickly become a foundational player on our team and we're thrilled for him to be a part of what we're building here long term,'' Canucks general manager Jim Benning said in a team release. ''His commitment and work ethic have helped his game improve each season. He's already a leader on our team and a young player fans can be excited to watch for years to come.''
Horvat has 49 goals and 68 assists in 231 career games in three seasons with Vancouver.
The Canucks open training camp Tuesday at Rogers Arena.