Back to Blog
Craft CMS Plugins Tooling

The Craft CMS Plugins I Install on Every Project (And a Few I Don't)

· 11 min read

After 70+ Craft projects, my plugin stack has settled into a pretty consistent pattern. Some plugins go on every single site. Others I reach for in specific situations. And a few popular ones I've actively stopped using.

This isn't a comprehensive catalog of every Craft plugin out there. It's my honest, opinionated list based on what I actually install and why. Your mileage may vary based on the types of projects you build.

The "Every Project" Stack

These go on virtually every Craft site I build. They solve common problems well, they're maintained by reliable developers, and they've never caused me grief on an upgrade.

SEOmatic (nystudio107)

This is the SEO plugin for Craft. Full stop. It handles meta tags, Open Graph, Twitter cards, JSON-LD structured data, sitemaps, and robots.txt. The configuration is deep but sensible, and it integrates with Craft's content model so that SEO data is tied to your sections and entry types.

Terminal
composer require nystudio107/craft-seomatic

What I like about SEOmatic is that it generates reasonable defaults. You don't have to configure everything from scratch. Set up the global defaults, override per section where needed, and let editors fine-tune individual entries. The structured data output is solid and passes Google's Rich Results Test without extra work.

The one complaint I hear is that it's complex. And yes, the settings panel has a lot of options. But you don't need to touch most of them for a typical site. Set the basics and move on.

Retour (nystudio107)

Redirect management and 404 tracking. When someone hits a broken link, Retour logs it in the control panel. You can then create redirects right there. It also supports regex redirects, which is useful during site migrations when URL structures change.

Terminal
composer require nystudio107/craft-retour

I install this on day one because 404s start accumulating from the moment a site goes live. Having them tracked from the beginning means you're never flying blind on broken links.

Vite (nystudio107)

If you're using Vite as your build tool (and I covered why you should in an earlier post), this plugin connects Craft's Twig templates to Vite's dev server and production manifests. One Twig function handles both environments.

Terminal
composer require nystudio107/craft-vite

Imager X (spacecraftio)

Craft has built-in image transforms, but Imager X is significantly better for production use. It gives you more control over output formats (WebP, AVIF), named transform presets, and it can offload transform generation to services like Imgix or Cloudinary.

Terminal
composer require spacecraftio/imager-x

The template syntax is clean:

Twig
{% set transforms = craft.imagerx.transformImage(image, [
  { width: 400, format: 'webp' },
  { width: 800, format: 'webp' },
  { width: 1200, format: 'webp' },
]) %}

<img srcset="{{ craft.imagerx.srcset(transforms) }}"
     sizes="(max-width: 768px) 100vw, 50vw"
     src="{{ transforms[1].url }}"
     alt="{{ image.alt }}">

For sites with heavy image usage (portfolios, e-commerce, media), Imager X is the difference between a fast site and a slow one.

Blitz (putyourlightson)

Static page caching. I covered this in the performance post, but in short: Blitz generates static HTML files so PHP doesn't need to run on cached pages. The performance improvement is dramatic, especially on content-heavy sites.

Terminal
composer require putyourlightson/craft-blitz

I don't install Blitz on every project. Sites with heavy personalization or logged-in user features don't benefit as much. But for marketing sites, blogs, and corporate sites, it's a no-brainer.

The "When You Need It" Stack

These are excellent plugins that I install based on the project requirements.

Formie (verbb)

Form builder. If the site needs a contact form, application form, or any user-facing form more complex than a simple email, Formie is my choice. It has a drag-and-drop builder in the control panel, conditional logic, file uploads, spam protection, and integrations with CRMs and email services. The templating is flexible and the submission management in the control panel is clean.

Terminal
composer require verbb/formie

There's also Freeform by Solspace, which has been around longer. I prefer Formie because it feels more modern, the Verbb team maintains it well alongside their other plugins, and the form builder UI is a bit more intuitive for editors. Both are solid options though.

Navigation (verbb)

If your site has navigation that editors need to manage (not just hardcoded links in a template), this plugin gives them a drag-and-drop nav builder in the control panel. It supports nested menus, custom links mixed with entry links, and multiple nav structures.

Terminal
composer require verbb/navigation

For simple sites with a fixed nav, I just hardcode the links in Twig. But for larger sites where marketing teams want to rearrange the navigation without developer help, Navigation is the right call.

Craft Commerce (craftcms)

E-commerce. First-party plugin from the Craft team. It handles products, variants, orders, payments (Stripe, PayPal, and more), shipping, tax, and discounts. If you're building a store on Craft, this is the only real option, and it's a good one.

Terminal
composer require craftcms/commerce

Commerce is powerful but it's also complex. Plan for extra development time compared to a content-only site. And make sure the client actually needs custom e-commerce. For simple product sales, Shopify embedded on the site might be simpler and cheaper.

Sprig (putyourlightson)

Reactive components in Twig, without writing JavaScript. Think of it as HTMX or Livewire, but for Craft. You build interactive UI components (filters, search, load more buttons, dynamic forms) using Twig templates, and Sprig handles the AJAX communication.

Terminal
composer require putyourlightson/craft-sprig
Twig (Sprig component)
{# _sprig/search-results.twig #}
{% set query = query ?? '' %}

<div sprig>
  <input type="text"
         name="query"
         value="{{ query }}"
         sprig-val:query
         placeholder="Search...">

  {% if query|length > 2 %}
    {% set results = craft.entries
      .search(query)
      .limit(10)
      .all() %}

    {% for entry in results %}
      <a href="{{ entry.url }}">{{ entry.title }}</a>
    {% endfor %}

    {% if not results|length %}
      <p>No results found.</p>
    {% endif %}
  {% endif %}
</div>

Sprig is great for adding interactivity to Twig-based sites without going fully headless. I use it for search, filtering, and pagination on sites that don't need a JavaScript framework.

Redactor or CKEditor

For rich text editing, Craft supports both Redactor and CKEditor as field types via plugins. CKEditor is the newer, more actively developed option and has been getting more attention from the Craft team.

Terminal
composer require craftcms/ckeditor

I've been moving to CKEditor on new projects. The editing experience is better, the configuration is more flexible, and Craft has been investing in its integration.

Plugins I've Stopped Using

These aren't bad plugins. They just didn't earn their spot in my stack over time.

Super Table

Super Table used to be essential for creating repeating field sets without the overhead of Matrix. But with Craft 5's improvements to entry types and the general flexibility of the content model, I find I need it less often. If I need a simple repeating structure, I'll usually model it as entries in a section rather than reaching for Super Table.

Typed Link Field

Craft added a native Link field type that covers most of the use cases Typed Link Field solved. Unless you need very specific link field behavior that the native field doesn't support, the built-in option is good enough now.

GraphQL (for full headless)

Craft Pro's built-in GraphQL API is capable, but I rarely reach for it. For most of my projects, Element API does the job with less complexity. I define my JSON endpoints in a PHP config file, I control the exact shape of the response, and there's no query language for the front-end team to learn. For the rare project that genuinely needs GraphQL (usually when a mobile app or third-party client needs flexible querying), it's there. But for JSON feeds, AJAX endpoints, and simple headless setups, Element API is my preference.

How I Evaluate Plugins

Before installing any plugin, I check a few things:

  1. Who maintains it? nystudio107, Verbb, PutYourLightsOn, Solspace, and the Craft team itself are all reliable maintainers. If a plugin is maintained by an unknown solo developer with no commit activity in 6 months, I'm cautious.
  2. Does it support the current Craft version? A plugin that hasn't been updated for Craft 5 is a red flag. Either it's been abandoned or the maintainer is slow to keep up.
  3. Can I do this without a plugin? Craft's core is powerful. Before adding a plugin, I ask whether a custom module or a few lines of Twig could solve the problem. Fewer dependencies means fewer things that can break on upgrade.
  4. What's the performance impact? Some plugins add overhead to every request. Others only run when needed. I prefer plugins that are light on the critical path.
  5. Is it tested? Check the GitHub repo. Does it have tests? A CI pipeline? Plugins with automated testing are less likely to break on updates.
Keep your plugin count as low as possible. Every plugin is a dependency that needs updating, can introduce security issues, and adds complexity to your project. The best Craft sites I've built have between 5 and 10 plugins, not 30.

The Craft plugin ecosystem is smaller than WordPress's, but the quality is generally higher. Most of the plugins I've listed here are maintained by developers who are deeply invested in the Craft community, and they take backwards compatibility and upgrade paths seriously.

If you're setting up a new Craft project and want advice on which plugins make sense for your specific use case, reach out. I'm always happy to share what I've learned.