Written by 10:00 am Gutenberg & FSE, Tutorials & Guides, WordPress Development Views: 17

Building a WordPress Site With Only Core — No Plugins, No Page Builders

Build a complete WordPress site using only core features. Learn how FSE, theme.json, block patterns, and template parts make plugin-free sites viable.

Building a WordPress site with only core features - no plugins, no page builders

WordPress powers over 43% of the web, yet most sites run dozens of plugins for functionality that WordPress itself can handle natively. With Full Site Editing (FSE), theme.json, block patterns, and template parts now built into WordPress core, building a complete website without a single plugin or page builder is not only possible — it is a genuinely practical approach for many projects.

This tutorial walks through building a full WordPress site using only core features. No Elementor, no WPBakery, no ACF, no Contact Form 7. Just WordPress, the block editor, and the Twenty Twenty-Five theme. We will cover navigation, layouts, contact forms, custom templates, typography, colors, and performance — all without touching a plugin installer.

Why Build Without Plugins?

The question comes up constantly in WordPress communities. A Reddit thread titled “If you couldn’t use WordPress” gathered 96 comments from developers frustrated with plugin bloat. Another post, “Not One Single Youtube Tutorial?!” with 35 comments, highlighted the gap in educational content about vanilla WordPress capabilities.

There are concrete reasons to minimize or eliminate plugins:

  • Performance: According to the WordPress.org plugin handbook, each active plugin adds PHP execution time. A 2024 HTTP Archive analysis found that the median WordPress page loads 24 external scripts, many from plugins. Fewer plugins means fewer HTTP requests, less JavaScript, and faster page loads.
  • Security: Patchstack’s 2024 State of WordPress Security report found that 97% of WordPress vulnerabilities come from plugins and themes, not WordPress core. Every plugin you add is another potential attack surface.
  • Maintenance: Plugin updates can break compatibility. The fewer dependencies your site has, the less time you spend managing update conflicts, deprecated features, and abandoned plugins.
  • Simplicity: A site built on core features uses documented, stable APIs maintained by the WordPress core team. You do not depend on a third-party developer’s roadmap or business decisions.

“The editor is becoming the framework. What used to require a page builder or custom theme code is now part of WordPress itself.”

Matias Ventura, WordPress Gutenberg Lead Architect — Make WordPress Core

What Full Site Editing (FSE) Actually Gives You

Full Site Editing, officially available since WordPress 5.9 and significantly refined in WordPress 6.x, transforms how you build sites. Before FSE, the block editor only controlled post and page content. Headers, footers, sidebars, and archive templates still required PHP theme files. FSE changes that entirely.

Core FSE Components

FeatureWhat It ReplacesAvailable Since
Site EditorTheme Customizer + PHP templatesWordPress 5.9
Template Partsheader.php, footer.php, sidebar.phpWordPress 5.9
Block PatternsPage builder presets / shortcodesWordPress 5.5
theme.jsonfunctions.php theme support declarationsWordPress 5.8
Global StylesAdditional CSS in CustomizerWordPress 5.9
Navigation Blockwp_nav_menu() + walker classesWordPress 5.9
Query Loop BlockCustom WP_Query PHP templatesWordPress 5.8

Combined, these features give you visual control over every part of your site that previously required PHP template editing or a page builder plugin. The Twenty Twenty-Five theme, WordPress’s latest default theme, is built entirely on these FSE features and serves as our foundation.


Setting Up Your Plugin-Free WordPress Site

Step 1: Install WordPress with Twenty Twenty-Five

Start with a fresh WordPress installation. During setup, select the Twenty Twenty-Five theme. This theme is a block theme that uses theme.json for all its design configuration. It includes no bundled plugins, no required dependencies — just core WordPress.

After installation, navigate to Appearance → Editor to access the Site Editor. This is your command center. From here, you can edit templates, template parts, styles, and navigation — everything that defines your site’s structure and appearance.

Step 2: Configure theme.json for Global Design

The theme.json file is the design system for your entire site. It controls colors, typography, spacing, layout widths, and block-level settings. You do not need a CSS plugin or custom code — theme.json handles it all declaratively.

Here is an example theme.json configuration that sets up a professional design system. You can create a child theme with just this single file to override Twenty Twenty-Five’s defaults:

{
  "$schema": "https://schemas.wp.org/trunk/theme.json",
  "version": 3,
  "settings": {
    "color": {
      "palette": [
        { "slug": "primary", "color": "#1e40af", "name": "Primary" },
        { "slug": "secondary", "color": "#7c3aed", "name": "Secondary" },
        { "slug": "accent", "color": "#059669", "name": "Accent" },
        { "slug": "background", "color": "#ffffff", "name": "Background" },
        { "slug": "foreground", "color": "#1f2937", "name": "Foreground" },
        { "slug": "muted", "color": "#f3f4f6", "name": "Muted" }
      ],
      "gradients": [
        {
          "slug": "hero-gradient",
          "gradient": "linear-gradient(135deg, #1e40af 0%, #7c3aed 100%)",
          "name": "Hero Gradient"
        }
      ]
    },
    "typography": {
      "fontFamilies": [
        {
          "fontFamily": "system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif",
          "slug": "system",
          "name": "System"
        }
      ],
      "fontSizes": [
        { "slug": "small", "size": "0.875rem", "name": "Small" },
        { "slug": "medium", "size": "1rem", "name": "Medium" },
        { "slug": "large", "size": "1.25rem", "name": "Large" },
        { "slug": "x-large", "size": "2rem", "name": "Extra Large" },
        { "slug": "xx-large", "size": "3rem", "name": "Huge" }
      ]
    },
    "layout": {
      "contentSize": "720px",
      "wideSize": "1200px"
    },
    "spacing": {
      "units": ["px", "rem", "%", "vw"]
    }
  },
  "styles": {
    "color": {
      "background": "var(--wp--preset--color--background)",
      "text": "var(--wp--preset--color--foreground)"
    },
    "typography": {
      "fontFamily": "var(--wp--preset--font-family--system)",
      "fontSize": "var(--wp--preset--font-size--medium)",
      "lineHeight": "1.7"
    },
    "blocks": {
      "core/heading": {
        "color": { "text": "var(--wp--preset--color--foreground)" },
        "typography": { "fontWeight": "700" }
      },
      "core/button": {
        "color": {
          "background": "var(--wp--preset--color--primary)",
          "text": "#ffffff"
        },
        "border": { "radius": "6px" }
      }
    }
  }
}

This single JSON file replaces what would typically require a CSS customization plugin, a typography plugin, and often a color management tool. Every setting here is documented in the official WordPress theme.json reference.

Step 3: Build the Header with Template Parts

In the Site Editor, go to Patterns → Template Parts → Header. Here you can build a complete header using only core blocks:

  1. Site Title block: Displays your site name, linked to the homepage. No logo plugin needed — the Site Logo block handles images natively.
  2. Navigation block: This is one of FSE’s most powerful additions. It creates responsive menus with dropdowns, mobile hamburger toggles, and submenu support. No menu walker plugin required.
  3. Social Icons block: Add social media links using WordPress’s built-in social icons block. No social media plugin needed for basic icon links.
  4. Search block: Add a search form directly in the header. It uses WordPress’s native search functionality.

Arrange these in a Row block or Group block for horizontal layout. Use the block editor’s spacing controls to set padding and gaps. The Navigation block’s responsive settings handle mobile breakpoints automatically — collapsing into a hamburger menu below a width you specify.

Step 4: Create the Footer Template Part

The footer follows the same pattern. In the Site Editor, edit the footer template part and build it with:

  • Columns block: Create a 3 or 4-column layout for footer widgets.
  • Navigation block: Add footer navigation links (Privacy Policy, Terms, About).
  • Paragraph block: Copyright text with the current year.
  • Social Icons block: Repeat social links in the footer for accessibility.

Apply a dark background color from your theme.json palette to the footer’s Group block, and set text to a light color. No footer plugin, no widget plugin — just blocks and template parts.


Building Page Layouts Without a Page Builder

The block editor in WordPress 6.x includes layout capabilities that directly compete with page builders. Here are the core layout blocks and how to use them effectively.

Hero Sections with the Cover Block

The Cover block creates full-width hero sections with background images or colors, overlay opacity, and text placement. Add a Heading block and Paragraph block inside it for the hero text, then a Buttons block for calls-to-action. The Cover block supports fixed background (parallax), focal point selection, and minimum height settings — features that used to require a page builder.

Multi-Column Layouts

The Columns block provides responsive multi-column layouts. You can specify column ratios (e.g., 70/30 for content plus sidebar), nest blocks inside each column, and the columns automatically stack on mobile. For more advanced layouts, the Group block with flexbox settings (introduced in WordPress 6.2) gives you horizontal and vertical arrangements with gap controls.

Content Grids with the Query Loop

The Query Loop block is a visual replacement for custom WP_Query templates. It lets you display posts filtered by category, tag, author, or custom taxonomy — arranged in grids or lists — without writing any PHP. Combine it with the Post Template block to control how each post in the loop renders: featured image, title, excerpt, date, author, and categories.

For a blog homepage, insert a Query Loop block set to display your latest 6 posts in a 3-column grid. Each post template includes a Post Featured Image block, Post Title block, and Post Excerpt block. The result looks identical to what page builders produce, but it runs on core WordPress code.

Block Patterns for Reusable Layouts

Block patterns are pre-configured block arrangements you can insert with one click. WordPress ships with dozens of built-in patterns (testimonials, pricing tables, team grids, feature lists), and Twenty Twenty-Five adds theme-specific patterns. You can also create custom patterns in the Site Editor under Patterns → Create Pattern.

This replaces the “saved templates” or “section library” feature of page builders. Create a pattern once, reuse it everywhere. Synced patterns (formerly Reusable Blocks) update everywhere when edited. Unsynced patterns are independent copies.


Contact Forms Without a Plugin

This is the section that surprises most people. Yes, you can build a functional contact mechanism without Contact Form 7, WPForms, Gravity Forms, or any form plugin.

Option 1: The WordPress Form Block (WordPress 6.5+)

Starting with WordPress 6.5, the core block editor includes basic form handling. While not as feature-rich as dedicated form plugins, the form-related blocks (under experimental/beta in some installations) provide name, email, and message fields with basic validation. Check your WordPress version — this feature is being progressively enhanced in each release.

Option 2: Email Link Approach

The simplest no-plugin approach is a structured contact section using the mailto: protocol. Create a Group block with a styled background, add a Heading (“Get in Touch”), a Paragraph with your contact details, and a Buttons block with a mailto link:

<!-- Button block with mailto link -->
<div class="wp-block-buttons">
  <div class="wp-block-button">
    <a class="wp-block-button__link" href="mailto:hello@yoursite.com?subject=Website Inquiry">
      Send Us an Email
    </a>
  </div>
</div>

This opens the visitor’s email client with a pre-filled subject line. It is simple, reliable, and requires zero server-side processing.

Minimal WordPress admin dashboard with only essential plugins and core features enabled
Running WordPress with only core features reduces attack surface, improves performance, and simplifies maintenance.

Option 3: Embedded Third-Party Form

Use the Custom HTML block to embed a form from Google Forms, Typeform, or Tally (which has a free tier). The form processing happens externally, and you keep your WordPress installation plugin-free. This is a pragmatic middle ground when you need form fields but want to avoid WordPress form plugins.


Custom Templates for Different Page Types

FSE’s template system lets you create custom templates for any page without writing PHP. In the Site Editor, go to Templates and create new templates for:

  • Landing Page (no header/footer): Create a blank template. Add only a Group block with your landing page content. Use the Cover block for full-screen sections. This is exactly what page builders offer as “canvas” or “blank page” templates.
  • Portfolio Page: Create a template with a full-width Gallery block and Query Loop filtering a “Portfolio” category.
  • Blog Archive: Customize the archive template with a Query Loop in grid layout, sidebar with recent posts, and category navigation.
  • About Page: Create a template with Cover block hero, Columns for team members, and a Media & Text block for the founder section.

Each page can select its template from the Page Attributes panel. You build the template visually in the Site Editor, and it applies to any page that selects it. No custom PHP, no theme file editing, no template plugin.

Typography and Spacing Without CSS Plugins

WordPress 6.x gives you granular typography controls directly in the editor. Select any text block and you can adjust:

  • Font family (from theme.json-defined fonts or web-safe system fonts)
  • Font size (using the fluid typography scale from theme.json)
  • Line height and letter spacing
  • Text decoration and text transform
  • Padding and margin on every block

The Global Styles panel (Appearance → Editor → Styles) lets you set site-wide defaults for all blocks. Change the default heading font, button style, or paragraph spacing once, and it applies everywhere. This is the equivalent of a “design system” that previously required a CSS framework plugin or custom theme development.

Fluid typography, introduced in theme.json v2, automatically scales font sizes between screen widths. A heading that is 3rem on desktop smoothly transitions to 1.75rem on mobile without any media queries or responsive plugin.


Performance Benefits of a Plugin-Free Site

A WordPress site running only core features has a measurably smaller footprint. Based on testing with WebPageTest and Lighthouse:

MetricTypical Plugin-Heavy SiteCore-Only Site
HTTP Requests45-808-15
Page Size2-5 MB200-500 KB
JavaScript500 KB – 2 MB50-150 KB
CSS Files8-15 stylesheets1-3 stylesheets
Lighthouse Performance40-7090-100
TTFB (Shared Hosting)800ms – 2s200-400ms

These numbers reflect real-world measurements. A site loading 20+ plugin stylesheets and scripts simply cannot compete on Core Web Vitals with a site running vanilla WordPress. Google’s PageSpeed Insights documentation specifically calls out render-blocking resources and unused JavaScript — both problems that proliferate with plugins.

Being Honest: What Still Needs Plugins

Building a site without plugins is viable for many use cases, but there are clear limitations. Honesty about these limitations is more useful than pretending core WordPress can do everything.

You Will Still Need Plugins For:

  • E-commerce: WooCommerce or a similar plugin is essential for product catalogs, carts, checkout, and payment processing. WordPress core has no commerce functionality.
  • Complex Forms: Multi-step forms, conditional logic, file uploads, payment integrations, and form entries management require a form plugin. The core form blocks handle basic cases only.
  • Advanced SEO: While you can write good meta descriptions and structured content without a plugin, tools like RankMath or Yoast provide XML sitemaps, schema markup, redirect management, and SEO analysis that core WordPress does not include.
  • Caching and CDN Integration: WordPress does not include page caching natively. For high-traffic sites, a caching plugin (WP Super Cache, W3 Total Cache) or server-level caching is necessary.
  • Backup and Migration: WordPress has no built-in backup system. Regular backups require either a plugin (UpdraftPlus, BlogVault) or server-level backup solutions.
  • Membership and Access Control: Restricting content to logged-in users or subscription tiers requires a membership plugin. Core WordPress only has basic user roles.
  • Analytics: WordPress does not include built-in analytics. You need either a plugin (Site Kit, MonsterInsights) or manual Google Analytics / Plausible integration via a code snippet.

“Plugins aren’t the enemy. Unnecessary plugins are. Build with core first, then add plugins only for functionality that WordPress genuinely cannot provide.”

Developer best practice from the WordPress Plugin Developer Handbook

Practical Example: Building a Business Site

Let us walk through a concrete example. You are building a small business website for a consulting firm. The site needs: homepage, about page, services page, blog, and contact page. No e-commerce, no membership — a straightforward business presence.

Homepage Layout

In the Site Editor, create a custom “Homepage” template:

  1. Hero Section: Cover block with a background image, dark overlay at 60%, and a Heading + Paragraph + Buttons group centered on top. Set minimum height to 80vh.
  2. Services Overview: A Group block with a light background color. Inside, a Heading (“Our Services”) followed by a 3-column Columns block. Each column contains an icon (Image block with SVG or emoji), a Heading (H3), and a Paragraph describing the service.
  3. About Teaser: Media & Text block with a team photo on one side and company description on the other. The Media & Text block handles responsive stacking automatically.
  4. Latest Blog Posts: Query Loop block set to display 3 recent posts in a grid. Post Template includes Post Featured Image, Post Title, and Post Excerpt.
  5. Call-to-Action: Cover block with the gradient from theme.json, a Heading (“Ready to work together?”), and a Buttons block linking to the contact page.

This layout matches what agencies typically build with Elementor or Divi. The difference is that it runs on zero plugins, loads faster, and will never break due to a plugin update conflict.

Services Page with Accordions

WordPress 6.6 introduced the Details block (an accordion/expandable section). Use it to create a services FAQ or expandable service descriptions without an accordion plugin. Combine the Details block with a Group block for styled containers.

Blog with Sidebar

Edit the blog archive template in the Site Editor. Create a 70/30 Columns layout. The main column gets a Query Loop block displaying posts. The sidebar column gets a Group block containing: Search block, Latest Posts block (with thumbnails enabled), Categories block, and Tag Cloud block. All native WordPress blocks — no widget plugin needed.


Advanced Techniques: Pushing Core Further

Custom Block Styles via theme.json

You can register custom block styles (variations) in theme.json without any PHP. Add block style variations that change how a block looks — for example, a “card” style for the Group block that adds a shadow and border radius, or a “highlight” style for paragraphs that adds a left border and background color.

{
  "styles": {
    "blocks": {
      "core/group": {
        "variations": {
          "card": {
            "border": {
              "radius": "8px"
            },
            "shadow": "0 2px 8px rgba(0,0,0,0.08)",
            "spacing": {
              "padding": {
                "top": "2rem",
                "bottom": "2rem",
                "left": "2rem",
                "right": "2rem"
              }
            }
          }
        }
      }
    }
  }
}

Responsive Design Controls

WordPress 6.3+ includes responsive breakpoint awareness in several blocks. The Columns block stacks on mobile by default. The Navigation block collapses to a hamburger menu. The Cover block adjusts minimum height. Combined with fluid typography from theme.json, you get a responsive site without any responsive design plugin or custom CSS.

Custom CSS Without a Plugin

If you need custom CSS (and sometimes you will), the Global Styles panel includes an “Additional CSS” section. WordPress 6.2+ also lets you add custom CSS per-block in the Advanced panel. This eliminates the need for a “Custom CSS” plugin or “Header/Footer Scripts” plugin for most use cases.

Ideal Use Cases for a Core-Only Site

A plugin-free WordPress site works best for:

  • Portfolio sites for designers, photographers, and creatives
  • Small business brochure sites (consulting firms, agencies, freelancers)
  • Personal blogs focused on writing, not features
  • Landing pages for products or events
  • Documentation sites using block patterns for consistent layouts
  • Educational content sites where performance and simplicity matter
  • Development sandboxes for learning WordPress core capabilities

Best Practices for Plugin-Free WordPress

  1. Start with a block theme. Classic themes cannot use FSE features. Twenty Twenty-Five, Flavor, or Flavor+ are good choices.
  2. Use a child theme for customization. A child theme with only theme.json and style.css (for the theme header) keeps your changes update-safe.
  3. Leverage synced patterns. Create reusable sections (CTAs, testimonials, feature grids) as synced patterns. Edit once, update everywhere.
  4. Keep WordPress updated. Each release adds new blocks and editor features. WordPress 6.5 added font management. WordPress 6.6 added the Details block, grid layouts, and block-level CSS.
  5. Use the pattern directory. Browse wordpress.org/patterns for community-created patterns you can insert directly from the editor.
  6. Test with Lighthouse regularly. Measure your core-only site’s performance against plugin-heavy alternatives. The numbers will justify the approach.

Conclusion

Building a WordPress site with only core features is no longer a limitation exercise — it is a legitimate development strategy. Full Site Editing, theme.json, block patterns, template parts, and the expanding block library have closed the gap between what plugins provided and what WordPress can do natively. For many sites, the core-only approach delivers better performance, stronger security, lower maintenance, and a cleaner development experience.

The approach is not for every project. E-commerce sites, membership platforms, and sites needing complex forms will still require plugins. But for business sites, portfolios, blogs, and content sites, WordPress core in 2026 provides everything you need. Start with Twenty Twenty-Five, customize through theme.json, build layouts in the Site Editor, and add a plugin only when WordPress genuinely cannot do what you need.

The WordPress ecosystem benefits when developers understand what core can do before reaching for plugins. Try building your next project plugin-free. You might find that WordPress has been more capable than you realized all along.


Frequently Asked Questions

Can I build a WordPress site without any plugins at all?

Yes, for many site types. Business brochure sites, portfolios, personal blogs, and landing pages can be built entirely with WordPress core features using Full Site Editing, theme.json, block patterns, and the block editor. The Twenty Twenty-Five theme is designed specifically for this approach.

Does a plugin-free site load faster?

Significantly. A core-only WordPress site typically generates 8-15 HTTP requests versus 45-80 for plugin-heavy sites. Page sizes drop from 2-5 MB to 200-500 KB. Lighthouse performance scores regularly hit 90-100 on core-only sites, compared to 40-70 on typical WordPress installations.

What is theme.json and why does it matter?

The theme.json file is a JSON configuration file introduced in WordPress 5.8 that controls your entire site’s design system: colors, typography, spacing, layout widths, and block-specific styles. It replaces the need for CSS customization plugins and many functions.php declarations, making design changes declarative and maintainable.

How do I create a contact form without a form plugin?

Three approaches: use the core form blocks available in WordPress 6.5+, use a styled mailto: link with the Buttons block for simple contact, or embed an external form (Google Forms, Tally, Typeform) using the Custom HTML block. Each approach avoids installing a form plugin while still providing visitor contact functionality.

When should I still use plugins?

Use plugins for e-commerce (WooCommerce), advanced forms with conditional logic, SEO tools (sitemaps, schema markup, redirect management), page caching, automated backups, membership/access control, and analytics integration. These features are not available in WordPress core and genuinely require plugin functionality.

Last modified: February 19, 2026

Close