Soames is made of three pieces: WPGraphQL (the API), the Soames plugin (the WordPress side), and soames-astro-theme (the front end, consumed by your site project). Getting Started covers the happy path; this guide goes deeper — installing each piece, customizing the front end, and deploying to production.
The pieces
- WPGraphQL — exposes WordPress over a GraphQL API at
/graphql. - Soames plugin (
soames-wordpress-plugin) — site settings, the assets REST endpoint, Header/Footer menu locations, the hero header controls (title, caption, background image, overlay), the Soames content blocks, previews, the Knowledge Base post type, and the redirect that sends anyone landing on WordPress itself over to your published site. - soames-astro-theme — the Astro front-end theme, published to npm; a site project consumes it as an integration.
The WordPress side is one plugin. Soames used to ship a small companion WordPress theme alongside it, and older instructions tell you to install one. As of Soames 1.0.0 that theme is retired: the plugin declares the featured-image and page-excerpt support the front end needs, and owns the front-end redirect. Nothing to install, and no constraint on which theme you keep active. Upgrading from 0.9.0? Just deactivate the old Soames theme — the plugin takes over on its own.
Install the WordPress side
1. WPGraphQL
Install from the plugin directory: Plugins → Add New, search WPGraphQL, then Install and Activate. Do this first — Soames declares WPGraphQL as a required plugin, so WordPress will not let you activate Soames without it.
2. Soames plugin
Soames isn’t in the WordPress.org plugin directory, so you install it from a release zip. Download soames-wordpress-plugin.zip, then Plugins → Add New → Upload Plugin, install, and Activate. A Soames menu appears in the sidebar.
That download URL always resolves to the newest release, so it never goes stale and there is no version number to track. Every release and its notes are on the releases page, and the download page has the requirements and a step-by-step walkthrough.
If you deploy the plugin by other means — SFTP, or git into wp-content/plugins/ — always deploy it whole. Its editor JavaScript and its PHP have to match; a mismatch breaks block rendering while the editor still looks fine.
3. Updating later
Updates are manual, on purpose. Because Soames isn’t distributed through the WordPress.org directory, it doesn’t appear in your dashboard’s update list and nothing will prompt you. To update: download the zip again, upload it the same way, and choose Replace current with uploaded when WordPress asks. Your settings and content are untouched. It’s worth checking the releases page now and then.
For the rest of the WordPress configuration — permalinks, Soames settings, homepage/blog page, and menus — follow the Getting Started guide.
Set up the front-end project
Option A — Start from the starter template (recommended)
soames-astro-starter is a GitHub template repository: the Soames Astro theme already wired up, and nothing else. Click Use this template → Create a new repository to get your own repo with no shared history, then:
git clone https://github.com/your-username/your-site.git
cd your-site
cp .env.example .env # then set WORDPRESS_GRAPHQL_URL
nvm use
npm install
npm run dev
Or clone it directly and start your own history with rm -rf .git && git init.
A note on which repo to start from. soames-site is the source of this very website — a real, deployed Soames implementation, and a useful thing to read. It is not a starter: it carries soames.app’s own CSS, that site’s visual-regression baselines, and a deployment bound to one host account. Start from the starter and look at soames-site for reference.
Option B — Add Soames to an existing Astro site
If you already have an Astro project, install the front-end dependencies:
npm install @astrojs/react react react-dom sharp soames-astro-theme
Register the integration in astro.config.mjs:
import { defineConfig } from 'astro/config';
import soamesTheme from 'soames-astro-theme';
process.loadEnvFile?.('.env');
export default defineConfig({
output: 'static',
integrations: [
soamesTheme({ wordpressUrl: process.env.WORDPRESS_GRAPHQL_URL }),
],
});
The integration registers React, sources content from WordPress, and injects the page, blog, and Knowledge Base routes. Add your .env with WORDPRESS_GRAPHQL_URL, then run npm run dev.
Keep the two halves in step
The plugin and the front-end theme are two halves of one contract: the plugin emits the block markup, the theme renders it. A block added on one side renders as empty space on the other, so upgrade them together.
- Soames plugin 1.0.0 or newer pairs with
soames-astro-theme0.1.18 or newer. - Update the front end with
npm install soames-astro-theme@latest. While the theme is pre-1.0 a^0.1.xrange covers patch releases only, so moving to a new minor is a deliberate bump.
The download page carries the current compatibility table.
Pin your Node version
Soames needs Node ≥ 18.20.8. The starter ships an .nvmrc already; in your own project, pin a version so collaborators get it automatically:
echo "22" > .nvmrc
nvm use
Customize with component overrides
The theme’s components, layouts, and styles are imported internally as @theme/<path>. To override any of them, create a file at the matching path under src/overrides/ in your site — a whole-file replacement, resolved at build time, with no change at the import site:
src/overrides/components/Footer.tsx replaces @theme/components/Footer.tsx
src/overrides/layouts/Base.astro replaces @theme/layouts/Base.astro
src/overrides/styles/site-overrides.css your site-wide CSS
This is how a site customizes Soames without forking the theme. Copy the theme’s version out of node_modules/soames-astro-theme/src/<path> as your starting point. Because an override replaces the whole file, it stops receiving upstream changes to that file — so override the smallest thing that gets you what you want.
Build and deploy
npm run build # static site in dist/
npm run preview # serve the production build locally
Deploy the dist/ output to any static host (Netlify, Vercel, Cloudflare Pages, S3/CloudFront, etc.). In your host’s settings, use build command npm run build, publish directory dist, and set the WORDPRESS_GRAPHQL_URL environment variable (it isn’t committed — .env is git-ignored). The starter includes a netlify.toml with the build command, publish directory, and Node version already set.
Because the output is static, the site is rebuilt to reflect content changes. Trigger a rebuild after publishing in WordPress — via a host deploy hook, a “rebuild” button, or a schedule. Paste a Build hook URL under Soames → Settings and the plugin will do it for you on every publish.
HTTPS and CloudFlare
Serve WordPress over HTTPS end-to-end, and make sure the WordPress Address and Site Address both use https. On multisite, set each site’s siteurl/home via Network Admin → Sites → Edit → Settings (not Settings → General, and not WP_SITEURL/WP_HOME constants).
CloudFlare: prefer SSL mode Full (strict) with a certificate on the origin. CloudFlare “Flexible” SSL (HTTPS to the browser, HTTP to the origin) makes WordPress mis-detect the scheme and causes mixed-content and redirect-loop issues. If you must use Flexible, add a header-based HTTPS detection snippet to
wp-config.php.
Verify
https://your-site.com/graphqlreturns data (and any firewall/WAF allows it).npm run buildcompletes anddist/contains your pages.- The deployed site shows your content, menus, logo, and footer.
- Visiting your WordPress address sends you to your Soames site — that’s the plugin’s redirect, and it confirms the front-end URL is set. Switch it off with the Front-end redirection checkbox while you’re still setting things up.