# How to compile a custom theme?

**URL:** <https://forum.ghost.org/t/how-to-compile-a-custom-theme/22315>\
**Category:** Themes\
**Created:** [April 30, 2021, 4:28am UTC](https://forum.ghost.org/t/how-to-compile-a-custom-theme/22315 "2021-04-30T04:28:08Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![dark](https://sea1.discourse-cdn.com/flex015/user_avatar/forum.ghost.org/dark/32/12971_2.png) [@dark](https://forum.ghost.org/u/dark)\
**Post date:** [April 30, 2021, 4:28am UTC](https://forum.ghost.org/t/how-to-compile-a-custom-theme/22315/1 "2021-04-30T04:28:08Z")

</div>

Hello,

I was following along with the [documentation for themes](https://ghost.org/docs/themes/), and upon copying the Casper theme, making changes, and making sure that the theme is selected in my local instance, no changes are being made.

I then noticed a separate “built” folder in the theme. This implies that I need to build or compile the theme.  
 ![image](https://us1.discourse-cdn.com/flex015/uploads/ghost2/original/2X/8/82d903a885a7b2d04e75ec57a3f939ec8dece281.png)

I searched all through the Ghost docs and Handlebars docs, but I could not find _anything_ about compiling the theme. How do I go about this?

---

<div class="post-metadata">

**Author:** ![dark](https://sea1.discourse-cdn.com/flex015/user_avatar/forum.ghost.org/dark/32/12971_2.png) [@dark](https://forum.ghost.org/u/dark)\
**Post date:** [April 30, 2021, 5:15am UTC](https://forum.ghost.org/t/how-to-compile-a-custom-theme/22315/2 "2021-04-30T05:15:31Z")

</div>

So it turns out that I was being a little dumb.

I did not realize that the themes actually had scripts associated to them with building, so I had deleted the original `package.json` and ran `npm init`.

By copying the scripts and devDependencies over from the example Casper theme, I ran `npm run pretest`, it built the theme, and then restarting ghost recognized the changes.

I know that the docs mentioned “previous experience” making it “a breeze”, but I really wish it still at least pointed out those steps. I was expecting a more proprietary approach, and that’s the docs led me to believe initally.

Edit: Also, running `npm run dev` and then for ghost `ghost restart -D`, I can manually reload the page and see the changes. Though, I guess live reloading doesn’t really exist?
