In Lafayette, Indiana, in September 1999, Jeremy Camp (KJ Apa) departs for Calvary Chapel College in Murrieta, California. The night of his arrival, he goes to a concert of Canadian Christian band, the Kry, where he meets the lead singer, Jean-Luc LaJoie (Nathan Parsons), who become fast friends with Jeremy, who turns to him for musical advice.
After the concert, Jeremy meets Melissa Henning (Britt Robertson), a fellow student at his school, and friend of Jean-Luc, who loves Melissa, but Melissa does not reciprocate the feeling. Jeremy and Melissa get to know each other, and quickly begin dating, causing a rift among Jeremy, Melissa, and Jean-Luc. As a result, Melissa ends her relationship with Jeremy. Jeremy goes back to his family’s home in Indiana for Christmas break. A few days after Christmas, Jeremy receives a phone call from Jean-Luc, saying that Melissa is sick, and asks Jeremy to come back to California.
Upon his arrival, Jeremy visits Melissa in the hospital, who tells him that she has been diagnosed with Stage 3C cancer in her liver. Melissa also tells Jeremy that she loves him. Jeremy says the same, and proposes to her. Melissa accepts. During this time, Jeremy begins to make a name for himself as a Christian singer-songwriter. Melissa learns that the cancer has spread to her ovaries, and that she needs a surgery that will leave her infertile. After the surgery was supposed to happen, Melissa wakes up to Jeremy, who tells her the surgery was canceled because she is now cancer-free. Six months later, Jeremy and Melissa marry. Everything seems perfect until after their honeymoon, Melissa wakes up in pain. Jeremy takes her to the hospital, where they find out her cancer has returned, and that nothing more can be done for her.
As Melissa grows weaker, Jeremy begins to question his faith in God. In the hospital, Jeremy sings a song he wrote (“Walk by Faith”) during their honeymoon. Melissa dies shortly after. Jeremy becomes angry at God, and chooses to abandon his musical career, smashing his guitar until it breaks. Inside the guitar, Jeremy finds a note Melissa left for him to find after her death, telling him that suffering does not damage faith, but strengthens it. Her parting words encourage him to continue writing songs.
Two years later, Jeremy performs a song he wrote after Melissa’s death (I Still Believe) about his suffering, but eventually restored faith. After the concert, he meets a girl named Adrienne (Abigail Cowens), who tells Jeremy that she lost someone close to her, and she was angry at God, and his songs changed her life. Jeremy promises to share Melissa’s story, believing that God will use it to change lives. The credits reveal that Jeremy and Adrienne got married in 2003, and have three children.