Getting Started with Roots Sage for WordPress Development

19 Nov 2025

A practical walkthrough using Local, Tailwind and ACF — and why Sage is the perfect stepping stone into Laravel.

WordPress development has changed dramatically in recent years. Gone are the days when building custom themes meant wrestling with messy PHP templates, inconsistent stylesheets and endless plugin dependencies.

If you want to learn modern PHP, Tailwind, Laravel-style structures and ACF block development — all while building real, production-ready WordPress sites — Sage is hands-down the best place to start.

This guide walks through:

  • Why Sage is worth learning in 2025
  • Why it’s a fantastic gateway into Laravel
  • What makes Sage fundamentally different from normal WP starter themes
  • How to set everything up using Local
  • Common pitfalls (based directly on our real setup process)
  • How to extend it with ACF, your own starter blocks and Tailwind

Let’s get into it.

Why Sage? And Why Now?

Sage has been around for years, but it’s in the last few versions that it has really become a standout framework. Modern WordPress development requires:

  • Component-based structure
  • Scalable front-end tooling
  • Real templating logic
  • Performance by default
  • Tailwind integration
  • Support for custom blocks and ACF-driven sites
  • Clean, maintainable developer experience

Typical starter themes simply cannot offer all of that. Sage can.

Key benefits at a glance

✔ Laravel-style project structure
✔ Blade templating (instead of PHP spaghetti)
✔ Tailwind integrated out of the box
✔ Automatic template inheritance
✔ Perfect companion for ACF Blocks
✔ Works beautifully with plugin-based block systems
✔ Developer-first, no bloat, no page builders

This means you’re building real websites, with real code, and real performance, while naturally learning best practices used in Laravel and modern PHP.

Why Sage is a Great Way to Learn Laravel

Laravel can be intimidating at first. The syntax is beautiful but the ecosystem is huge. Sage gives you a “Laravel starter pack” inside WordPress:

1. Blade templating

Laravel and Sage both use Blade.
If you learn Blade in Sage, you already know Blade in Laravel.

2. Cleaner MVC-style structure

You learn to separate:

  • views
  • controllers
  • components
  • partials
  • assets

These concepts mirror Laravel’s folder structure and logic.

3. Modern build tooling

Bud’s configuration mirrors Vite / Mix approaches you’ll later see in Laravel.

4. Tailwind as a first-class citizen

Laravel Breeze / Jetstream / Filament all use Tailwind too.
Once you understand Tailwind in Sage, it transfers instantly.

5. Composer workflow

Laravel and Sage both rely on Composer.
This gets you used to package management, autoloading and PSR-4.

In short: Sage is the perfect training wheels for Laravel, without giving up WordPress.

What Makes Sage Unique Compared to Normal WP Starter Themes

A typical WordPress starter theme gives you:

  • A functions.php
  • A style.css
  • A few random template files
  • A gulp/webpack config from 2014

It works, but it’s messy and hard to scale.

Sage is different.

1. Blade instead of PHP templates

You don’t write header.php, footer.php, index.php templates full of mixed HTML/PHP.
You write clean Blade templates like:

@extends('layouts.app')

@section('content')
  <h1>{{ $title }}</h1>
@endsection

2. Controllers

You can pass data to templates the Laravel way using simple PHP controller classes.

3. Components and partials

You can create small, reusable Blade components like:

<x-button text="Buy now" />

This is far cleaner than including template parts manually.

4. Modern asset pipeline

Out of the box you get:

  • Tailwind
  • PostCSS
  • ESBuild bundling
  • Hot reloading
  • Automatic asset versioning

5. Better organisation for ACF blocks

Sage + ACF is a dream setup.
Each block gets:

  • its own Blade view
  • its own controller
  • its own classes
  • its own Tailwind styling
  • optional JS module

No more random block-name.php templates lying around.

Setting Up Sage in Local (Step-by-Step)

1. Create a fresh Local site

Use PHP 8.2 or 8.3.

Set the domain to something simple like:

sage.local

Or whatever project you’re starting.

Install WordPress normally.

2. Install Sage via Composer

Open the Local site shell and run:

composer create-project roots/sage your-theme-name

Make sure you have at least composer 2 installed on your machine.

3. Install dependencies

Inside the theme folder:

npm install

4. Enable dev mode

Run:

npm run dev

This does two things:

  • starts the Bud development server
  • enables hot module replacement

Important:
Your Local domain must be accessible over HTTPS for hot reload to work.

If Local didn’t generate an SSL certificate, enable “Trust” in Local → SSL tab.

5. Fixing the hot reload error in Local

Hot reload only works when devUrl matches your Local domain.

In .env, set: (you may need to create this file manually)

APP_URL=http://sage.local

The above is my own dev url, you can set it to whatever you chose when setting up a local WordPress environment.

6. Add the below code to vite.config.js

This makes sure hot reloading actually works with local

server: {
    // keep Vite on localhost:5173
    host: '127.0.0.1',
    port: 5173,
    strictPort: true,
    cors: {
      // allow your LocalWP domain to talk to Vite
      origin: /https?:\/\/[A-Za-z0-9\-]+\.local(?::\d+)?$/,
    },
  },

7. First build

To build production assets:

npm run build

This will generate the /public folder and ensure the theme works when dev mode is off.

Adding Tailwind & Custom Sources

Sage ships with Tailwind 4 syntax (no config file).

To scan your plugin folders (e.g. ACF Blocks, Fancoolio), add:

@source "../../../plugins/fancoolo/**/*.{php,html,js,ts,vue,twig}";
@source "../../../plugins/fancoolo-blocks/**/*.{php,html,js,ts,vue,twig}";

The above example shows how you can use the new fancoolio plugin with sage and have sage watch fancoolio for any tailwind classes. Instant feedback and hot reloading!

Adding ACF & Starting With Custom Blocks

ACF doesn’t need anything special — just install and activate it.

You can create a folder such as:

resources/views/blocks/

Then place each block in a Blade file:

resources/views/blocks/hero.blade.php

In your ACF block registration, point to that file:

'render_template' => get_theme_file_path('/views/blocks/hero.blade.php'),

Why ACF + Sage Works So Well

  • Blade gives clean markup
  • Tailwind gives rapid styling
  • Each block gets its own isolated styles
  • Controllers let you process data cleanly
  • You avoid template clutter

If you’re already using a plugin-based block system such as Fancoolio, Sage automatically picks up the classes thanks to Tailwind’s @source scanning.

Common Issues Beginners Hit (and How We Solved Them)

1. Site only works during “npm run dev”

Fix:

npm run build

2. Template errors using WooCommerce

We tried to add:

add_theme_support('woocommerce');

But Sage already adds WooCommerce support.

Adding these again caused JS conflicts — removing them fixed everything.

Why Sage Is So Good for Agencies and Freelancers

This is the bit your boss needs to understand:

  • You’re building real custom sites, not page-builder clones
  • No licence fees
  • Faster performance
  • Cleaner codebase
  • Better long-term scalability
  • Higher project value (you can charge more)
  • Clients get a site that feels “premium” and hand-crafted
  • Developers get a framework they can keep reusing

Sage makes every new build faster than the last.

Conclusion

If you’re serious about modern WordPress development — or you want a gentle but powerful introduction to Laravel — Sage is one of the best frameworks you can learn today.

It gives you:

  • Real Blade templating
  • Real Tailwind workflow
  • Real modern PHP
  • Real structure
  • Real performance

And combined with ACF or your own custom block system, you can produce extremely polished websites without ever touching a page builder.

If you are ready for BBI to deliver you an enterprise level WordPress website built on a modern toolset like Sage, get in touch today.

wp.bbi.co.uk
Privacy Overview

This website uses cookies so that we can provide you with the best user experience possible. Cookie information is stored in your browser and performs functions such as recognising you when you return to our website and helping our team to understand which sections of the website you find most interesting and useful.