US federal income tax
Yes, as a US citizen, you have to file a US federal income tax return every year, regardless of residence, unless your gross income is below the filing threshold (page 10, Chart A) (for 2018: US$12,000 for a single person under 65).
You must report all worldwide income. However, there are some ways your US federal tax on foreign earned income may be reduced:
- If you are a bona fide resident of Canada for the entire tax year (January-December), you can file Form 2555 to avoid US federal tax on foreign earned income up to US$103,900 (for 2018). However, you might not be a bona fide resident of Canada for US tax purposes if your presence in Canada is for the purpose of studying, since it is expected that you will return to the US at the end of your studies.
- If you're not using Form 2555, and you had to pay Canadian tax on your income, you can file Form 1116 to reduce your US tax liability by the amount of Canadian taxes you paid.
- The above methods will probably reduce your US federal tax liability to $0. In case they don't, the US-Canada tax treaty might contain provisions to help you further, although I don't have the details.
US state and local taxes
Whether you have to file state and local taxes in the US will vary depending on the rules of your US state and locality of residence. If you are a bona fide resident of Canada, you are no longer a resident of your US state and do not have to pay its taxes; however, as above, you may not be a bona fide resident if your presence in Canada is for the purpose of studying.
Even if you are no longer a resident of your US state, many states and localities require you to file a "final return" indicating the date that your residency in the state or locality ended, so they will know why you stopped paying taxes to them.
This page says that TurboTax and TaxAct should both work. If you like, you can use FreeFile or another efile option. Of course you can always file on paper if you can figure out the instructions (this is practical only if your situation is pretty simple).