Migrating
Migrate from WordPress
Timber includes a WordPress Migrator Wizard (padmin → Migrate from WordPress). Upload an export, show it your old site's look, review what it found, and import. Your live site never changes until you press Make live — the new design arrives as a private version.
What you need#
Everything is optional, but you need at least one thing.
| You provide | How to get it | Timber uses it for |
|---|---|---|
| Export file (.xml) | In WordPress: Tools → Export → All content → Download Export File | Posts, pages, menus, image library, categories, excerpts, dates, featured images, Yoast / Rank Math titles & descriptions |
| Your site's address | Just type it | Reads the homepage and its stylesheets to find colours, fonts, logo, favicon and social links |
| Your theme (.zip) | Zip the active theme folder from wp-content/themes/ | The theme's CSS, theme.json palette and fonts, and any self-hosted font files |
| A saved homepage (.html) | Browser → File → Save Page As → "Webpage, HTML only" | Same as the address, but offline |
| "Fetch from my live site" | Tick the box (needs the address) | Posts and pages through the public WordPress REST API, when you don't have an export file |
More is better. The export brings your content; the address, theme zip or saved page bring your look.
The four steps#
- What you have. Upload your files and/or enter your address. Press Read my site.
- Analyze. Timber reads everything and writes nothing to your site yet.
- Review. See counts, warnings and the detected design — colours, fonts, corner radius, page width, logo — each editable, with a live preview. Choose what to import.
- Import & done. You get a report, a preview link, a Make it live button, and Undo.
What comes across#
| WordPress | In Timber |
|---|---|
| Posts | Posts, with category, excerpt, date, featured image and SEO title/description. Future-dated posts stay scheduled |
| Drafts / pending / private | Skipped, or imported as drafts if you tick Include drafts |
| Pages | Pages using the HTML editor, so markup isn't altered. Child pages become parent/child |
| Menus | Your primary menu becomes the Header menu; a footer-style menu becomes Footer. Nesting is kept |
| Images and files | Downloaded into your media library; content re-pointed at the local copies |
| Old URLs | 301 redirects from the old permalinks to the new addresses |
| Gutenberg and classic content | Block comments removed, paragraphs added, [caption], [gallery], [embed], [video] converted |
| Site title and tagline | Optionally applied to Timber |
| Logo, favicon, social links | Picked up from your homepage |
| Fonts and colours | Rebuilt as a new Timber theme (below) |
What doesn't#
- Plugin shortcodes (forms, sliders, popups…) are removed and listed in the report. Use Timber forms instead.
- **
<script>tags and inline event handlers** in imported content are removed for safety. Add trusted scripts back through Blocks. - Custom post types, comments and users aren't imported.
- Page-builder layouts (Elementor, Divi, WPBakery) arrive as HTML and usually need tidying.
How the old look becomes a Timber theme#
Timber reads your stylesheets and works out:
| Token | How it's chosen |
|---|---|
| Background & text | body / :root rules, then variables named background, foreground, contrast… |
| Accent | The colour your buttons use, then link colour, then the most-used saturated colour |
| Second accent | The next most-used colour that's clearly a different hue |
| Fonts | The first real family on body and on headings. Google Fonts URLs and @font-face names fill gaps. "System font" stacks mean keep the theme default |
| Corner radius & page width | The most common values on buttons/cards and containers |
It then forks a starter theme — Birch for light sites, Ebony for dark ones, or Ghost if you choose — appends a small block of design tokens, and creates a private version whose homepage shows your site title, tagline, hero image and latest posts. Because it's a normal theme, everything in Building themes applies: edit its CSS, fork it again, or restyle it from the Playground.
You choose how fonts load:
- Use the font files from the theme — self-hosted, fastest, no third-party requests.
- Load the same Google Fonts the old site used — contacts Google.
- Don't load fonts — uses the font if the visitor has it, otherwise a system font.
Images take a few rounds#
Large libraries are downloaded in timed batches (so shared hosts don't time out). The done page shows Download the next batch until everything is in. Any image that fails keeps loading from your old site, so nothing breaks while you wait.
After the import#
- Preview the new version and click around.
- Check a few imported posts and pages.
- Set SEO → Site URL to the address the site will live at.
- Edit the new version's homepage in the Playground.
- Press Make live when you're happy. Redirects from your old URLs are already in place.
Safety#
- Admin-only and CSRF-protected like every admin action.
- Crawling refuses link-local addresses always, and private addresses unless Timber itself runs locally — so a hosted Timber can't be used to probe an internal network.
- Downloads are type-checked, MIME-checked, size-capped; SVGs are scanned for scripts.