Зав’язка. У місті Маркет-Чіппінг Софі Гаттер стає жертвою закляття старості через ревнощі Відьми Пустирищ. Софі покидає дім і знаходить притулок у Мандрівному Замку. Там вона домовляється з демоном Кальцифером: він зніме її чари, якщо вона розірве його контракт із магом.

Розвиток дії. Софі стає прибиральницею в замку, де також живе учень Майкл. Вона дізнається, що Хаул — не лиходій, а людина, яка панічно боїться Відьми. Замок має двері з кольоровим диском: жовтий веде до рідного міста Софі, синій — до Портхавена, червоний — до столиці Кінгсбері, а чорний — до реального світу (Уельсу), де живе родина Хаула. Софі поступово «оживляє» замок, рятує Опудало-Ріпку та намагається змінити характер Хаула.

Кульмінація. Відьма Пустирищ атакує, заманюючи Хаула в пастку. Софі з'ясовує, що контракт — це буквально серце мага в руках демона. Коли Відьма намагається вирвати Кальцифера з каміна, Софі обливає їх водою, але потім розуміє, що ледь не вбила обох. Використовуючи свій дар, вона повертає серце в груди Хаула і водночас дарує свободу Кальциферу.

Розв’язка. Чари Софі зникають, коли вона нарешті переборює свої комплекси (її волосся залишається сріблястим як знак пережитого). З'ясовується, що Опудало-Ріпка — це частини зниклих принца Джастіна та мага Салімана. Кальцифер вирішує залишитися в замку як друг, а Хаул і Софі знаходять спільне щастя.